数据结构上机考试含答案.docx
- 文档编号:28075632
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:51
- 大小:22.74KB
数据结构上机考试含答案.docx
《数据结构上机考试含答案.docx》由会员分享,可在线阅读,更多相关《数据结构上机考试含答案.docx(51页珍藏版)》请在冰豆网上搜索。
数据结构上机考试含答案
《数据结构》上机练习题
1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。
2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出“YSE”;否则,将它插入到序列中使它仍然有序,并输出排序后的序列。
3、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果不在,则输出“NO”,否则,将它从序列中删除它,并输出删除后的序列。
4、从键盘输入一组任意数据,建立一个有序链表,并从链头开始输出该链,使输出结果是有序的。
5、从键盘输入一组任意数据,建立一个包含所有输入数据的单向循环链表,并从链表的任意开始,依次输出该链表中的所有结点。
10、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果不在,则输出“NO“,否则,将它从链表中删除,并输出删除后的链表。
11、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链头,并输出插入后的链表。
12、设有一个链表,(自己建立,数据从键盘输入),再从键盘输入一个数,判别是否在链表中,如果在输出“YSE”,否则,将它从插入到链尾,并输出插入后的链表。
13、编写栈的压栈push、弹栈pop函数,从键盘输入一组数据,逐个元素压入堆栈,然后再逐个从栈中弹出它们并输出。
14、编写栈的压栈push、弹栈pop函数,用它判别()的匹配问题。
15、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树中序遍历的结果。
16、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树先序遍历的结果。
17、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树后序遍历的结果。
18、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树的总结点数。
19、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出二叉树叶子结点数。
20、按类似先序遍历结果输入一序列,建立一棵二叉树(算法6、4),输出此二叉树的高度。
21、给出一个无向图的邻接矩阵,输出各个顶点的度。
22、给出一个有向图的邻接矩阵,输出各个顶点的入度与出度。
23、输入一个有序序列,利用折半查找来查找一个数是否在序列中,如在,则输出其位置,否则输出“NO”。
24、用插入排序方法对一组数据进行排序,并输出每趟排序的结果。
25、用选择排序方法对一组数据进行排序,并输出每趟排序的结果。
26、用希尔(SHELL)排序方法对一组数据进行排序,并输出每趟排序的结果。
27、用快速排序方法对一组数据进行排序,并输出每趟排序的结果。
.
答案:
1.#include
#include
#defineN5
#defineNULL0
//链表的存储结构
typedefstructLNode
{
intdata;
structLNode*next;
}LNode,*list;
//顺序创建链表
voidcreatList(list&l,intn)
{
inti;
listp,q;
l=(list)malloc(sizeof(LNode));//开辟头结点
p=l;//指针p指向头结点
for(i=0;i { q=(list)malloc(sizeof(LNode));//新的结点 scanf("%d",&q->data); p->next=q;//p的下一个结点指向新开辟的结点q p=q;//将p指针指向q } p->next=NULL; } //归并排序 voidmergeList(list&la,list&lb,list&lc) {//将已经排好序的la,lb中的数重新排列成有序(非递减) listpa,pb,pc; pa=la->next;pb=lb->next; lc=pc=la;//默认将la做为lc的头结点(lb亦可) while(pa&&pb) {//让pc接到数据小的结点上,直到pa,pb两者有一指向空结点 if(pa->data<=pb->data) {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); } voidprintList(listl) { listp; p=l->next; while(p) {printf("%d",p->data);p=p->next;} } voidmain() { listla,lb,lc; printf("创建两个含%d个元素的链表,请输入: \n",N); creatList(la,N); creatList(lb,N); mergeList(la,lb,lc); printList(lc); } 2.#include #include #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); p=l; for(inti=0;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=NULL; } //判断元素e是否在链表中 intinList(listl,inte) { listp; p=l->next; while(p) { if(p->data==e) returnOK;//发现在里面,返回真值 p=p->next;//否则指针后移,继续找 } returnERROR;//未找到,返回假值(没有执行returnOK;语句) } //插入元素 voidinsertList(list&l,int&e) { listp,q,s;//q为新插入的元素开辟一个存储空间的指针,s为p前一个指针,方便插入 p=l->next; s=l; while(p) { if(e<=p->data) {//发现要插入的元素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; } } //输出链表 voidprintList(listl) { listp; p=l->next; while(p) {printf("%d",p->data);p=p->next;} } voidmain() { listl; inte; 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 #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); p=l; for(inti=0;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=NULL; } //判断元素e是否在链表中 intinsertDeleteList(listl,inte) { listp,q; p=l->next;q=l; while(p) { if(p->data==e) { while(q->next! =p)q=q->next;//找到p前一个结点,方便删除操作 q->next=p->next;//删除结点p free(p); returnOK; }//发现在里面,返回真值 p=p->next;//否则指针后移,继续找 } returnERROR;//未找到,返回假值(没有执行returnOK;语句) } //输出链表 voidprintList(listl) { listp; p=l->next; while(p) {printf("%d",p->data);p=p->next;} } voidmain() { listl; inte; printf("创建%d个元素的链表,请输入%d个元素: \n",N,N); creatList(l,N); printf("请输入要判断的元素"); scanf("%d",&e); if(! insertDeleteList(l,e)) printf("NO"); else printList(l); } 4.#include #include #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); p=l; for(inti=0;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=NULL; } //链表排序 voidsortList(list&l) { listp,q,r;//p标记排序的轮数 intchang;//用于交换结点中的数据 p=l->next; while(p->next! =NULL) { q=l->next;//每次比较从首结点开始 while(q->next! =NULL) { r=q->next; if(q->data>r->data)//发现前一个比后一个大,交换数据 {chang=q->data;q->data=r->data;r->data=chang;} q=q->next;//相邻间下一个比较 } p=p->next;//下一轮比较 } } //输出链表 voidprintList(listl) { listp; p=l->next; while(p) {printf("%d",p->data);p=p->next;} } voidmain() { listl; printf("创建%d个元素的链表,请输入%d个元素: \n",N,N); creatList(l,N); sortList(l); printList(l); } 5.#include #include #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); scanf("%d",&l->data);//头结点也添加元素,方便输出 p=l; for(inti=1;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=l;//让最后一个p->next指针指向头结点,构成循环链表 } //输出链表 voidprintList(listl,intpos) { listp,q; inti; p=l; for(i=1;i 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,完成循环输出) } voidmain() { listl; intpos; printf("创建%d个元素的循环链表,请输入%d个元素: \n",N,N); creatList(l,N); printf("请指明从第几个位置输出循环链表中的元素: "); scanf("%d",&pos); while(pos<=0||pos>N) { printf("输入的位置不存在,请重新输入..."); scanf("%d",&pos); } printList(l,pos); } 11#include #include #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); scanf("%d",&l->data);//头结点也添加元素,方便输出 p=l; for(inti=1;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=l;//让最后一个p->next指针指向头结点,构成循环链表 } //输出链表 voidprintList(listl,intpos) { listp,q; inti; p=l; for(i=1;i 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,完成循环输出) } voidmain() { listl; intpos; printf("创建%d个元素的循环链表,请输入%d个元素: \n",N,N); creatList(l,N); printf("请指明从第几个位置输出循环链表中的元素: "); scanf("%d",&pos); while(pos<=0||pos>N) { printf("输入的位置不存在,请重新输入..."); scanf("%d",&pos); } printList(l,pos); } 12#include #include #defineN5 #defineNULL0 #defineOK1 #defineERROR0 //链表的存储结构 typedefstructLNode { intdata; structLNode*next; }LNode,*list; //创建链表 voidcreatList(list&l,intn) { listp,q; l=(list)malloc(sizeof(LNode)); p=l; for(inti=0;i { q=(list)malloc(sizeof(LNode)); scanf("%d",&q->data); p->next=q; p=q; } p->next=NULL; } //判断元素e是否在链表中 intinList(listl,inte) { listp,q; q=p=l->next; while(p) { if(p->data==e) returnOK;//发现在里面,返回真值 p=p->next;//否则指针后移,继续找 } //没有执行returnOK;语句,说明未找到 while(q->next! =p)q=q->next;//找到链尾 p=(list)malloc(sizeof(LNode));//为链尾重新开辟空间 p->data=e;//接到链尾 p->next=q->next; q->next=p; returnERROR;//未找到,返回假值 } //输出链表 voidprintList(listl) { listp; p=l->next; while(p) {printf("%d",p->data);p=p->next;} } voidmain() { listl; inte; 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 #defineOK1 #defineError0 #defineNULL0 #definemaxSize100 //栈的存储结构 typedefstruct { int*base; int*top; intsize; }stack; //栈的初始化(顺序存储) intinitStack(stack&s) {//开辟maxSize大小的空间,base和top都指向基地址,同时判断是否开辟成功,不成功返回0 if(! (s.base=s.top=(int*)malloc(maxSize*sizeof(int))))returnError; s.size=maxSize;//栈的大小为maxSize returnOK; } //进栈操作 intpush(stack&s,inte) { *s.top=e;//先将元素e赋值给s.top所指的存储空间 s.top++;//top指针上移 returnOK; } //出栈操作 intpop(stack&s,int&e) { if(s.base==s.top)returnError;//如果栈为空,返回0 s.top--;//top指针先后移 e=*s.top;//将其所指的元素值赋给e returne; } voidmain() { stacks; intn,e; printf("请输入要创建栈的元素的个数: "); scanf("%d",&n); initStack(s); for(inti=0;i { scanf("%d",&e); push(s,e); } while(s.base! =s.top) { printf("%d",pop(s,e)); } } 14#include #include #include #include #definestackincrement8 #defineOK1 #defineError0 #defineNULL0 #definemaxSize100 //栈的存储结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 考试 答案