验证性实验2:线性表子系统班级学号20姓名施程程1.实验目的(1)掌握线性表的特点。(2)掌握线性表顺序存储结构和链式存储结构的基本运算。(3)掌握线性表的创建、插入、删除和显示线性表中元素等基本操作。2.实验内容(1)用结构体描述一个字符形的单向链表。(2)创建线性表;在线性表中插入元素、删除元素;显示线性表中所有元素等基本操作。(3)用if语句设计一个选择式菜单。线性表子系统*********************************************1--------建表**2--------插入**3--------删除**4--------显示**5--------查找**6--------求表长**0--------返回*********************************************请选择菜单号(0--6):3.实验程序#includestdio.htypedefstructlinknode{chardata;structlinknode*next;}linnode;linnode*head;intn;voidCreateList(){n=0;linnode*p,*s;charx;intz=1;head=newlinnode;p=head;printf(\n\t\t请逐个输入结点,以“x”为结束标记!\n);printf(\n);while(z){printf(\t\t输入一个字符数据,并按回车:);scanf(%c,&x);getchar();if(x!='x'){s=newlinnode;n++;s-data=x;p-next=s;s-next=NULL;p=s;}elsez=0;}}voidInsList(inti,charx){linnode*s,*p;p=head;intj=0;while(p!=NULL&&ji){j++;p=p-next;}if(p!=NULL){s=newlinnode;s-data=x;s-next=p-next;p-next=s;n++;}elseprintf(\n\t\t线行表为空或插入位置超出!\n);}voidDelList(charx){linnode*p,*q;if(head==NULL){printf(\n\t\t链表下溢!);return;}if(head-next==NULL){printf(\n\t\t线性表已经为空!);return;}q=head;p=head-next;while(p!=NULL&&p-data!=x){q=p;p=p-next;}if(p!=NULL){q-next=p-next;deletep;n--;printf(\n\t\t结点%c已经被删除!,x);}elseprintf(\n\t\t抱歉!没有找到您要删除的结点.);}voidShowList(){linnode*p=head;printf(\n\t\t显示线性表的所有元素:);if(head-next==NULL||p==NULL)printf(\n\t\t链表为空!);else{printf(\n\t\t);while(p-next!=NULL){printf(%5c,p-next-data);p=p-next;}}}voidSearchList(charx){linnode*p;inti=1;if(head==NULL){printf(\n\t\t链表下溢!);return;}if(head-next==NULL){printf(\n\t\t线性表为空,没有任何结点!);return;}if(p!=NULL)printf(\n\t\t在表的第%d位上找到值为%c的结点!,i,x);elseprintf(\n\t\t抱歉,未找到值为%c的结点!,x);}voidmain(){head=NULL;intchoice,i,j=1;charx;while(j){printf(\n);printf(\n\t\t线性表子系统);printf(\n\t\t********************************);printf(\n\t\t*1------建表*);printf(\n\t\t*2------插入*);printf(\n\t\t*3------删除*);printf(\n\t\t*4------显示*);printf(\n\t\t*5------查找*);printf(\n\t\t*6------求表长*);printf(\n\t\t*0------返回*);printf(\n\t\t********************************);printf(\n\t\t请选择菜单号(0--6):);scanf(%d,&choice);getchar();if(choice==1)CreateList();elseif(choice==2){printf(\n\t\t请输入插入的位置i和插入的数据(输入格式:i,x):);scanf(%d,%c,&i,&x);InsList(i,x);}elseif(choice==3){printf(\n\t\t请输入要删除的数值:);scanf(%c,&x);DelList(x);}elseif(choice==4)if(head==NULL)printf(\n\t\t请先建立线性表!);elseShowList();elseif(choice==5){printf(\n\t\t请输入要查找的元素:);scanf(%c,&x);SearchList(x);}elseif(choice==6)printf(\n\t\t线性表长度为:%d,n);elseif(choice==0)j=0;elseprintf(\n\t\t输入错误!请重新输入!);}}4.程序运行5.小结本章主要要求我们掌握的是线性表的特点,也就是顺序存储结构和链式存储结构中的创建、插入、删除、显示、查找等基本操作。这个实验我们是用结构体描述一个字符型的单向链表,也就是线性表的应用。如果要我自己编程序的话我事肯定不行的,还好书上给了我们参考的程序,我看的话是能看的懂的。我在输入好程序,编译的时候有4个错误,是我输入的时候打错单词还有就是漏了分号,还好上机操作可以检查出错误,这也提醒了我那些是容易出错的,我以后会注意的,争取不犯同样的错误。总的来说,实验还是比较成功的,我能很好的从结果中看到线性表的应用。