标题:单链表,所有功能实现
只看楼主
梁朝斌
Rank: 4
等 级:业余侠客
帖 子:192
专家分:288
注 册:2012-10-21
结帖率:100%
已结贴  问题点数: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;
 }
 
搜索更多相关主题的帖子: include next 
2012-10-29 12:42
爱闹的娃
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:265
专家分:975
注 册:2011-10-23
得分:5 
。。。。不错哦.......大家共同学习...来顶帖子了...
2012-10-29 12:52
liman123
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:79
专家分:178
注 册:2012-10-6
得分:5 
恩!有前途。不错不错。顶一个!
2012-10-29 18:21
小伟Five
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2012-10-30
得分:5 
很有用。顶一个
2012-10-30 09:22
狼贲
Rank: 2
等 级:论坛游民
帖 子:17
专家分:13
注 册:2012-10-28
得分:5 
不错,顶一个!
2012-10-30 10:08
aKARL
Rank: 1
等 级:新手上路
帖 子:36
专家分:6
注 册:2013-7-1
得分:0 
回复 楼主 梁朝斌
搜到好贴了
2013-09-27 09:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-384833-1-1.html




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

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