线性表实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

线性表实验报告一、实验的目的要求1、了解线性表的逻辑结构特性,以及这种结构特性在计算机内的两种存储结构。2、掌握线性表的顺序存储结构的定义及其C语言实现。3、掌握线性表的链式存储结构——单链表的定义及其C语言实现。4、掌握线性表在顺序存储结构即顺序表中的各种基本操作。5、掌握线性表在链式存储结构——单链表中的各种基本操作。6、认真阅读和掌握实验的程序。7、上机运行本程序。8、保存和打印出程序的运行结果,并结合程序进行分析。二、实验的主要内容题目:请编制C语言,利用链式存储方式来实现线性表的创建、插入、删除和查找等操作。具体地说,就是要根据键盘输入的数据建立一个单链表,并输出该单链表;然后根据屏幕菜单的选择,可以进行数据的插入或删除,并在插入或删除数据后,再输出单链表;最后在屏幕菜单中选择0,即可结束程序的运行。三、解题思路分析在链表中插入数据,不需要进行大量的数据移动,只需要找到插入点即可,可以采用后插入的算法,在插入点的后面添加结点。在链表中删除数据,先找到删除点,然后进行指针赋值操作。四、程序清单#includestdio.h#includestdlib.h#includemath.htypedefintElemType;typedefstructLNode{ElemTypedata;structLNode*next;}LNode;LNode*L;LNode*creat_L();voidout_L(LNode*L);voidinsert_L(LNode*L,inti,ElemTypee);ElemTypedelete_L(LNode*L,ElemTypee);intlocat_L(LNode*L,ElemTypee);voidmain(){inti,k,loc;ElemTypee,x;charch;do{printf(\n);printf(\n1.建立单链表);printf(\n2.插入元素);printf(\n3.删除元素);printf(\n4.查找元素);printf(\n0.结束程序运行);printf(\n================================);printf(\n请输入您的选择(1,2,3,4,0));scanf(%d,&k);switch(k){case1:{L=creat_L();out_L(L);}break;case2:{printf(\n请输入插入位置:);scanf(%d,&i);printf(\n请输入要插入元素的值:);scanf(%d,&e);insert_L(L,i,e);out_L(L);}break;case3:{printf(\n请输入要删除元素的位置:);scanf(%d,&i);x=delete_L(L,i);out_L(L);if(x!=-1){printf(\n删除的元素为:%d\n,x);printf(删除%d后的单链表为:\n,x);out_L(L);}elseprintf(\n要删除的元素不存在!);}break;case4:{printf(\n请输入要查找的元素值:);scanf(%d,&e);loc=locat_L(L,e);if(loc==-1)printf(\n为找到指定元素!);elseprintf(\n已找到,元素位置是%d,loc);}break;}printf(\n----------------);}while(k=1&&k5);printf(\n按回车键,返回...\n);ch=getchar();}LNode*creat_L(){LNode*h,*p,*s;ElemTypex;h=(LNode*)malloc(sizeof(LNode));h-next=NULL;p=h;printf(\n请输入第一个数据元素:);scanf(%d,&x);while(x!=-999){s=(LNode*)malloc(sizeof(LNode));s-data=x;s-next=NULL;p-next=s;p=s;printf(请输入下一个数据:(输入-999表示结束.));scanf(%d,&x);}return(h);}voidout_L(LNode*L){LNode*p;p=L-next;printf(\n\n);while(p!=NULL){printf(%5d,p-data);p=p-next;};}voidinsert_L(LNode*L,inti,ElemTypee){LNode*s,*p;intj;p=L;j=0;while(p!=NULL&&j=i-1){p=p-next;j++;}if(p==NULL||i1)printf(\n插入位置错误!);else{s=(LNode*)malloc(sizeof(LNode));s-data=e;s-next=p-next;p-next=s;}}ElemTypedelete_L(LNode*L,inti){LNode*p,*q;intj;ElemTypex;p=L;j=0;while(p-next!=NULL&&ji-1){p=p-next;j++;}if(!p-next||i1){printf(\n删除位置错误!);return(-1);}else{q=p-next;x=q-data;p-next=q-next;free(q);return(x);}}intlocat_L(LNode*L,ElemTypee){LNode*p;intj=1;p=L-next;while(p!=NULL&&p-data!=e){p=p-next;j++;}if(p!=NULL)return(j);elsereturn(-1);}五、调试心得及收获。1、链式存储在曾加、删除元素师效率高,线性表的链式存储方式是利用不连续的内存空间来保存结点的信息。2、在节点中,不仅需要保存结点本身的数据值,还需要利用指针域保存指向后继的指针3、要编写一个线性表的程序,必须了解及熟悉掌握其每一项基本操作。4、算法并不是程序,要运行必须加工。六、其它所想到的。使程序能在对链表结点进行删除或插入操作时先检查用户是否已经创建链表,若没有创建,则提示用户创建一个链表。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功