您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《数据结构》-实验报告1
xxx实验报告课程名称数据结构实验名称实验一线性表操作系部班级姓名学号实验时间2012年10月15日21时30分~时分地点机位评语指导教师:成绩一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。2.掌握线性表的顺序存储结构的定义及实现。3.掌握线性表的链式存储结构——单链表的定义及实现。4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。5.掌握线性表在链式存储结构——单链表中的各种基本操作。二、实验内容1.顺序线性表的建立、插入及删除。2.链式线性表的建立、插入及删除。三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。四、程序主要语句及作用1)程序1的主要代码(附简要注释)#includeiostreamusingnamespacestd;#defineMAXSIZE1024//#defineOVERFLOW0//#defineNULL0#defineOK1#defineMAXSIZE1024typedefintelemtype;/*线性表中存放整型元素*/typedefstruct//结构定义头文件sqlist.h{elemtypevec[MAXSIZE];intlen;/*顺序表的长度*/}sqlist;intinitlist(sqlist*L,intk){inti;printf(Inputthelist:);for(i=0;ik;i++)scanf(%d,&L-vec[i]);//cinL-vec[i];同效,注意输入时地址&returnOK;}//以下是整个源程序:#includesqlist.hintmain(){inti,n;sqlist*L,a;//定义表的变量printf(\nInputthelengthofthelistL:\n);scanf(%d,&n);L=&a;//指针引用,如果去掉L=&a语句,会出现什么结果?L-len=n;//将长度传给leninitlist(L,n);printf(Outputthelistanditslength:\n);for(i=0;in;i++)printf(%d,L-vec[i]);printf(\nThissqlist'slengthis%d,L-len);system(pause);return0;}2)程序2的主要代码(附简要注释)/*顺序表的插入利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31}然后在第i个位置插入元素68。注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序本程序实现的是在第i个元素之前插入新的元素(顺序表中元素的次序)的区别。*/#includeiostreamusingnamespacestd;//#includeinitlist.h#defineMAXSIZE1024//#defineOVERFLOW0#defineERROR0#defineOK1#defineMAXSIZE1024typedefintelemtype;/*线性表中存放整型元素*/typedefstruct//结构定义头文件initlist.h{elemtypevec[MAXSIZE];intlen;/*顺序表的长度*/}sqlist;intinitlist(sqlist*L,intk){inti;printf(Inputthelist:);for(i=0;ik;i++)scanf(%d,&L-vec[i]);//cinL-vec[i];同效,注意输入时地址&returnOK;}/*----------------------------------------------*/intinsert(sqlist*L,inti,intx)//插入运算,将值为x的元素插入到第i个元素之前{intj;if((*L).len=MAXSIZE){printf(thelistisoverflow\n);returnERROR;}elseif((i1)||(i(*L).len+1)){printf(positionisnotcorrent.\n);returnERROR;}else{for(j=(*L).len-1;j=i-1;j--)//L-len(*L).vec[j+1]=(*L).vec[j];//元素后移(*L).vec[i]=x;//插入元素区别:i-1(*L).len++;//表长度增加1returnOK;}}intmain(){intn,i,x;sqlist*L,a;printf(\nInputthelengthofthelistL:\n);scanf(%d,&n);//输入表长度L=&a;L-len=n;initlist(L,n);printf(\ninputtheinsertlocation:\n);scanf(%d,&i);printf(\ninputtheinsertdata:\n);scanf(%d,&x);if(insert(L,i,x)){printf(Thelengthofthenewlistis:%d\n,L-len);printf(Outputthenewlist'sdata:\n);for(i=0;iL-len;i++)printf(%d\n,L-vec[i]);}elseprintf(can'tinsertthedata!\n);system(pause);return0;}3)程序3的主要代码(附简要注释)#includestdio.h#includemalloc.h#includememory.htypedefstructtagNODE{intvalue;structtagNODE*next;}NODE,*LPNODE;voidInput(LPNODEpHead){LPNODEpNext,pTmp;charch;if(!pHead){return;}pNext=pHead;while(pNext&&pNext-next){pNext=pNext-next;}while(1){printf(enternewvalue:);pTmp=(LPNODE)malloc(sizeof(NODE));memset(pTmp,0,sizeof(NODE));pNext-next=pTmp;scanf(%d,&(pTmp-value));fflush(stdin);printf(continue(y/n)?);ch=getchar();if(ch!='y'&&ch!='Y'){break;}pNext=pNext-next;}}voidOutput(LPNODEpHead){LPNODEpNext;inti=1;if(!pHead){return;}pNext=pHead-next;while(pNext){printf(%dnodevalue:%d\n,i++,pNext-value);pNext=pNext-next;}}voidFreeNode(LPNODEpHead){LPNODEpTmp1,pTmp2;if(!pHead){return;}if(pTmp2=pHead-next){while(pTmp2){pTmp1=pTmp2-next;free(pTmp2);pTmp2=pTmp1;}}}intmain(){NODEhead={0};Input(&head);Output(&head);FreeNode(&head);return0;}五、程序运行结果截图1)程序12)程序2插入数据不在列表范围内:3)程序3六、收获,体会及问题本次试验让我认识到了自己的不足之处太多:1.大部分的时间都用在了编程上,主要是因为C语言掌握的问题,C语言基础不好特别是对于C语言中链表的一些定义和基本操作不够熟练,导致在编程过程中还要不断的拿着c语言的教材查找,所以今后还要对C语言多练习,多动手,多思考。2.数据结构有很强的逻辑性,因此我认为如果在上机之前先把逻辑搞清楚很重要,不管是对算法的设计还是对程序的调试都有很大帮助。3.经过一次上机实践,我认为实践课很重要,上理论课只是纸上谈兵,只是被动地接受,而实践课上能将学过的知识利用起来,同时还有一些东西只能是自己上机实践才能慢慢探索出的。所以我在做试验的时候特别费劲,特别吃力,这也是事出有因的。通过自我反省,总结不足之处后,我还是脚踏实地去查找资料,包括请教老师,上网搜索数据库线性表操作的优秀代码,经过不断的验证,修改和深入的研究,最终使得自己的程序得以运行,实现了实验的最终目的和要求。也许每次实验都是有个过程的,虽然过程比较繁琐和艰难,但是我觉得只要认真的分析实验内容,积极搜索实验所需材料,再多多请教老师和同学,那么实验就不会困难重重。自己要学习的地方太多,以后更要努力学习数据结构。
本文标题:《数据结构》-实验报告1
链接地址:https://www.777doc.com/doc-7272990 .html