收藏 分享(赏)

数据结构线性表应用.doc

上传人:精品资料 文档编号:10602646 上传时间:2019-12-04 格式:DOC 页数:21 大小:81KB
下载 相关 举报
数据结构线性表应用.doc_第1页
第1页 / 共21页
数据结构线性表应用.doc_第2页
第2页 / 共21页
数据结构线性表应用.doc_第3页
第3页 / 共21页
数据结构线性表应用.doc_第4页
第4页 / 共21页
数据结构线性表应用.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、实验一 线性表应用一. 实验目的1、 掌握用 Turbo C 或 VC+上机调试线性表的基本方法;2、 掌握线性表的基本操作,如插入、删除、查找,以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;并能够运用线性表基本操作解决问题,实现相应算法。二. 实验学时:课内实验学时:2 学时课外实验学时:4 学时三备选实验题目1 单链表基本操作练习(实验类型:验证型)1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能:1建立链表2连接链表3输出链表0结束2)实验要求:在程序中定义下述函数,并实现所要求的函数功能:CreateLinklist( ): 从键盘输入数据,创建一个单链表

2、ContLinklist( ):将前面建立的两个单链表首尾相连OutputLinklist( ):输出显示单链表3)实验提示: 单链表数据类型定义(C 语言)# include typedef int ElemType; /元素类型typedef struct LNode ElemType data;struct LNode *next;LNode,*LinkList; 为了算法实现简单,最好采用带头结点的单向链表。4)注意问题: 重点理解链式存储的特点及指针的含义。 注意比较顺序存储与链式存储的各自特点。 注意比较带头结点、无头结点链表实现插入、删除算法时的区别。 单链表的操作是数据结构的基

3、础,一定要注意对这部分的常见算法的理解。2 顺序表基本操作练习(实验类型:验证型)1)问题描述: 从键盘输入一组整型元素序列,建立顺序表。 实现该顺序表的遍历。 在该顺序表中进行顺序查找某一元素,查找成功返回 1,否则返回 0。 判断该顺序表中元素是否对称,对称返回 1,否则返回 0。2)实验要求: 对应问题描述,在程序中定义 4 个相应的函数,实现上面要求的函数功能: 在主程序中设计一个简单的菜单,调用上述 4 个函数3)实验提示: 顺序表存储数据类型定义(C 语言)# define MAXSIZE 100 /表中元素的最大个数typedef int ElemType; /元素类型typed

4、ef struct listElemType elemMAXSIZE; /静态线性表int length; /表的实际长度SqList; /顺序表的类型名4)注意问题: 插入、删除时元素的移动原因、方向及先后顺序。 理解不同的函数形参与实参的传递关系。3 约瑟夫环问题(实验类型:综合型)1)问题描述:有编号为 1, 2n 的 n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数 m,从第一个人按顺时针方向自 1 开始报数,报到 m 者出列,不再参加报数,这时将出列者的密码作为 m,从出列者顺时针方向的下一人开始重新自 1 开始报数。如此下去,直到所有人都出列。试设计算法,输

5、出出列者的序列。2)实验要求: 采用顺序和链式两种存储结构实现3) 实现提示: 用顺序表来存储围座者的序号和密码(顺序存储结构 ). 用 number 和 code 分别表示围座者的序号和密码 .假设围座者人数为 j,当前使用密码为 m,开始报数者位置为 s, 那么下一出列者位置为 s=(s+m-1) mod j. 当我们要在线性表的顺序存储结构上的第 i 个位置上插入一个元素时,必须先将线性表的第 i 个元素之后的所有元素依次后移一个位置,以便腾空一个位置,再把新元素插入到该位置。若要删除第 i 个元素时,也必须把第 i 个元素之后的所有元素前移一个位置。 用链式存储解决此问题时可以采用循环

6、链表.4)注意问题: 顺序存储和链式存储实现此算法时计算出列位置的不同方法,人员出列后所做操作的区别。4 一元稀疏多项式简单的计算器(实验类型:综合型)1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器2)实验要求: 采用单链表存储结构一元稀疏多项式 输入并建立多项式 输出多项式 实现多项式加、减运算3) 实现提示:以两个多项式相加为例 结果多项式另存 扫描两个相加多项式,若都未检测完: 若当前被检测项指数相等,系数相加,若结果未变成 0,则将结果插入到结果多项式。 若当前被检测项指数不等,则将指数较小者插入到结果多项式。 若有一个多项式已检测完,则将另一个多项式剩余部分直接连

7、接到结果多项式。5 长整数(任意长度)四则运算演示程序(实验类型:综合型)1)问题描述:设计一个实现任意长的整数进行加法运算的演示程序2)实验要求: 利用双向循环链表实现长整数的存储,给各结点含一个整型变量。任何整型变量的的范围是 -(2 15-1)(2 15-1) 。 输入和输出形式:按照中国对长整数的表示习惯,每四位一组,组间用逗号隔开。3) 实现提示: 每个结点中可以存放的最大整数为 215-1=32767,才能保证两数相加不会溢出。但若这样存,即相当于按 32768 进制数存,在十进制数与 32768 进制数之间的转换十分不方便。故可以在每个结点中仅存十进制数的 4 位,即不超过 99

8、99 的非负整数,整个链表视为万进制数。 可以利用头结点数据域的符号代表长整数的符号。用其绝对值表示元素结点的树木。相加过程中不要破坏两个操作数链表。两操作数的头指针存于指针数组中是简化程序结构的一种方法。4)注意问题: 不能给常整数位数规定上限。程序设计源代码如下:第一题:#include #include #includetypedef int ElemType; /元素类型typedef struct LNode ElemType data;struct LNode *next;LNode;typedef LNode *LinkList;LinkList head;LinkList L;

9、 /定义单链表头指针 LLinkList L1;LinkList L2;LinkList L12;LinkList Creatlist_L() /尾插入法建立单链表LinkList L,p,r;int x;r=L=(LinkList)malloc(sizeof(LNode);L-next=NULL;cinx;while(x!=0)p=(LinkList)malloc(sizeof(LNode);p-data=x;p-next=NULL;r-next=p;r=p;cinx;return L;LinkList Show_L(LinkList L)LinkList p2;p2=L;while(p2-

10、next!=NULL)coutnext-datanext;return L;LinkList Contlist_L(LinkList A,LinkList B)LinkList C,a,b,e,f;a=A-next;b=B-next;C=A; /C表的头节点f=C=(LinkList)malloc(sizeof(LNode);C-next=NULL; /建立空链表while(a)e=(LinkList)malloc(sizeof(LNode);e-data=a-data;e-next=NULL;f-next=e;f=e;a=a-next;while(b)e=(LinkList)malloc(s

11、izeof(LNode);e-data=b-data;e-next=NULL;f-next=e;f=e;b=b-next;return C;void main()int choice;for(;)coutchoice;if(choice=0)coutchoice1;if(choice1=1)coutchoice1;switch(choice1)case 1:cout#include #include#define Maxsize 100 /表中元素的最大个数typedef int ElemType; /元素类型typedef struct listElemType dataMaxsize; /

12、静态线性表int length; /表的实际长度SqList; /顺序表的类型名int m=0;SqList *creat_SqList(SqList *L) /建立线性表,并输入线性表元素L=(SqList *)malloc(sizeof(SqList);coutx;if(x=0)break;L-datam=x;L-length=m;return L;SqList *all_SqList(SqList *L)coutlength;i+)coutdatailength;j+)if(L-dataj=y)coutlength-1)coutdatam/2datak=L-datam-1-k)conti

13、nue;elsecoutdatam/2datat=L-datam-1-t)continue;elsecoutchoice;if(choice=0) break;switch(choice)case 1:L1=creat_SqList(L1);couty;serch_SqList(L1,y);break;case 4:cout#include #include# define Maxsize 50 /元素最大容量typedef int ElemType; /元素类型typedef struct listElemType numMaxsize; ElemType codeMaxsize;int l

14、ength; /表的实际长度Juserfu; /顺序表的类型名Juserfu L; /定义一个顺序表 Lint j=0; /围坐的总人数Juserfu *creat_Juserfu(Juserfu *L) /建立线性表,并输入线性表元素L=(Juserfu *)malloc(sizeof(Juserfu);coutsm;if(m=0)break;L-numj=s;L-codej=m;L-length=j;return L;Juserfu *output_Juserfu(Juserfu *L) /输出出列者的序列int x_num=0;int x_code;coutx_code;for(j;j0

15、;j-)x_num=(x_num+x_code-1)%j;coutnumx_numcodex_num;for(x_num;x_numnumx_num=L-numx_num+1;L-codex_num=L-codex_num+1;return L;void main()/int s;Juserfu *L1;coutlengthnumicodei#include #includetypedef struct PolyNodefloat coef; /系数float exp; /指数PolyNode *next; /指针域PolyNode;typedef PolyNode *Polynomial;P

16、olynomial A; /定义多项式 APolynomial creat_Poly()Polynomial L,p,r;float x_coef;float x_exp;r=L=(Polynomial)malloc(sizeof(PolyNode);L-next=NULL;coutx_coefx_exp;while(x_coef!=0 p-coef=x_coef;p-exp=x_exp;p-next=NULL;r-next=p;r=p;cinx_coefx_exp;return L;Polynomial show_Poly(Polynomial L)Polynomial p1;p1=L;wh

17、ile(p1-next!=NULL)coutnext-coefnext-expnext;coutnext;p2=B-next;C=(Polynomial)malloc(sizeof(PolyNode);p3=C;p3-next=NULL;while(p1if(sum!=0)D=(Polynomial)malloc(sizeof(PolyNode);D-coef=sum;D-exp=p1-exp;D-next=NULL;p3-next=D;p3=D;p1=p1-next;p2=p2-next;else if(p1-expexp)D=(Polynomial)malloc(sizeof(PolyNo

18、de);D-coef=p1-coef;D-exp=p1-exp;D-next=NULL;p3-next=D;p3=D;p1=p1-next;elseD=(Polynomial)malloc(sizeof(PolyNode);D-coef=p2-coef;D-exp=p2-exp;D-next=NULL;p3-next=D;p3=D;p2=p2-next;while(p1) /多项式 A没有处理完D=(Polynomial)malloc(sizeof(PolyNode);D-coef=p1-coef;D-exp=p1-exp;D-next=NULL;p3-next=D;p3=D;p1=p1-ne

19、xt;while(p2) /多项式 B没有处理完D=(Polynomial)malloc(sizeof(PolyNode);D-coef=p2-coef;D-exp=p2-exp;D-next=NULL;p3-next=D;p3=D;p2=p2-next;return C;void main()Polynomial A;Polynomial B;Polynomial C;cout#include#includetypedef struct Nodeint data;Node* next;Node* front;Node;typedef Node *Operation;Operation cre

20、at()Operation L;Operation p1,p2;L=(Operation)malloc(sizeof(Node);L-next=NULL;L-front=NULL;p2=L;coutnext=NULL;p1-front=NULL;cinp1-data;if(p1-datanext=p2-next;p2-next=p1;L-front=p1;p1-front=p2;p2=p1;return L;Operation add(Operation A,Operation B)Operation C;Operation a,b;Operation p1,p2;int x,y=0;C=(O

21、peration)malloc(sizeof(Node);C-next=NULL;C-front=NULL;p2=C;a=A-front;b=B-front;while(1)p1=(Operation)malloc(sizeof(Node);x=a-data+b-data+y;if(x9999)x=x%10000;y=x/10000;p1-data=x;p1-next=p2-next;p2-next=p1;C-front=p1;p1-front=p2;p2=p1;a=a-front;b=b-front;if(b=Breturn C;void output(Operation A)Operation p;p=A-front;while(1)coutdata;if(p=A-next)break;p=p-front;cout“,“;void main()Operation A;Operation B;Operation C;cout“建立表 A:“endl;A=creat();cout“建立表 B:“endl;B=creat();cout“运算后 C为:“endl;C=add(A,B);output(C);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报