下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、v1.0可编辑可修改计算机系数据结构实验报告(1)实验目的:帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。问题描述:1、构造一个空的线性表 L。2、在线,f表L的第i个元素之前插入新的元素 e;3、在线f表L中删除第i个元素,并用e返回其值。实验要求:1、分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。2、在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行 分析。算法分析:由于两种存储结构都用来创建线性结构的数据表,可采用相同的输出模式和整体结构类似的算法,如下:1v1.0可编辑可
2、修改实验内容和过程:顺序存储结构线性表程序清单:/顺序存储结构线性表的插入删除#include <iostream>#include <>using namespace std;# define LISTSIZE 100# define CREMENTSIZE 10typedef char ElemType;/typedef struct ElemType *elem;/int len;int listsize;SqList;定义数据元素类型为字符型数据元素首地址/当前元素个数/ 当前存储最大容量/构造一个空的线性表L13 -int InitList(SqList &a
3、mp;L)二(ElemType *)malloc(LISTSIZE*sizeof(ElemType);if (!exit(-2);/分配空间失败=0;=LISTSIZE;/在顺序线性表L中第i个位置之前插入新的元素eint ListInsert(SqList &L,int i,ElemType e)if (i<1|i>+1) return -1; /i值不合法if >=ElemType *newelem=(ElemType *)realloc,+CREMENTSIZE)*sizeof(ElemType);/存储空间已满,增加分配if(!newelem) exit (-
4、2); /分配失败=newelem;+=CREMENTSIZE;ElemType *q=&i-1);for (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<1|i> return -1; /i值不合法ElemType *p=&i-1);e=*p; ElemType*q=+;for (+p;p<=q+1;+p
5、) *(p-1)=*p; /被删除元素之后的元素前移return 1;int main ()SqList L; char e,ch;int i,j,state;InitList(L);/构造线性表/数据初始化获取表长判断进行插入还是删除操作printf("请输入原始数据(字符串个数099): L=");gets;for ( j=1;j-1!='0'j+)=j;/j='0';printf(" 操作:才f入(I)还是删除(D)n");/AGAIN:cin>>ch;if(ch='I')cout<
6、<"插在第几个元素之前:";/插入操作cin>>i; cout<<"输入要插入的新元素:";cin>>e;cout<<endl;printf("输入数据:L=(%s) state=ListInsert (L,i,e);else if (ch='D')cout<<"删除第几个元素:"cin>>i;cout<<endl;printf("输入数据:L=(%s)state=ListDelete(L,i,e);else
7、goto AGAIN;/cout<<endl<<"正确结果:"if(state=-1) cout<<"ERROR,"printf("L=(%s) ",;/ListInsert(L,%d,%c)",i,e);/删除操作DeleteList(L,%d,e)”,i);操作指示符输入错误处理输出结果if(ch='D'&&state!=-1) cout<<",e="<<e;链式存储结构线性表程序清单:/ 单链存储结构线性表的
8、插入删除 #include <iostream>#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&&j<i)p=p->next; +j;/if(!p
9、|j>i) return -1;/e=p->data;return 1;int ListInsert(LinkList &L,int i,ElemType e)/在带头结点的单链线性表L中第LinkList p,s; int j;p=L;j=0;定义数据元素类型为字符型/获取第i个元素的值寻找第i个元素寻找失败i个元素之前插入元素ewhile(p&&j<i-1) p=p->next;+j;if(!p|j>i-1) return -1;s=(LinkList) malloc( sizeof(LNode);s->data=e;s->
10、next=p->next;p->next=s;return 1; int ListDelete(LinkList&L,int i,ElemType&e)/在带头结点的单链线性表L中,删除第i个元素,并由e返回其值LinkList p,q; int j;p=L;j=0;while(p->next&&j<i-1)p=p->next;+j;if(!(p->next)|j>i-1) return -1;q=p->next;p->next=q->next;e=q->data;free(q);return 1
11、;int newdata(LinkList&L,char *ch)int k;printf("请输入原始数据(字符串个数099): L=");/ 数据初始化gets(ch);将初始for (k=0;chk!='0'k+)ListInsert(L,k+1, chk);/化数据插入链表L中cout<<"OK"<<endl;return k;/返回链表中的元素个数int main ()char *ch;ch=(char *)malloc(100*sizeof(char); /LinkList L;/LNode h
12、ead;/L=&head; =null;int i,k,state; char e,CH,f;k=newdata(L,ch);/=k;/printf(" 操作:插入(定义数组用来辅助数据初始化头指针头结点AGAIN:I )还是删除(D)n");/调用函数使链表数据初始化将元素个数存入头结点的数据域判断进行插入还是删除操作cin>>CH;if(CH='I')cout<<"插在第几个元素之前:";/插入操作cin>>i; cout<<"输入要插入的新元素:";cin&
13、gt;>e;cout<<endl;printf("输入数据:L=(%s)state=ListInsert(L,i,e);+;else if (CH='D')cout<<"删除第几个元素:"cin>>i;cout<<endl;printf("输入数据:L=(%s)state=ListDelete(L,i,e);-;else goto AGAIN;/cout<<endl<<"正确结果:"ListInsert(L,%d,%c)",ch,i
14、,e);/删除操作DeleteList(L,%d,e)",ch,i);操作指示符输入错误处理输出结果if(state=-1) cout<<"ERROR," /cout<<"L=("for(int m=1;>=m;m+)/一一输出数据GetElem(L,m,f);cout<<f;cout<<")"if(CH='D'&&state!=-1) cout<<",e="<<e;/删除操作反馈 e实验结果:由
15、于两个程序的输出模式相同,在此只列一组测试数据:L = () Listinsert (L, 1,'k')L = (EHIKMOP) Listinsert (L, 9, 't')C:Us ers'Ad minist rato rDes kto p;未命名 2.exe .口.| 画L = (ABCEHKNPQTU) ListInsert(L, 4, 'u')CAUs ersAd minist rate rD kt。p:去命名 2.exeL = () ListDelete (L, 1, e)C:lU$g式Administrmt 口 r日
16、7;ktop未命&Zwxs=L = (DEFILMNORU) ListDelete_Sq(L, 5, e)C:Us ersAcl minist rato r D esp;声靠名 2.exeL = (CD) ListDelete_Sq(L, 1, e)v1.0可编辑可修改-15 -测试过程中所注意到的问题主要还是输出与输入界面的问题,通过灵活使用cout 和 cin 函显得不够人性化。数来不断改进。另外,在用户端看来在设计算法时程序的可重复性未考虑, 时间复杂度分析:假定线T表有n个节点,顺序存储结构下,插入程序段以*(p+1)=*p作为基本操作的原操作, 并讨论在最坏情况下的时间复杂度
17、,记T(n)=O(n);删除程序段以*(p-1)=*(p)作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记(n)=O(n)。链式存储结构下,插入程序段以 p=p->next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记 T(n)=O(n);删除程序段以p=p->next作为基本操作的原操作,并讨论在最坏情况下的时间复 杂度,记 丁(n)=O(n)。总结和感想:改进设想在于减少中间变量, 优化数据初始化操作, 和增加程序可重复性。 具体操作完成估 计就该把上述程序全面修改了,还包括算法的修改和增进。从完成该实验的过程中, 出现的问题很多,一方面由于对 C语言的不够熟悉,在语法和语句 执行效率上总是不尽人意,另一方面由于在设计算法时考虑不全面, 在后来写入程序时屡屡 修改,使程序设计效率大大降低。基于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《诊断性试验》课件
- 2025年全球新型穿戴设备行业概况及应用领域调研报告
- 2024年农业局上半年工作总结
- 税务知识普及总结
- 小暑节气消费解读
- 双十一:餐饮行业的转型新机遇
- 汽车电商营销蜕变
- 小学六年级毕业演讲稿范文合集8篇
- 2023年-2024年项目部安全管理人员安全培训考试题【考点梳理】
- 2023年-2024年项目部安全培训考试题附完整答案(考点梳理)
- 修理厂合伙人合同协议书模板
- 大学生医疗创新创业
- 危险化学品无仓储经营单位生产安全事故应急救援预案(新导则版)
- MOOC 企业内部控制-山西省财政税务专科学校 中国大学慕课答案
- 质量管理体系知识培训课件
- 人机交互技术智慧树知到期末考试答案2024年
- GB/T 144-2024原木检验
- YS-T 650-2020 医用气体和真空用无缝铜管
- 心灵养生的疗愈之道
- 建筑设计公司的商业计划书
- 建筑景观设计劳务合同
评论
0/150
提交评论