1、实验三 实现单链表的各种运算实验三 实现单链表的各种运算姓名 尹亮 学号:2009131334 班级:09计算机三班一、实验目的 了解单链表表的结构特点及有关概念,掌握单链表的各种基本操作算法思想及其实现。 二、实验内容 编写一个程序,实现顺序表的各种基本运算: 1、初始化单链表; 2、单链表的插入; 3、单链表的输出; 4、求单链表的长度 5、判断单链表是否为空; 6、输出单链表的第i位置的元素 ; 7、在单链表中查找一个给定元素在表中的位置; 8、单链表的删除; 9、释放单链表三、实验要点及说明 单链表是线性表的链式存储结构的一种形式,它用一组地址任意的存储单元存放线性表的各个元素。 具体
2、程序如下:#include#includetypedef char elemtype;typedef struct LNode elemtype data; struct LNode *next;linklist;void initlist(linklist *&L) L=(linklist *)malloc(sizeof(linklist); L-next=NULL;void destroylist(linklist *&L) linklist *p=L,*q=p-next; while (q!=NULL) free(p); p=q; q=p-next; free(p); int liste
3、mpty(linklist *L) return(L-next=NULL);int listlength(linklist *L) linklist *p=L;int i=0; while (p-next!=NULL) i+; p=p-next; return(i);void displist(linklist *L) linklist *p=L-next; while (p!=NULL) printf(%c,p-data); p=p-next; printf(n);int getelem(linklist *L,int i,elemtype &e) int j=0; linklist *p=
4、L; while (jnext; if(p=NULL) return 0; else e=p-data; return 1; int locateelem(linklist *L,elemtype e) linklist *p=L-next; int n=1; while(p!=NULL&p-data!=e) p=p-next; n+; if(p=NULL) return(0); else return(n);int listinsert(linklist *&L,int i,elemtype e) int j=0;linklist *p=L,*s; while (jnext; if(p=NU
5、LL) return 0; else s=(linklist * )malloc(sizeof(linklist); s-data=e; s-next=p-next; p-next=s; return 1; int listdelete(linklist *&L,int i,elemtype &e) int j=0; linklist *p=L,*q; while(jnext; if(p=NULL) return 0; else q=p-next; if(q=NULL)return 0; e=q-data; p-next=q-next; free(q); return 1; void main
6、() linklist *h; elemtype e; printf(1)初始化单链表hn); initlist(h); printf(2)依次采用尾插法插入a,b,c元素n); listinsert(h,1,a); listinsert(h,1,b); listinsert(h,1,c); listinsert(h,1,d); listinsert(h,1,e); printf(3)输出单链表h:); displist(h); printf(4)单链表h的长度=%dn,listlength(h); printf(5)单链表h为%sn,(listempty(h)?空:非空); getelem(
7、h,3,e); printf(6)单链表h的第3个元素=%cn,e); printf(7)元素a的位置=%dn,locateelem(h,a); printf(8)在第4个元素位置上插入f元素n); listinsert(h,4,f); printf(9)输出单链表h:); displist(h); printf(10)删除h的第3个元素n); listdelete(h,3,e); printf(11)输出单链表h:); displist(h); printf(12)释放单链表hn); destroylist(h);四,测试与结果结果:五,算法思想:单链表中重要的也是插入节点的运算,即将值为x的新节点插入到第i个节点的位置,现在单链表中找到第i-1个节点,再在其后插入新的节点,假设要在单链表的两个数据分别为a和b的结点之间插入一个数据域为x的结点。P是指向数据域a的结点,s指向数据域为x的结点,为了插入结点*s需要修改结点*p中的指针域,令其指向结点*s而结点s中的指针域应指向结点b,从而实现3个节点之间的逻辑关系的变化。六,心得体会:通过这次试验,我知道了什么事情都得自己动手去思考,去理解,把这些东西都化为自己脑子里的东西,慢慢脱离书本,我知道现在自己的基础不好,但是我相信,慢慢的会变好的!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1