




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
天津农学院 13级软件工程1班 李光耀实验一 线性表的基本操作一、实验目的: 1掌握线性表的顺序和链式存储结构。2熟练地利用顺序和链式存储结构实现线性表的基本操作。 3能熟练地掌握顺序和链式存储结构中算法的实现。二、实验内容:第一部分:单链表1需求分析本演示程序用TC编写,完成单链表的生成,任意位置的插入、删除,以及确定某一元素在单链表中的位置。 输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元素的值。在所有输入中,元素的值都是整数 输出的形式:在所有三种操作中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。 程序所能达到的功能:完成单链表的生成(通过插入操作)、插入、删除、查找操作 测试数据:A 插入操作中依次输入11、22、33、44、55、66生成一个单链表B 查找操作中输入55返回这个元素在单链表中的位置C 输入要插入的位置为5,插入的元素为123;D 删除操作中输入44。 2概要设计(1)为了实现上述程序功能,需要定义单链表的抽象数据类型:ADT LinkList 数据对象:D=ai|aiIntegerSet,i=0,1,2,n,n0 数据关系:R=|ai,ai+1 D基本操作:InitLinkList(&L)操作结果:构造一个空的单链表L.InsLinkList(&L,pos,e)初始条件:单链表L已存在操作结果:将元素e插入到单链表L的pos位置DelLinkList(&L,pos,&e)初始条件:单链表L已存在操作结果:将单链表L中pos位置的元素删除,元素值置入e中返回LocLinkList(L,e)初始条件:单链表L依存在操作结果:单链表L中查找是否元素e,若存在,返回元素在表中的位置;若不存在,返回-1.Menu()操作结果:在屏幕上显示操作菜单(2)本程序包含7个函数: 主函数main() 初始化单链表函数InitLinkList() 显示操作菜单函数menu() 显示单链表内容函数dispLinkList() 插入元素函数InsLinkList() 删除元素函数DelLinkList() 查找元素函数LocLinkList()InitLinkListInsLinkList各函数间关系如下:mainDelLinkListMenudispLinkListLocLinkList实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他模块也都需要写出伪码算法。1) 结点类型和指针类型typedef struct node int data;struct node *next;Node,*LinkListl;2) 单链表的基本操作为了方便,在单链表中设头结点,其data域没有意义。bool InitLinkList(LinkList &L)(伪码算法)void DispLinkList(LinkList L)(伪码算法)void menu()(伪码算法)bool InsLinkList(LinkList &L,int pos,int e)(伪码算法)bool DelLinkList(LinkList &L,int pos,int &e)(伪码算法)int LocLinkList(LinkList L,int e)(伪码算法)3) 其他模块伪码算法4调式分析#include #include using namespace std;struct Nodeint data;Node *next;class LinkListpublic: LinkList(); LinkList(int a,int n); int getLength(); int Get(int i); int Locate(int x); void Insert (int i,int x); int Delete (int i); void PrintList(); void menus(); void InList();private: Node *first;void LinkList:menus() cout=endl;cout0-退出程序endl;cout1-查看原始链表:endl;cout2-查看链表长度:endl;cout3-按位取出链表中的元素:endl;cout4-按值取出链表中的元素:endl;cout5-插入元素:endl;cout6-删除元素:endl; cout=next=NULL;LinkList:LinkList(int a,int n) Node *p=new Node;p=first; for(int i=0;idata=ai; s-next=p-next;p-next=s; p=p-next; int LinkList:getLength()Node *p;int count=-1; p=first; while(p!=NULL) p=p-next; count+; return count;int LinkList:Get(int i) Node *p;p=first-next;int count=1; while(p!=NULL&countnext; count+; if(p=NULL)throw位置; else return p-data;int LinkList:Locate(int x) Node *p;p=first-next;int count=1; while(p!=NULL) if(p-data=x) return count; p=p-next; count+; return 0;/按位查找void LinkList:Insert(int i,int x) Node*p;p=first;int count=0; while(p!=NULL&countnext; count+; if(p=NULL) coutdata=x; s-next=p-next;p-next=s; /插入int LinkList:Delete(int i)Node *p;Node *q;int x; p=first;int count=0; while(p!=NULL&countnext; count+; if(p=0|p-next=0) cout位置next;x=q-data; p-next=q-next; delete q; return x; /删除void LinkList:PrintList()Node*p; p=first-next; while(p!=NULL) coutsetw(4)data; p=p-next;/遍历int main() int r,o;/o用来存储输入的r,r不能直接赋给LinkList(); cout请初始化链表,先请输入长度:r;o=r; cout再输入元素:endl; int ar; for(int q=0;qaq; LinkList B; LinkList b(a,o); int i,j,x,m; b.menus(); for(int j=0;jj; switch(j) case 0:cout退出程序endl;break; case 1:cout链表的元素为:;b.PrintList();coutendl;break; case 2:cout原始链表的长度为: b.getLength()endl;break; case 3:couti;cout取出的元素为:b.Get(i)endl;break; case 4:coutx; cout数为x的位置为: b.Locate(x)endl;break; case 5:couti;coutendl; coutx;coutendl; b.Insert(i,x);cout插入后的链表为:; b.PrintList();coutendl;break; case 6:cout删除前的链表为:;b.PrintList();coutendl; couti;coutendl; cout要删除的数为:b.Delete(i)endl; cout删除后的链表:“”b.PrintList();coutendl;break; 5使用说明程序执行后显示=SELECT:在select后输入数字选择执行不同的功能。要求首先输入足够多的插入元素,才可以进行其他的操作。每执行一次功能,就会显示执行的结果(正确或错误)以及执行后单链表的内容。选择0:退出程序选择1:显示“查看原始链表” ,选择2:显示“查看链表长度 ”,选择3:显示“按位取出链表中的元素” ,要求输入要查找元素的值,执行成功后返回元素在表中的位置选择4:显示“按值取出链表中的元素的位置” ,要求输入要查找元素的位置,执行成功后返回元素在表中的位置选择5:显示“插入元素” ,要求输入要插入的位置,执行成功后返回链表;选择6:显示“删除元素” ,要求输入要删除元素的值,执行成功后返回删除的元素。7测试结果(可以截图)1、建立单链表:2、输入1,查看原始链表3、查看链表的长度:输入2,结果显示如下:4按位取出链表中的元素:输入3,5、按值取出链表中元素的位置:6,插入元素:输入5,结果显示如下:7、删除元素:输入6,结果显示如下: 第二部分:顺序表2需求分析本演示程序用TC编写,完成顺序表的生成,任意位置的插入、删除,以及确定某一元素在顺序表中的位置。 输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位置;查找操作时需要输入元素的值。在所有输入中,元素的值都是整数 输出的形式:在所有三种操作中都显示操作是否正确以及操作后顺序表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。 程序所能达到的功能:完成顺表的生成(通过插入操作)、插入、删除、查找操作 测试数据:A 插入操作中依次输入11,22,33,44,55,66,77,88,99,生成一个顺序表。B 查找操作中依次输入11,33,88返回这3个元素在顺序表中的位置C 删除操作中依次输入2,5,删除位于2和5的元素3概要设计SeqList数据对象:D=ai|aiIntegerSet,i=0,1,2,n,n0 数据关系:R=|ai,ai+1 D基本操作:1.SeqList()length=0; 参构造函数,建立一个空的顺序表2.SeqList(int a,int n);有参构造函数,建立一个长度为n的顺序表3.int Length()return length;求线性表的长度4.int Get(int i);按位查找,在线性表中查找第i个元素5.int Locate (int x);按值查找,在线性表中查找值为x的元素符号6.void Insert (int i,int x);插入操作,在线性表中第i个位置插入值为x的元素7.int Delete (int i);删除操作,删除线性表的第i个元素8.void PrintList();遍历操作,按序号依次输出元素9,int Update (int i ,int m);4、调试运行#include#include #define MaxSize 100using namespace std;class SeqList public: ()length=0; SeqList(int a,int n); SeqList() int InitList(); int Length()return length; int Get(int i); int Locate(int x); void Insert(int i,int x); int Delete(int i); void PrintList();int Update(int i,int m); private: int dataMaxSize; int length; ; SeqList:SeqList(int a,int n) if(nMaxSize)throw参数非法; for(int i=0;in; int an; cout顺序表的长度为:MaxSize)throw参数非法; for(int i=0;iai; datai=ai; length+; cout顺序表的元素为:; for(int i=0;in;i+) coutai ; int SeqList:Get(int i) if(ilength)throw查找位置非法; else return datai-1; int SeqList:Locate(int x) for(int i=0;i=MaxSize)throw上溢; if(ilength+1)throw位置; for(int j=length;j=i;j-) dataj=dataj-1; datai-1=x; length+; int SeqList:Update(int i,int m) if(ilength)throw查找位置非法; else return datai-1=m; int SeqList:Delete(int i) if(length=0)throw下溢; if(ilength)throw位置; int x=datai-1; for(int j=i;jlength;j+) dataj-1=dataj; length-; return x; void SeqList:PrintList() for(int i=0;ilength;i+) coutsetw(4)datai; int main() SeqList b; b.InitList(); int i;int x;int m; for(int j=0;jj; switch(j) case 0:cout退出程序endl;break; case 1:cout顺序表的长度为: b.Length()endl;break; case 2:cout顺序表的元素为:;b.PrintList();coutendl;break; case 3:couti;cout取出的元素为:b.Get(i)endl;break; case 4:coutx; cout数为x的位置为: b.Locate(x)endl;break; case 5:couti;coutendl; coutx;coutendl; b.Insert(i,x);cout插入后的顺序表为:; b.PrintList();coutendl;break; case 6:couti;coutendl; coutm;coutendl; cout修改的元素为:b.Update(i,m)endl; cout修改后的顺序表为:;b.PrintList();coutendl;break; case 7:cout删除前的顺序表为:;b.PrintList();coutendl; couti;coutendl; cout要删除的数为:b.Delete(i)endl; cout删除后的顺序表为:;b.PrintList();c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国蜂窝材料行业市场分析及投资价值评估前景预测报告
- 3 数学建模活动的主要过程教学设计北师大版2019必修第一册-北师大版2019
- 五年级上册心理健康教育教案-3记忆加油站 |辽大版
- 2025年中国华能巴基斯坦公司招聘面试模拟题与应对策略
- 2025年养老评估师初级笔试备考指南与策略
- 2025年市场营销中级考试模拟题集
- 2025年乡镇农技站农业物联网技术岗位面试攻略及模拟题解析
- 2025年农产品质量安全风险评估与控制考试预测题及解析
- 第一节 接入互联网教学设计-2025-2026学年初中信息技术(信息科技)七年级上粤教B版(第4版)
- 2025年医生职位招聘面试技巧模拟题及应对策略报告
- 跨境运输问题应急预案
- 品牌策划与管理(第5版) 课件全套 程宇宁 第1-10章 品牌基本概念- 品牌国际化战略与管理
- NB/T 11553-2024煤矿地表移动观测与数据处理技术规范
- 住宅小区中水回用初步设计说明书
- (新版)婴幼儿发展引导员(初级)技能鉴定理论试题库(含答案)
- 卫生事业单位招聘考试(医学检验专业知识)模拟试卷4
- 超短波在植物病害防治中的应用
- 新媒体运营课件
- 《热敏电阻传感器》课件
- 志愿服务证明(多模板)
- 深圳市养老保险延趸缴申请告知承诺书
评论
0/150
提交评论