| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:求单链表讲解
只看楼主 加入收藏
aKARL
Rank: 1
等 级:新手上路
帖 子:36
专家分:6
注 册:2013-7-1
结帖率:20%
收藏
已结贴  问题点数:20 回复次数:5 
求单链表讲解
今天在论坛上搜到一段程序
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define N 100
#define OK 1
#define Error 0
int yes=0;
typedef char elemtype;
typedef struct lnode
{
     char data;
     struct lnode *next;
}lnode,*linklist;
void createlist(linklist *l)
{
     int i,n;
     linklist p;
     char ch;
     printf("请输入单链表的长度:\n");
     scanf("%d",&n);
     *l=(linklist)malloc(sizeof(lnode));
     (*l)->next=NULL;
     printf("请输入单链表中元素:\n");
     for(i=n;i>0;i--)
     {
         p=(linklist)malloc(sizeof(lnode));
         scanf("%c",&ch);
         if((ch=getchar())!='\n')
         {
             p->data=ch;
             p->next=(*l)->next;
             (*l)->next=p;
         }
     }
     yes=1;
}
int length(linklist *l)
{
     int i=0;
     linklist p;
     p=(*l)->next;
     while(p!=NULL)
     {
         i++;
         p=p->next;
     }
     return i;
}
display(linklist *l)
{
     linklist q;
     int i;
     printf("此时单链表元素:\n");
     for(i=1;i<=length(l);i++)
     {
         printf("%3d",i);
     }
     printf("\n");
     q=(*l)->next;
     while(q)
     {
         printf("%3c",q->data);
         q=q->next;
     }
     printf("\n");
}
listdelete(linklist l,int i,char*e)
{
     linklist p=l,q;
     int j=0;
     while(p&&j<i-1)
     {
         p=p->next;
         j++;
     }
     if(!p||j>i-1)
         return -1;
     q=p->next;
     *e=q->data;
     free(q);
     return *e;
}
int listinsert(linklist l,int i,char e)
{
     linklist p=l,s;
     int j=0;
     while(p&&j<i-1)
     {
         p=p->next;
         j++;
     }
     if(!p||j>i-1)
         return -1;
     s=(linklist)malloc(sizeof(lnode));
     s->data=e;
     s->next=p->next;
     p->next=p->next;
     p->next=s;
     return OK;
}
destroylist(linklist l)
{
     linklist p=l,q=l->next;
     while(q)
     {
         free(p);
         p=q;
         q=q->next;
     }
     free(q);
     yes;
}
listempty(linklist l)
{
     return (l->next==NULL);
}
void menu()
{
     printf("                 单链表基本操作实验                   \n");
     printf("******************************************************\n");
     printf("请选择命令序号(0-7):                                 *\n");
     printf("*1创建链表;                                   *\n");
     printf("*2链表插入;                                          *\n");
     printf("*3链表删除;                                          *\n");
     printf("*4求链表长度;                                        *\n");
     printf("*5判断链表是否为空;                                  *\n");
     printf("*6链表输出;                                          *\n");
     printf("*7单链表销毁;                                        *\n");
     printf("*0程序结束.                                          *\n");
     printf("******************************************************\n");
}
void function()
{
     linklist l;
     int i,sel;
     char ch,e;
     while(l)
     {
         menu();
         printf("请输入命令号(0-7):\n");
         scanf("%d",&sel);
         switch(sel)

        {
             case 1:
                 {
                     createlist(&l);
                     printf("单链表创建成功!\n");
                     break;
                 }
             case 2:if(yes==0)
                    {
                        printf("此时表未创建!不能插入元素!\n");
                        break;
                    }
                 else
                 {
                     printf("请输入要插入的位置:\n");
                     scanf("%d",&i);
                     printf("请输入要插入的值:\n");
                     scanf("%c",&e);
                     if((e=getchar())!='\n')
                         listinsert(l,i,e);
                     break;
                 }
             case 3:if(yes==0)
                    {
                        printf("此时表未创建!不能删除元素!\n");
                        break;
                    }
                 else
                 {
                     printf("请输入要删除位置:\n");
                     scanf("%d",&i);
                     listdelete(l,i,&ch);
                     break;
                 }
             case 4:if(yes==0)
                    {
                        printf("此时表未创建!不能求单链表长度!\n");
                        break;
                    }
                 else
                 {
                     printf("单链表的长度是%d\n",length(&l));
                     break;
                 }
             case 5:if(yes==0)
                    {
                        printf("此时表未创建!\n");
                        break;
                    }
                 else if(listempty(l))
                     printf("当前的单链表是空表!\n");
                 else
                     printf("当前单链表为非空表!\n");
                 break;
             case 6:if(yes==0)
                    {
                        printf("此时表未创建!不能输出线性表!\n");
                        break;
                    }
                 else
                 {
                     display(&l);
                     break;
                 }
             case 7:if(yes==0)
                    {
                        printf("此时表未创建!不能销毁单链表!\n");
                        break;
                    }
                 else
                 {
                     destroylist(l);
                     printf("单链表已被销毁!\n");
                     break;
                 }
             case 0:exit(1);break;
             default:
                 printf("输入命令错误!请重新输入:\n");
                 break;
         }
     }
}
int main(void)
{
     function();
     return OK;
}




说实话,似乎没太看懂
who能把他改成用指针的插入删除呢。。。。。。。。最好附上解释,不然这一次过关了下次还是不会
搜索更多相关主题的帖子: 元素 include 
2013-09-27 09:33
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:4 
看你那结帖率直接没心思。

♂ 死后定当长眠,生前何须久睡。♀
2013-09-27 10:46
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:4 
这个主要靠自己!

www.qunxingw.wang
2013-09-28 19:36
hkcmd
Rank: 2
等 级:论坛游民
帖 子:37
专家分:46
注 册:2013-8-21
收藏
得分:4 
去买一本:
      数据结构算法实现及解析
2013-09-29 11:24
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:4 
“who能把他改成用指针的插入删除呢”看到这种半英不英的句子,就想笑

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-09-29 16:47
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:4 
一段这么大的代码 你总知道一点,哪里不知道,就贴哪里, 如果都不知道,就去看书。
2013-10-01 18:08
快速回复:求单链表讲解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024418 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved