数据结构实验线性表及其应用_第1页
数据结构实验线性表及其应用_第2页
数据结构实验线性表及其应用_第3页
数据结构实验线性表及其应用_第4页
数据结构实验线性表及其应用_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机系数据结构实验报告(1)实验目的:帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的 操作和应用作为重点。问题描述:1、构造一个空的线性表 L。2、 在线性表L的第i个元素之前插入新的元素 e;3、在线性表L中删除第i个元素,并用e返回其值。实验要求:1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线 性表的基本操作算法。2、在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行 分析。算法分析:由于两种存储结构都用来创建线性结构的数据表,可采用相同的输出模式和整体结构类似的算法,如下:实验内容和过程:顺序存储结构线性

2、表程序清单:顺序存储结构线性表的插入删除#in elude #in elude using namespace std;# define LISTSIZE 100# define CREMENTSIZE10/定义数据元素类型为字符型typedef char ElemType; typedef struct ElemType *elem; int len;int listsize;/数据元素首地址当前元素个数当前存储最大容量SqList;/ 构造一个空的线性表 Lint InitList(SqList &L)=(ElemType *)malloc(LISTSIZE*sizeof(ElemType

3、); if (! exit(-2); / 分配空间失败 =0;=LISTSIZE;/ 在顺序线性表 L 中第 i 个位置之前插入新的元素 e int ListInsert(SqList &L,int i,ElemType e)if (i+1) return -1; /i if =值不合法ElemType *newelem=(ElemType *)realloc,+CREMENTSIZE)*sizeof(ElemType);/ 存储空间已满,增加分配if(!newelem) exit (-2); / =newelem; +=CREMENTSIZE;分配失败ElemType *q=&i-1) ;f

4、or (ElemType *p=&);p=q;-p) *(p+1)=*p; /插入位置及其后的元素后移q=e; +;return 1;/在顺序线性表L中删除第i个元素,并用e返回其值int ListDelete(SqList &L,int i,ElemType&e)if (i return -1; /i ElemType *p=&i-1);值不合法e=*p; ElemType*q=+;for (+p;pch;if(ch=I)couti; coute;coutendl;printf( 输入数据: L=(%s)state=ListInsert (L,i,e);else if (ch=D)couti

5、;coutendl;printf( 输入数据: L=(%s)state=ListDelete(L,i,e);else goto AGAIN;/coutendl 正确结果: ; if(state=-1) coutERROR,; printf(L=(%s) ,;/ListInsert(L,%d,%c),i,e);/ 删除操作DeleteList(L,%d,e),i);操作指示符输入错误处理输出结果if(ch=D&state!=-1) cout,e=e;链式存储结构线性表程序清单:/ 单链存储结构线性表的插入删除 #include 定义数据元素类型为字符型获取第 i 个元素的值寻找第 i 个元素寻找

6、失败#include using namespace std;#define null 0typedef char ElemType;/typedef struct LNodeElemType data; struct LNode *next;LNode,*LinkList;int GetElem(LinkList L,int i,ElemType &e) / LinkList p;int j; p=L-next; j=1; while(p&jnext; +j; / if(!p|ji) return -1;/e=p-data; return 1; int ListInsert(LinkList

7、 &L,int i,ElemType e)/ 在带头结点的单链线性表 L 中第 i 个元素之前插入元素 e LinkList p,s; int j;p=L;j=0; while(p&jnext;+j; if(!p|ji-1) return -1; s=(LinkList) malloc( sizeof(LNode); s-data=e;s-next=p-next; p-next=s;return 1;int ListDelete(LinkList&L,int i,ElemType&e)/ 在带头结点的单链线性表 L 中, 删除第 i 个元素,并由 e 返回其值 LinkList p,q; in

8、t j;p=L;j=0;while(p-next&jnext;+j;if(!(p-next)|ji-1) return -1; q=p-next;p-next=q-next; e=q-data;free(q);return 1;int newdata(LinkList&L,char *ch)int k;printf( 请输入原始数据 ( 字符串个数 099) : L=); / 数据初始化 gets(ch);ListInsert(L,k+1, chk); /返回链表中的元素个数将初始for (k=0;chk!=0;k+) 化数据插入链表 L 中 coutOKCH;if(CH=I)couti; c

9、oute;coutendl;printf( 输入数据: L=(%s) ListInsert(L,%d,%c),ch,i,e); state=ListInsert(L,i,e);+;else if (CH=D)couti;coute ndl;prin tf(输入数据:L=(%s)state=ListDelete(L,i,e);else goto AGAIN;/coute ndl正确结果:; if(state=-1) coutERROR,; cout=m;m+)/GetElem(L,m,f);coutf;DeleteList(L,%d,e),ch,i);操作指示符输入错误处理/输出结果输出数据co

10、ut);删除操作反馈eif(CH=D&state!=-1) cout,e= LiStIriEet ,EHROR-L=CEHIKHOPp&eeas fruited uith i*etui*n value 0 ies:s any key to Eoratiraue _L = (ABCEHKNPQTU) List In sert(L, 4, u)C:Us ersAd minist rato rD m kto p;未命答 2exeL = () ListDelete (L, 1, e)L = (DEFILMNORU) ListDelete_Sq(L, 5, e)L = (CD) ListDelete S

11、q(L, 1, e)测试过程中所注意到的问题主要还是输出与输入界面的问题,通过灵活使用cout和cin函数来不断改进。另外,在用户端看来在设计算法时程序的可重复性未考虑,显得不够人性化。时间复杂度分析:假定线性表有n个节点,顺序存储结构下,插入程序段以*(p+1)=*p作为基本操作的原操作, 并讨论在最坏情况下的时间复杂度,记T(n)=0(n);删除程序段以*(p-1)=*(p)作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T (n)=O(n)。链式存储结构下,插入程序段以 p=p- next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记 T(n)=O(n);删除程序段以p

12、=p-next作为基本操作的原操作,并讨论在最坏情况下的时间复 杂度,记 T (n)=O(n)。总结和感想:改进设想在于减少中间变量,优化数据初始化操作,和增加程序可重复性。具体操作完成估计就该把上述程序全面修改了,还包括算法的修改和增进。从完成该实验的过程中, 出现的问题很多,一方面由于对 C语言的不够熟悉,在语法和语句 执行效率上总是不尽人意,另一方面由于在设计算法时考虑不全面, 在后来写入程序时屡屡 修改,使程序设计效率大大降低。基于上述两点,今后需全面复习 C语言以效后计,并做好在设计算法方面的工作。思考题:实现链表的逆置算法:以上述链式存储结构线性表程序做基础,可省略数据初始化和输入输出等操作,

温馨提示

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

评论

0/150

提交评论