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

上传人:b****4 文档编号:5091392 上传时间:2022-12-13 格式:DOCX 页数:43 大小:23.32KB
下载 相关 举报
数据结构上机考试含答案.docx_第1页
第1页 / 共43页
数据结构上机考试含答案.docx_第2页
第2页 / 共43页
数据结构上机考试含答案.docx_第3页
第3页 / 共43页
数据结构上机考试含答案.docx_第4页
第4页 / 共43页
数据结构上机考试含答案.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

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

《数据结构上机考试含答案.docx》由会员分享,可在线阅读,更多相关《数据结构上机考试含答案.docx(43页珍藏版)》请在冰豆网上搜索。

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

数据结构上机考试含答案

《数据结构》上机练习题

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;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,完成循环输出)

}

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;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,完成循环输出)

}

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模板 > 可爱清新

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

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