《单链表的基本操作.docx》由会员分享,可在线阅读,更多相关《单链表的基本操作.docx(8页珍藏版)》请在第一文库网上搜索。
1、单链表的基本操作实验一线性表的基本操作及其应用一、实验目的1、帮助读者复习C语言程序设计中的知识。、熟悉线性表的逻辑结构。23、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。二、实验内容本次实验提供3个题目,每个题目都标有难度系数,*越多难度越大,学生可以根据自己的情况任选一个题目一:单链表的基本操作(*)问题描述实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。基本要求(1)依次从键盘读入数据,建立带头结点的单链表;(2)输出单链表中的数据元素(3)求单链表的长度;(4)根据指定条件能够取元素和修改元素;(5)实现在指定位置插入和
2、删除元素的功能。【程序调试】ttinc1ude*ma11oc()等*/inc1ude*scanf(),NU11*/ttinc1ude*free()*/ttinc1ude/*getch()*/*函数结果状态代码*/#defineOK1defineERROROtypedefintStatus;typedefintE1emType;typedefstruct1Node(E1emTypedata;struct1Node*next;1Node,*1ink1ist;voidCreate1ist(1ink1ist*1,intn)*算法2.11*/*逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性
3、表1*/inti;1ink1istp;*1=(1ink1ist)ma1Ioc(sizeof(struct1Node);(*1)-next=NU11;/*先建立一个带头结点的单链表*/Printf(请输入%d个数据n”,n);for(i=n;i0;-i)(p=(1ink1ist)ma1Ioc(sizeof(struct1Node);/*生成新结点*/SCanf&p-data);/*输入元素值*/p-next=(*1)-next;/*插入到表头*/(*1)-next=p;voidCreate1ist2(1ink1ist*1,intm)*正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
4、1*/inti;1ink1istp,q;*1=(1ink1ist)ma11oc(sizeof(struct1Node);/*生成头结点*/(*1)-next=NU11;q=*1;Printf(请输入%d个数据n,m);for(i=1;idata);q-next=p;q=q-next;p-next=NU11;voidPrint1ink1ist(1ink1ist1)(1Node*p;p=1-next;whi1e(p)printf(z/%dz,p-data);if(p-next)printf(,z);p=p-next;)Printf(n);)Status1istinsert(1ink1ist1,in
5、ti,E1emTypee)*算法2.9。不改变1*在带头结点的单链线性表1中第i个位置之前插入元素e*/intj=0;1ink1istp=1,s;whi1e(pUjnext;J+;)if(!pIji-1)*i小于1或者大于表长*/returnERROR;s=(1ink1ist)ma1Ioc(sizeof(struct1Node);/*生成新结点*/s-data=e;/*插入1中*/s-next=p-next;p-next=s;returnOK;Status1istDe1ete(1ink1ist1,inti,E1emType*e)*算法2.10。不改变1*/*在带头结点的单链线性表1中,删除第i
6、个元素,并由e返回其值*/intj=0;1ink1istp=1,q;whi1e(p-next&jnext;j+;if(!p-nextji-1)/*删除位置不合理*/returnERROR;q=p-next;/*删除并释放结点*/p-next=q-next;*e=q-data;free(q);return0K;)int1ist1ength(1ink1ist*1)求链表长度(1Node*p;链表的单个元素指针,而不能用链表intj=0;P=1;将其指向链表的第一个元素whiIe(p-next!=NU11)+j;p=p-next;returnj;)intGetE1em(1ink1ist1,inti)
7、(intj,e;1ink1istp=NU11;if(i1ist1ength(1)(Printf(输入的位置不合法n);return;)p=1-next;J=1;whi1e(jnext;j+;e=p-data;printf(第位的数据元素为%dn,i,e);voidmain()inti,n,m,v,z;1ink1ist1a,1b;E1emTypee1,e2;Printf(头插法逆位序建表n);Printf(请输入n值(即是链表长度):);SCanf(%d,&n);Create1ist(&1a,n);/*逆位序输入n个元素的值*/PrintfC1a=);/*输出链表1a的内容*/Print1ink
8、1ist(1a);printf(n);Printf(按尾插法正序建表:n);Printf(请输入m值(即是链表长度):);scanf(,%d,z,&m);Create1ist2(&1b,m);/*逆位序输入n个元素的值*/PrintfC1b=9;/*输出链表1b的内容*/Print1ink1ist(1b);printf(n);Printf(输入在第一个链表插入的位置i=);scanf(%d,&i);printf(z,n,z);Printf(输入在第一个链表插入的元素e1=);scanf&e1);printf(n);1istinsert(1a,i,e1);Printf(在第一个链表插入后1a=)
9、;/*输出链表1a的内容*/Print1ink1ist(1a);Printf(n);Printf(按任意整数求第一个链表表长);scanf(,z%dzz,&v);1ist1ength(1a);printf(第一个链表的长度为%d,1ist1ength(1a);printf(n);Printf(在第一个链表中,请输入要取出的数的位置数);scanf(%d,&z);GetE1em(1a,z);printf(zz,z);Printf(在第一个链表中,输入删除的位置i二);scanf&i);printf(n);1istDe1ete(1a,i,&e2);Printf(删除后1a=);*输出链表1a的内容*/Print1ink1ist(1a);Printf(n);Printf(在第一个链表中,被删除的元素的值e2=%dn,e2);1ist1ength(1a);whi1e(1);)【运行结果】的人在隼一代学视SA的心=i-3输入在第一-4峙了崎八豹兀Nz-S61.*T、梃t松后J%WS-k-7:百仟尊专於求第一彳个表方长5一个被丁输入耍羽山转数的金史恭4布Q的他意无耳干邦在笠一小惊&u.较处除的H5,-2计产.f125-5-7-36-iaF第一个话表二.外事胜体兀素系e2,S