<span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> typedef struct LNode { char data; struct LNode *next; }LNode,*Linklist; int flag=0; void menu() { printf(" 链表的基本操作实验 "); printf("***************************************** "); printf("*请选择命令序号(0——7): * "); printf("*1 创建链表; * "); printf("*2 链表插入; * "); printf("*3 链表删除; * "); printf("*4 链表长度; * "); printf("*5 链表是否为空; * "); printf("*6 链表输出; * "); printf("*7 链表销毁; * "); printf("*0 程序退出; * "); printf("***************************************** "); } void Creatlist_0(Linklist *l) { int i,n; Linklist p; char ch; printf("请输入单链表的长度: "); scanf("%d",&n); *l=(Linklist)malloc(sizeof(LNode)); (*l)->next=NULL; for(i=0;i<n;i++) { printf("请输入链表中元素: "); p=(Linklist)malloc(sizeof(LNode)); scanf("%c",&ch); if((ch=getchar())!=' ') { p->data=ch; p->next=(*l)->next; (*l)->next=p; } } flag=1; } void Creatlist_1(Linklist *l) { int i,n; Linklist p,r; char ch; printf("请输入单链表的长度: "); scanf("%d",&n); *l=(Linklist)malloc(sizeof(LNode)); (*l)->next=NULL; r=*l; for(i=0;i<n;i++) { printf("请输入链表中元素: "); p=(Linklist)malloc(sizeof(LNode)); scanf("%c",&ch); if((ch=getchar())!=' ') { p->data=ch; p->next=r->next; r->next=p; r=p; } } flag=1; } int Lengthlist(Linklist l) { int len=0; Linklist p=l->next; while(p) { len++; p=p->next; } return len; } void Insertlist(Linklist l,int i,char e) { int j; Linklist p=l,r; if(i<1||i>Lengthlist(l)+1) printf("无法插入! "); else { for(j=0;j<i-1;j++) p=p->next; r=(Linklist)malloc(sizeof(LNode)); r->data=e; r->next=p->next; p->next=r; } } void Deletelist(Linklist *l,int i) { int j; Linklist p=*l,r; if(i<1||i>Lengthlist(*l)) printf("无法删除! "); else { for(j=0;j<i-1;j++) p=p->next; r=p->next; p->next=r->next; free(r); } } void Emptylist(Linklist l) { if(flag==0) printf("链表未创建,不能执行判空操作! "); else if(l->next==NULL) printf("链表为空! "); else printf("链表不为空! "); } void Displaylist(Linklist l) { if(flag==0) printf("链表未创建,不能执行显示操作! "); else if(l->next==NULL) printf("链表为空! "); else { Linklist p=l->next; while(p) { printf("%c->",p->data); p=p->next; } printf("NULL "); } } void Destorylist(Linklist l) { Linklist p=l,q=l->next; while(q) { free(p); p=q; q=q->next; } free(p); flag=0; } int main() { Linklist l; int i,select; char e; while(1) { menu(); printf("请输入命令号(0——7): "); scanf("%d",&select); switch(select) { case 1: printf("请选择插入方法(0为头插法,1为尾插法): "); while(scanf("%d",&i)) { if(i==0||i==1) break; else { printf("输入不对,请重新输入(1为头插法,2为尾插法): "); continue; } } if(i==0) Creatlist_0(&l); else Creatlist_1(&l); break; case 2: if(flag==1) { printf("请输入插入位置: "); scanf("%d",&i); printf("请输入插入的字符: "); getchar(); scanf("%c",&e); Insertlist(l,i,e); } else printf("链表未创建,不能执行插入操作! "); break; case 3: if(flag==0) printf("链表未创建,不能执行删除操作! "); else { printf("请输入删除位置: "); scanf("%d",&i); Deletelist(&l,i); } break; case 4: if(flag==0) printf("链表未创建,不能计算长度! "); else printf("链表的长度为:%d ",Lengthlist(l)); break; case 5: Emptylist(l); break; case 6: Displaylist(l); break; case 7: if(flag==0) printf("链表未创建,怎么销毁? "); else Destorylist(l); break; case 0: exit(1);break; default : printf("命令输入有误,请重新输入: "); break; } } return 0; } </span>