ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:58.13KB ,
资源ID:25269821      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25269821.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(经典数据结构上机题答案解析.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

经典数据结构上机题答案解析.docx

1、经典数据结构上机题答案解析数据结构上机实验题目实验一 线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1掌握顺序存储结构的特点。 2掌握顺序存储结构的常见算法。 实验内容 1输入一组整型元素序列,建立顺序表。 2实现该顺序表的遍历。 3在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。 4判断该顺序表中元素是否对称,对称返回1,否则返回0。 5实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6输入整型元素序列利用有序表插入算法建立一个有序表。 7利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺

2、序结构实现循环队列的入队、出队操作。8编写一个主函数,调试上述算法。 #include #include #define OVERFLOW 0#define MAXSIZE 100typedef int ElemType;typedef struct listElemType elemMAXSIZE; int length;Sqlist;void Creatlist(Sqlist &L)int i; printf(请输入顺序表的长度:); /输入一组整型元素序列,建立一个顺序表。 scanf(%d,&L.length); for(i=0;iL.length;i+) scanf(%d,&L.el

3、emi);void printlist(Sqlist &L) /以输出的形式实现对该顺序表的遍历int i; for(i=0;iL.length;i+) printf(%d ,L.elemi); printf(n);void Searchlist(Sqlist &L,int x) /在顺序表中进行顺序查找某一元素x,查找成功则返回其存储位置i,否则返回错误信息int i,k=-1; for(i=0;i=i;j-) L.elemj=L.elemj-1; L.elemj=x; L.length+;void Delete(Sqlist &L,int i) /删除顺序表中第i个元素int j;for(

4、j=i;jL.length;j+) L.elemj-1=L.elemj;L.length-;void Insert(Sqlist &L,int x) /输入一个元素x,把它插入到有序表中,使顺序表依然有序。int i,j; if(L.length=MAXSIZE) exit(OVERFLOW); /表满,不能插入 for(i=1;i=L.length&L.elemi-1=i;j-) L.elemj=L.elemj-1; L.elemi-1=x; L.length+;void Creatlist_sorted(Sqlist &L) /利用有序表插入算法建立一个有序表int i,num; Elem

5、Type x; L.length=0; printf(请输入顺序表的长度:); scanf(%d,&num); for(i=1;i=num;i+) scanf(%d,&x); Insert(L,x); void Merger(Sqlist &p,Sqlist &r,Sqlist &c) /建立两个非递减有序表,并把它们合并成一个非递减有序表 ElemType *a,*b,i=0,j=0,k=0; a=&p.elem0; b=&r.elem0; c.length=p.length+r.length; while(ip.length&j=*b) c.elemk=*b;b+;k+;j+; else

6、c.elemk=*a;a+;k+;i+; if(j=r.length) for(;kc.length;k+) c.elemk=*a;a+; else if(i=p.length) for(;kc.length;k+) c.elemk=*b;b+;void main()Sqlist L,M,N; int x,i,n; printf(1.建立一个顺序表.n); printf(2.以输出的形式对该顺序表遍历.n); printf(3.在顺序表中进行顺序查找某一元素x.n); printf(4.在顺序表的第i个位置上插入一个元素x.n); printf(5.删除顺序表中第i个元素.n); printf

7、(6.利用有序表插入算法建立一个有序表.n); printf(7.建立两个非递减有序表,并把它们合并成一个非递减有序表.n); printf(8.输入一个元素x,把它插入到有序表中,使顺序表依然有序.n); while(1) printf(请选择:); scanf(%d,&n); switch(n) case 1:Creatlist(L);break; case 2:printlist(L);break; case 3:printf(请输入要查找的元素x:); scanf(%d,&x); Searchlist(L,x);break; case 4:printf(请输入要插入的位置i:); sc

8、anf(%d,&i); if(iL.length+1) printf(error!n);break; printf(请输入要插入的值x:); scanf(%d,&x); Inseri(L,i,x); printlist(L);break; case 5:printf(请输入要删去的元素的位置i:); scanf(%d,&i); if(iL.length) printf(error!n);break; Delete(L,i); printlist(L);break; case 6:Creatlist_sorted(L); printlist(L);break; case 7:Creatlist_

9、sorted(L); Creatlist_sorted(M); Merger(L,M,N); printlist(N);break; case 8:Creatlist_sorted(L); printf(请输入要插入的元素x:); scanf(%d,&x); Insert(L,x); printlist(L);break; 实验二 链式存储结构(一)-单向链表的有关操作 实验学时 3学时 背景知识:单向链表的插入、删除及应用。 目的要求 1掌握单向链表的存储特点及其实现。 2掌握单向链表的插入、删除算法及其应用算法的程序实现。 实验内容 1随机产生或键盘输入一组元素,建立一个带头结点的单向链表

10、(无序)。 2遍历单向链表。 3把单向链表中元素逆置(不允许申请新的结点空间)。 4在单向链表中删除所有的偶数元素结点。 5编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个非递减有序单向链表。 6利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。 7利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。 8利用算法1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。* 9采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。10在主函数中设计一个简单的菜单,分别调试上述算法。 *1

11、1综合训练:利用链表实现一个班级学生信息管理(数据录入、插入、删除、排序、查找等,并能够实现将数据存储到文件中)/*单向链表的有关操作示例*/*类型定义及头文件部分,文件名为sllink.h*/ #include #include typedef int ElemType;/元素实际类型 typedef struct LNode ElemType data; struct LNode *next; LNode,*LinkList; /定义结点、指针类型名 /头插法建立无序链表 void CreateList(LinkList &L) LinkList p; ElemType e; L=(Lin

12、kList)malloc(sizeof(LNode); L-next=NULL; printf(头插法建立链表,以0结束n); scanf(%d,&e); while(e) p=(LinkList)malloc(sizeof(LNode); p-data=e; p-next=L-next; L-next=p; scanf(%d,&e); /*非递减有序单向链表L插入元素e序列仍有序*/ void Insert_Sort(LinkList &L,ElemType e) LinkList p,s; s=(LinkList)malloc(sizeof(LNode); s-data=e; p=L; w

13、hile(p-next&p-next-datanext;/*查找插入位置*/ s-next=p-next; /*插入语句*p结点后插入*s结点*/ p-next=s; /*建立递增有序的单向链表*/ void Create_Sort(LinkList &L) ElemType e; L=(LinkList)malloc(sizeof(LNode); L-next=NULL; printf(建立有序表,输入任意个整型数据以0结束n); scanf(%d,&e); while(e) Insert_Sort(L,e); scanf(%d,&e); /*单向链表的遍历*/ void Traverse(

14、LinkList L) LinkList p; printf(遍历链表); for(p=L-next;p;p=p-next) printf(%5d,p-data); printf(n); /*在单向链表删除元素e*/ void Delete(LinkList &L,ElemType e) LinkList p,q; p=L; q=L-next; while(q& q-data!=e)/查找元素的删除位置 p=q; q=q-next; if(!q) printf(nnot deleted);/*未找到元素e*/ else p-next=q-next;/*找到删除*/ free(q); /*单向链

15、表的逆置*/ void exch(LinkList &L) LinkList p,s; p=L-next; L-next=NULL; while(p) s=p; p=p-next; s-next=L-next; L-next=s; /*两个非递减有序单向链表合并后仍为非递减序列*/ void MergeIncrease(LinkList La,LinkList Lb,LinkList &Lc) LinkList p,q,s,rear; p=La-next; q=Lb-next; Lc=rear=La; free(Lb); while(p&q) if (p-datadata) s=p;p=p-n

16、ext; else s=q;q=q-next; rear-next=s;/*较小元素插入表尾*/ rear=rear-next; if (p) rear-next=p; else rear-next=q实验三 迷宫问题求解实验学时 3学时 背景知识:栈的操作。 目的要求 1掌握栈的存储特点及其实现。 2掌握栈的出栈和入栈操作。实验内容: 以一个mxn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。要求:首先实现一个顺序或链表做存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i, j,

17、d)的形式输出,其中:(i, j)表示迷宫的坐标,d表示走到下一坐标的方向。如对下面的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2),.迷宫约定, x方向为行方向,y方向为列方向,迷宫开始坐标(左上角)为(1,1)。 #include #include #include struct node int sign;/标识,0什么都不在,1在open中,2在closed中 int flag;/标志位 0/1,0可以走,1不可以走 int f,g,h;/判断函数 int x,y;/坐标 int old;/是否old节点,0非,1是;struct

18、 link node fnode; link *next; link *pri;link *open,*closed,*bestnode,*successor,*p,*q,*r,*s;int maze_flag77= 0,1,0,0,0,0,0, 0,1,0,1,0,1,0, 0,1,0,0,0,1,0, 0,1,0,1,0,1,0, 0,0,0,1,0,0,0, 1,1,0,1,0,1,0, 0,0,0,0,0,1,0;/表示迷宫的数组,0可以走,1不可以走node maze77;int judge(node n)/判断函数,判断n节点是否可以走 if(n.flag=1) return(1)

19、; else return(0);void in_open(node n)/将n节点放入open表 p=open; while(p-next!=open) if(n.f=p-fnode.f) p-next-pri=(link *)malloc(sizeof(link); p-next-pri-pri=p; p=p-next; p-pri-next=p; p-pri-pri-next=p-pri; p=p-pri; p-fnode.flag=n.flag; p-fnode.f=n.f; p-fnode.g=n.g; p-fnode.h=n.h; p-fnode.x=n.x; p-fnode.y=

20、n.y; p-fnode.old=n.old; p-fnode.sign=n.sign=1; else p=p-next; open-pri=(link *)malloc(sizeof(link); open-pri-pri=p; open-pri-next=open; p-next=open-pri; p=p-next; p-fnode.flag=n.flag; p-fnode.f=n.f; p-fnode.g=n.g; p-fnode.h=n.h; p-fnode.x=n.x; p-fnode.y=n.y; p-fnode.old=n.old; p-fnode.sign=n.sign=1;

21、void out_open(node n)/将n节点从open表中移出 p=open; while(p-next!=open) if(n.f=p-fnode.f) link *p1; p1=p-next; p-next=p-next-next; p-next-pri=p; free(p1); n.sign=0; else p=p-next; void in_closed(node n)/将n节点放入closed表 while(q-next!=closed) if(n.f=q-fnode.f) q-next-pri=(link *)malloc(sizeof(link); q-next-pri-

22、pri=q; q=q-next; q-pri-next=p; q-pri-pri-next=q-pri; q=q-pri; q-fnode.flag=n.flag; q-fnode.f=n.f; q-fnode.g=n.g; q-fnode.h=n.h; q-fnode.x=n.x; q-fnode.y=n.y; q-fnode.old=n.old; q-fnode.sign=n.sign=2; else q=q-next; closed-pri=(link *)malloc(sizeof(link); closed-pri-pri=q; closed-pri-next=closed; q-n

23、ext=closed-pri; q=q-next; q-fnode.flag=n.flag; q-fnode.f=n.f; q-fnode.g=n.g; q-fnode.h=n.h; q-fnode.x=n.x; q-fnode.y=n.y; q-fnode.old=n.old; q-fnode.sign=n.sign=2;void out_closed(node n)/将n节点从closed表中移出 q=closed; while(q-next!=closed) if(n.f=q-fnode.f) link *q1; q1=q-next; q-next=q-next-next; q-next

24、-pri=q; free(q1); n.sign=0; else q=q-next; void in_bestnode(node n)/将n节点设为bestnode节点 while(r-next!=bestnode) if(n.f=r-fnode.f) r-next-pri=(link *)malloc(sizeof(link); r-next-pri-pri=r; r=r-next; r-pri-next=r; r-pri-pri-next=r-pri; r=r-pri; r-fnode.flag=n.flag; r-fnode.f=n.f; r-fnode.g=n.g; r-fnode.h

25、=n.h; r-fnode.x=n.x; r-fnode.y=n.y; r-fnode.old=n.old; else r=r-next; bestnode-pri=(link *)malloc(sizeof(link); bestnode-pri-pri=r; bestnode-pri-next=bestnode; r-next=bestnode-pri; r=r-next; r-fnode.flag=n.flag; r-fnode.f=n.f; r-fnode.g=n.g; r-fnode.h=n.h; r-fnode.x=n.x; r-fnode.y=n.y; r-fnode.old=n

26、.old;void out_bestnode(node n)/将n节点的bestnode去掉 r=bestnode; while(r-next!=bestnode) if(n.f=p-fnode.f) link *r1; r1=r-next; r-next=r-next-next; r-next-pri=r; free(r1); else r=r-next; void in_successor(node n)/将n节点设置为successor节点 s=successor; while(s-next!=successor) if(n.f=s-fnode.f) s-next-pri=(link *)malloc(sizeof(link); s-next-pri-pri=s; s=p-next; s-pri-next=s; s-pri-pri-next=s-pri; s=s-pri; s-fnode.flag=n.flag; s-fnode.f=n.f; s-fnode.g=n.g; s-fnode.h=n.h; s-fnode.x=n.x; s-fnode.y=n.y; s-fnode.old=n.old; else

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1