(01)顺序表的基本操作_第1页
(01)顺序表的基本操作_第2页
(01)顺序表的基本操作_第3页
(01)顺序表的基本操作_第4页
(01)顺序表的基本操作_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上机实验报告学 院:计算机与信息技术学院专 业:计算机科学与技术(师范)课程名称:数据结构实验题目:顺序表的基本操作班 级:师范二班学 号:201421012737姓 名:呼指导老师:完成时间:2015年12月25日题目:顺序表的基本操作实验目的:(1)学会定义结点类型(为结构体类型) (2)学会定义线性表的顺序存储类型 (3)掌握顺序表的六种基本操作 (4)并实现建立顺序表、求长度、取结点、定位、插入、删除操作实验环境:Microsoft Visual C+ 6.0实验内容及要求:建立顺序表中元素,通过菜单调用相关函数实现顺序表的六种操作。(编写菜单,并为了美观,做清屏(定义清屏文件)1、

2、建立单链表并输出:定义L为sequenlist类型的指针,输入一组整形元素序列,建立顺序表;2、 求表长 :顺序表L中结点个数;3、 取结点 :当1<=i<=LENGTH(L)时,返回L中第i个结点;4、 定位 :当线性表L中存在一个值为x的结点,则返回该点位置;若表L中存在多个x值,返回所有该被定位结点位置;否则返回一个特殊值表示值为x结点不存在;5、 插入 :在顺序表的第i个位置插入值为x的结点,使表长从n变为n+1;6、 删除 :删除顺序表L中的第i个结点。概要设计:1、定义顺序存储结构sequenlist为以下结构体形式,并定义L为该结构体sequenlist形式的指针:t

3、ypedef structdatatype datamaxsize;int last;sequenlist;sequenlist *L; 2、 编写实现实现顺序表的六个基本操作的函数:建立顺序表SETNULL(); 展示顺序表ShowList(L); 求表长LENGTH(L); 取结点GET(L,i); 删除DELETE(L,i);定位LOCATE(L,x); 插入INSERT(L,x,i); 3、 编写主函数,实现菜单调用menu(),通过switch,case语句根据菜单提示选择,进行顺序表的相关操作。算法描述:主菜单界面:在此界面,用户可以选择要操作的选项,回车之后即可进入相应界面进行操

4、作,所有操作均有提示语,比较人性化的管理。1、系统功能设计:建立顺序表展示顺序表求表长 改取结点删除定位插入退出顺序表的基本操作2、 主函数整体程序框架default结 束开始Case 1:SETNULL()Case 2:ShowList(L)Case 3:LENGTH(L)Case 4:GET(L,i)Case 5:DELETE(L,i)Case 6:LOCATE(L,x);Case 7:INSERT(L,x,i);break;break;break;break;break;break;break; 是 否 是 否 是 否 是 否 是 否 是 否 是 否实验代码:#include <s

5、tdio.h>#include <stdlib.h>typedef int datatype;#define maxsize 20typedef struct datatype datamaxsize; Int last;sequenlist; /定义L为sequenlist类型的指针sequenlist *L; /定义*L和L类型混淆不清sequenlist *SETNULL() /*置空表*/ int i=0,n; L=(sequenlist *)malloc(sizeof(sequenlist); /申请空间语句加上才有效 printf("n开始建立顺序表(输

6、入0结束)n"); printf("Input the numder %d:",i+1); scanf("%d",&n); while(n!=0 && L->last < maxsize) printf("Input the numder %d:",i+2); L->datai=n; L->last=i; i+; scanf("%d",&n); printf("n建立顺序表完毕!n"); return L;void ShowLis

7、t(sequenlist *L) /*展示表*/ int i; for(i=0 ; i<=L->last ; i+) printf(" %d ",L -> datai); printf("n");int LENGTH(sequenlist *L) /*求长度*/ if( (*L).last != 0) return ( (*L).last +1); else return 0;Void GET(sequenlist *L,int i) /*取结点*/ if(i >= maxsize - 1) printf("overfl

8、ow!n"); /return 0; /没有返回值,不需要返回 else if(i<1)|(i>(*L).last)+1) printf("Can't Get!n"); /return 0; else printf("第%d个位置的数为: %dn",i,L->datai-1);void LOCATE(L) /*定位*/sequenlist *L; int i , j=0 , x; printf("n请输入要定位的数:"); scanf("%d",&x); for(i=0

9、; i < ( (L->last) + 1) ; i+) if( ( L->datai) = x) printf("n定位顺序表中值为%d的结点为: %dn",x,i+1); j+; if( j=0 ) printf("n不存在!n");int INSERT(L,x,i) /*插入*/sequenlist *L;Int i; int j; if(i >= maxsize - 1) printf("overflow!n"); return 0; else if( (i<1) | (i> (*L).la

10、st)+2) printf("error!n"); return 0; else for( j= (*L).last ; j>=i-1 ; j-) (*L).dataj+1 = (*L).dataj; (*L).datai-1 = x; (*L).last = (*L).last+1; return 1;int DELETE(sequenlist *L , int i) /*删除*/ int j; if(i<1)|(i>(*L).last+1) printf("error!n"); return 0; else for(j=i ; j&

11、lt;(*L).last+1) ; j+) (*L).dataj-1=(*L).dataj; (*L).last-; return 1;menu() printf("n-顺序表的六种操作-n"); printf("n*"); printf("n1、 建立顺序表 SETNULL "); printf("n2、 展示顺序表 ShowList"); printf("n3、 求长度 LENGTH"); printf("n4、 取结点 GET"); printf("n5、 定

12、位 LOCATE"); printf("n6、 插入 INSERT"); printf("n7、 删除 DELETE"); printf("n0、 退出"); printf("n*"); printf("n-请选择所需操作-");void main() Int i=1 , x , ichoice; do menu(); printf("nPlease chioce 0-7:"); scanf("%d",&ichoice); system(

13、"cls"); switch(ichoice) case 1: printf("nttt建立顺序表SETNULLn"); L=SETNULL(); getchar(); printf("n回车键退出"); /设置清屏 getchar(); system("cls");break; case 2: printf("nttt展示顺序表ShowListn"); printf("n表中元素有:n"); ShowList(L); getchar(); printf("n回车键

14、退出"); /设置清屏 getchar(); system("cls");break; case 3: printf("nttt求表长LENGTHn"); printf("n表中元素有:n"); ShowList(L); printf("n顺序表的长度为: %dn",LENGTH(L); getchar(); printf("n回车键退出"); /设置清屏 getchar(); system("cls");break; case 4: printf("nt

15、t取结点GETn"); ShowList(L); printf("n请输入要取结点的位置:"); scanf("%d",&i); GET(L,i); getchar(); printf("n回车键退出"); /设置清屏 getchar(); system("cls");break; case 5: printf("nttt定位LOCATEn"); ShowList(L); LOCATE(L,x); getchar(); printf("n回车键退出"); /

16、设置清屏 getchar(); system("cls");break; case 6: printf("nttt插入INSERT"); printf("n原表中元素有:n"); ShowList(L); printf("n请输入要插入的位置:"); scanf("%d",&i); printf("n请输入要插入的数:"); scanf("%d",&x); INSERT(L,x,i); printf("n插入后的表:")

17、; ShowList(L); getchar(); printf("n回车键退出"); /设置清屏 getchar(); system("cls");break; case 7: printf("nttt删除DELETE"); printf("n原表中元素有:n"); ShowList(L); printf("n请输入要删除的结点:"); scanf("%d",&i); DELETE(L,i); printf("删除后的表:"); ShowList

18、(L); getchar(); printf("n回车键退出"); /设置清屏 getchar(); system("cls");break; case 0: menu(); printf("nntt谢谢使用!n"); i=0;break; default : i=1;break; while(i);实验结果分析:上机调试使用的测试用例以及调试的结果实验结果分析及截图展示:(1) 、菜单界面(为用操作信息户提供)(2) 、根据提示先选择1建立顺序表回车清屏进入建立顺序表函数:根据提示依次将结点元素输入,并以输入0为结束。以下均以12、

19、3、4、5、5、6、7为例。回车退出建立顺序表的函数。(3) 、选择功能2打印顺序表,回车进行继续选择(4) 、选择功能3,输出表长,回车进行继续选择(5) 、选择功能4,取结点根据用户需要,按照提示输入想要取结点的位置:、如图,1<=i<=LENGTH(L)时,若输入要取第4个结点,则为5; 回车返回主菜单继续选择。、若用户输入的要取结点位置i,i>LENGTH(L),则输出“Cant Get!”的语句;、若用户输入的要取结点位置i,i>maxsize,及要取的结点位置超出表空间 回车返回主菜单继续选择。(6)、选择功能5,进行定位结点根据用户需求,进行选择需要定位的

20、结点的位置,输出结果为该被定位结点的位置,若顺序表中存在一个值为x的结点,则返回该点位置;若表L中存在多个x值,返回所有该结点出现的位置;若顺序表中不存在值为x的结点,则输出语句printf(“n不存在!n”);、如图,按照提示输入要定位的结点6,则输出该结点位置为5;、如图若输入要定位的结点不唯一,则输出所有该结点出现的位置;、如图若输入要定位的值不存在,则输出“不存在!”语句;回车返回主菜单继续选择。(7)、选择功能6,插入结点、根据用户需求,选择要插入的位置i,再按照提示输入要插入的结点值,若1<=i<=LENGTH(L)时,则成功插入,打印插入后效果;、若用户选择插入的位置

21、不在要求范围内,及i>LENGTH(L)时,则输出“error!”,并打印原顺序表;回车返回主菜单继续选择。(8) ,选择功能7,删除结点、根据用户要求,输入要删除的结点的位置,若在顺序表的长度内则成功删除,并打印删除后的顺序表;、若用户输入的要删除的结点的位置超过顺序表的长度,则输出“error!”,并打印原表;回车返回主菜单继续选择。(9) 、最后选择菜单功能0,退出顺序表的基本操作。问题分析及总结:1、 刚开始学习数据结构,由于之前c语言知识基础不扎实,所以在sequenlist *L, 将定义的*L和L类型混淆不清。解决:sequenlist 为以下形式的一个结构体,Typede

22、f struct datatype datamaxsize; int last;,定义sequenlist *L,为L为sequenlist类型的一颗指针,而L为sequenlist 类型的一个变量。2、 开始程序无法运行,加上申请空间的语句才能运行,L=(sequenlist*)malloc(sizeof(sequenlist); 解决:前面定义L为sequenlist 类型的指针,所以要给指针申请空间用来存放该指针指向的顺序表。3、 清屏文件用不好,导致有时候进入函数后屏幕一闪而过,解决:加入getchar();语句。由于运用不好,所以导致主函数比较长,所以主函数不清晰。4、 在INSER

23、T和DELETE函数中,函数返回值处理不好,所以总是输出乱码。解决:将函数返回值均设成空,将结果直接在函数中打印。总结:基本学会了定义线性表的顺序存储类型,并掌握了顺序表的六种基本操作【源代码】#include <stdio.h>#include <stdlib.h>typedef int datatype;#define maxsize 20typedef structdatatype datamaxsize;int last;sequenlist;sequenlist *L; /定义*L和L类型混淆不清sequenlist *SETNULL() /*置空表*/int

24、 i=0,n;L=(sequenlist*)malloc(sizeof(sequenlist); /申请空间加上才有效printf("n开始建立顺序表(输入0结束)n");printf("Input the numder %d:",i+1);scanf("%d",&n);while(n!=0&&L->last<maxsize)printf("Input the numder %d:",i+2);L->datai=n;L->last=i;i+;scanf("%

25、d",&n);printf("n建立顺序表完毕!n");return L;void ShowList(sequenlist *L) /*展示表*/int i;for(i=0;i<=L->last;i+)printf(" %d ",L->datai);printf("n");int LENGTH(sequenlist *L) /*求长度*/if(*L).last!=0)return (*L).last+1);elsereturn 0;void GET(sequenlist *L,int i) /*取结

26、点*/ if(i>=maxsize-1)printf("overflow!n"); /return 0;elseif(i<1)|(i>(*L).last)+1)printf("Can't Get!n");/return 0;elseprintf("第%d个位置的数为: %dn",i,L->datai-1);void LOCATE(L) /*定位*/sequenlist *L;int i,j=0,x;printf("n请输入要定位的数:");scanf("%d",&

27、amp;x);for(i=0;i<(L->last)+1);i+)if(L->datai)=x)printf("n定位顺序表中值为%d的结点为: %dn",x,i+1);j+;if(j=0)printf("n不存在!n");int INSERT(L,x,i) /*插入*/sequenlist *L;int i;int j;if(i>=maxsize-1)printf("overflow!n"); return 0;elseif(i<1)|(i>(*L).last)+2)printf("er

28、ror!n");return 0;elsefor(j=(*L).last;j>=i-1;j-)(*L).dataj+1=(*L).dataj;(*L).datai-1=x;(*L).last=(*L).last+1;return 1;int DELETE(L,i) /*删除*/sequenlist *L;int i;int j;if(i<1)|(i>(*L).last+1)printf("error!n");return 0;elsefor(j=i;j<(*L).last+1);j+)(*L).dataj-1=(*L).dataj;(*L)

29、.last-;return 1;menu()printf("n-顺序表的六种操作-n");printf("n*");printf("n1、 建立顺序表 SETNULL ");printf("n2、 展示顺序表 ShowList");printf("n3、 求长度 LENGTH");printf("n4、 取结点 GET");printf("n5、 定位 LOCATE");printf("n6、 插入 INSERT");printf(&q

30、uot;n7、 删除 DELETE");printf("n0、 退出");printf("n*");printf("n-请选择所需操作-");void main() int i=1,x,ichoice;/char ch;/L->last=0;domenu();printf("nPlease chioce 0-7:"); scanf("%d",&ichoice);system("cls");switch(ichoice)case 1: printf(&q

31、uot;nttt建立顺序表SETNULLn"); L=SETNULL(); getchar(); printf("n回车键退出");getchar(); system("cls");break; case 2: printf("nttt展示顺序表ShowListn");printf("n表中元素有:n"); ShowList(L);getchar();printf("n回车键退出");getchar(); system("cls");break; case 3: printf("nttt求表长LENGTHn");printf("n表中元素有:n"); ShowList(L); printf("n顺序表的长度为: %dn",LENGTH(L);getchar();printf("n回车键退出");getchar(); system("cls");break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论