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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构上机考试含答案.docx

1、数据结构上机考试含答案数据结构上机练习题1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出“YSE”;否则,将它插入到序列中使它仍然有序,并输出排序后的序列。3、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果不在,则输出“NO”,否则,将它从序列中删除它,并输出删除后的序列。4、从键盘输入一组任意数据,建立一个有序链表,并从链头开始输出该链,使输出结果是有序的。5、从键盘输入一组任意数据,建立一个包含所有输入数据的单向循环链表,并从链表的任意开始,依次输出该链表中的所有结点。10、设有一个链表,(自己建立,数

2、据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果不在,则输出“NO“,否则,将它从链表中删除,并输出删除后的链表。11、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链头,并输出插入后的链表。12、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链尾,并输出插入后的链表。13、编写栈的压栈push、弹栈pop函数,从键盘输入一组数据,逐个元素压入堆栈,然后再逐个从栈中弹出它们并输出。14、编写栈的压栈push、弹栈pop函数,用它判别(

3、)的匹配问题。15、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树中序遍历的结果。16、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树先序遍历的结果。17、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树后序遍历的结果。18、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树的总结点数。19、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树叶子结点数。20、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出此二叉树的高度。21、给出一个无向图的邻接矩阵,输出各个顶点的度

4、。22、给出一个有向图的邻接矩阵,输出各个顶点的入度与出度。23、输入一个有序序列,利用折半查找来查找一个数是否在序列中,如在,则输出其位置,否则输出“NO”。24、用插入排序方法对一组数据进行排序,并输出每趟排序的结果。25、用选择排序方法对一组数据进行排序,并输出每趟排序的结果。26、用希尔(SHELL)排序方法对一组数据进行排序,并输出每趟排序的结果。27、用快速排序方法对一组数据进行排序,并输出每趟排序的结果。答案:1. #include #include #define N 5#define NULL 0/链表的存储结构typedef struct LNode int data; s

5、truct LNode *next;LNode,*list;/顺序创建链表void creatList(list &l,int n) int i; list p,q; l=(list)malloc(sizeof(LNode); /开辟头结点 p=l; /指针p指向头结点 for(i=0;idata); p-next=q; /p的下一个结点指向新开辟的结点q p=q; /将p指针指向q p-next=NULL;/归并排序void mergeList(list &la,list &lb,list &lc) /将已经排好序的la,lb中的数重新排列成有序(非递减) list pa,pb,pc; pa

6、=la-next;pb=lb-next; lc=pc=la; /默认将la做为lc的头结点(lb亦可) while(pa&pb) /让pc接到数据小的结点上,直到pa,pb两者有一指向空结点 if(pa-datadata) pc-next=pa;pc=pa;pa=pa-next; else pc-next=pb;pc=pb;pb=pb-next; pc-next=pa?pa:pb; /如果最后la有剩余结点,即将其直接加入到lc中,反之将lb的剩余结点加到lc中 free(lb); void printList(list l) list p; p=l-next; while(p) printf

7、(%d ,p-data);p=p-next;void main() list la,lb,lc; printf(创建两个含%d个元素的链表,请输入:n,N); creatList(la,N); creatList(lb,N); mergeList(la,lb,lc); printList(lc);2. #include #include #define N 5#define NULL 0#define OK 1#define ERROR 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表voi

8、d creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL;/判断元素e是否在链表中int inList(list l,int e) list p; p=l-next; while(p) if(p-data=e) return OK; /发现在里面,返回真值 p=p-next; /否则指针后移,继续找 return ERROR; /未找到,返回假值(没有执行return OK;语句)/插入元素void insertLi

9、st(list &l,int &e) list p,q,s; /q为新插入的元素开辟一个存储空间的指针,s为p前一个指针,方便插入 p=l-next; s=l; while(p) if(edata) /发现要插入的元素e比后面的小,开辟空间,并将e放入空间的数据域中 q=(list)malloc(sizeof(LNode); q-data=e; while(s-next!=p) s=s-next; /找到p前的一个指针 q-next=p; / 画图好好理解 -s-p- s-next=q; / q- break; p=p-next; /输出链表void printList(list l) lis

10、t p; p=l-next; while(p) printf(%d ,p-data); p=p-next;void main() list l; int e; printf(创建%d个元素的链表,请输入%d个元素:n,N,N); creatList(l,N); printf(请输入要判断的元素:); scanf(%d,&e); if(inList(l,e) printf(YES ); else insertList(l,e); printList(l); 3. #include #include #define N 5#define NULL 0#define OK 1#define ERRO

11、R 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL;/判断元素e是否在链表中int insertDeleteList(list l,int e) list p,q; p=l-next; q=l; while(p) if(p-data=e) while(

12、q-next!=p) q=q-next; /找到p前一个结点,方便删除操作 q-next=p-next; /删除结点p free(p); return OK; /发现在里面,返回真值 p=p-next; /否则指针后移,继续找 return ERROR; /未找到,返回假值(没有执行return OK;语句)/输出链表void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data); p=p-next;void main() list l; int e; printf(创建%d个元素的链表,请输入%d个元素:n,N,N);

13、 creatList(l,N); printf(请输入要判断的元素); scanf(%d,&e); if(!insertDeleteList(l,e) printf(NO ); else printList(l);4. #include #include #define N 5#define NULL 0#define OK 1#define ERROR 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表void creatList(list &l,int n) list p,q; l=(li

14、st)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL;/链表排序void sortList(list &l) list p,q,r; /p标记排序的轮数 int chang; /用于交换结点中的数据 p=l-next; while(p-next!=NULL) q=l-next; /每次比较从首结点开始 while(q-next!=NULL) r=q-next; if(q-datar-data) /发现前一个比后一个大,交换数据 chang=q-data;q-data=r-data;r-data=

15、chang; q=q-next; /相邻间下一个比较 p=p-next; /下一轮比较 /输出链表void printList(list l) list p; p=l-next; while(p) printf(%d ,p-data); p=p-next;void main() list l; printf(创建%d个元素的链表,请输入%d个元素:n,N,N); creatList(l,N); sortList(l); printList(l); 5. #include #include #define N 5#define NULL 0#define OK 1#define ERROR 0/

16、链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); scanf(%d,&l-data); /头结点也添加元素,方便输出 p=l; for(int i=1;idata); p-next=q; p=q; p-next=l; /让最后一个p-next指针指向头结点,构成循环链表/输出链表void printList(list l,int pos) list p,q;

17、int i; p=l; for(i=1;inext; /找到指定位置的前一个位置 q=p-next; do if(pos=1) printf(%d ,p-data); p=p-next; /如果指定位置为1,即按原样输出 else p=p-next; printf(%d ,p-data); /不然,p先移到指定的位置,输出其数据 while(p-next!=q); /结束条件(p移到的下一个位置不是q,即不是最初的p,完成循环输出)void main() list l; int pos; printf(创建%d个元素的循环链表,请输入%d个元素:n,N,N); creatList(l,N);

18、printf(请指明从第几个位置输出循环链表中的元素:); scanf(%d,&pos); while(posN) printf(输入的位置不存在,请重新输入. ); scanf(%d,&pos); printList(l,pos);11#include #include #define N 5#define NULL 0#define OK 1#define ERROR 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表void creatList(list &l,int n) list p

19、,q; l=(list)malloc(sizeof(LNode); scanf(%d,&l-data); /头结点也添加元素,方便输出 p=l; for(int i=1;idata); p-next=q; p=q; p-next=l; /让最后一个p-next指针指向头结点,构成循环链表/输出链表void printList(list l,int pos) list p,q; int i; p=l; for(i=1;inext; /找到指定位置的前一个位置 q=p-next; do if(pos=1) printf(%d ,p-data); p=p-next; /如果指定位置为1,即按原样输出

20、 else p=p-next; printf(%d ,p-data); /不然,p先移到指定的位置,输出其数据 while(p-next!=q); /结束条件(p移到的下一个位置不是q,即不是最初的p,完成循环输出)void main() list l; int pos; printf(创建%d个元素的循环链表,请输入%d个元素:n,N,N); creatList(l,N); printf(请指明从第几个位置输出循环链表中的元素:); scanf(%d,&pos); while(posN) printf(输入的位置不存在,请重新输入. ); scanf(%d,&pos); printList(

21、l,pos);12#include #include #define N 5#define NULL 0#define OK 1#define ERROR 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/创建链表void creatList(list &l,int n) list p,q; l=(list)malloc(sizeof(LNode); p=l; for(int i=0;idata); p-next=q; p=q; p-next=NULL;/判断元素e是否在链表中int inList(l

22、ist l,int e) list p,q; q=p=l-next; while(p) if(p-data=e) return OK; /发现在里面,返回真值 p=p-next; /否则指针后移,继续找 /没有执行return OK;语句,说明未找到 while(q-next!=p) q=q-next; /找到链尾 p=(list)malloc(sizeof(LNode); /为链尾重新开辟空间 p-data=e; /接到链尾 p-next=q-next; q-next=p; return ERROR; /未找到,返回假值 /输出链表void printList(list l) list p;

23、 p=l-next; while(p) printf(%d ,p-data); p=p-next;void main() list l; int e; printf(创建%d个元素的链表,请输入%d个元素:n,N,N); creatList(l,N); printf(请输入要判断的元素:); scanf(%d,&e); if(inList(l,e) printf(YES ); else printList(l);13#include #include #define OK 1#define Error 0#define NULL 0#define maxSize 100/栈的存储结构typed

24、ef struct int *base; int *top; int size;stack;/栈的初始化(顺序存储)int initStack(stack &s) /开辟maxSize大小的空间,base和top都指向基地址,同时判断是否开辟成功,不成功返回0 if(!(s.base=s.top=(int*)malloc(maxSize*sizeof(int) return Error; s.size=maxSize; /栈的大小为maxSize return OK;/进栈操作int push(stack &s,int e) *s.top=e; /先将元素e赋值给s.top所指的存储空间 s.

25、top+; /top指针上移 return OK;/出栈操作int pop(stack &s,int &e) if(s.base=s.top) return Error; /如果栈为空,返回0 s.top-; /top指针先后移 e=*s.top; /将其所指的元素值赋给e return e; void main() stack s; int n,e; printf(请输入要创建栈的元素的个数:); scanf(%d,&n); initStack(s); for(int i=0;in;i+) scanf(%d,&e); push(s,e); while(s.base!=s.top) printf(%d ,pop(s,e); 14#include #include #include #include #define stackincrement 8#define OK 1#define Error 0#define NULL 0#define maxSize 100/栈的存储结

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

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