数据结构上机考核试题及答案.docx

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

数据结构上机考核试题及答案.docx

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

数据结构上机考核试题及答案.docx

数据结构上机考核试题及答案

1、顺序表的插入与删除

#defineListSize10

#definen8

#defineErrorprintf

typedefintDataType;

typedefstruct

{DataTypedata[ListSize];

intlength;

}seqlist;

voiddeletelist(seqlist*L);

voidinsertlist(seqlist*L);

main()

{seqlist*L=0;

inti;

charc;

printf("请按递减顺序输入%d个整数:

\n",n);

for(i=0;i

scanf("%d",&L->data[i]);

L->length=n;

printf("\n请选择:

\n");

printf("A----------------------插入------------------\n");

printf("B----------------------删除------------------\n");

printf("C----------------------退出------------------\n");

scanf("\n%c",&c);

while(c!

='c'&&c!

='C')

{if(c=='A'||c=='a')insertlist(L);

elsedeletelist(L);

printf("当前顺序表中的数据是:

\n");

for(i=0;ilength;i++)

printf("%3d",L->data[i]);

printf("\n请再选择:

\n");

printf("A----------------------插入------------------\n");

printf("B----------------------删除------------------\n");

printf("C----------------------退出------------------\n");

scanf("\n%c",&c);

}

}

voidinsertlist(seqlist*L)

{intx,i,j;

printf("\n请输入要插入的整数:

");

scanf("\n%d",&x);

printf("\n在下面序列中插入%d\n",x);

for(i=0;ilength;i++)

printf("%3d",L->data[i]);

i=0;

while(ilength&&xdata[i])i++;

if(i<0||i>L->length+1)

Error("\n插入位置错误!

\n");

elseif(L->length>=ListSize)Error("\n表溢出,无法插入!

");

elseif(x==L->data[i])printf("\n重复插入,不允许!

\n");

else{printf("\n将数据%d插入到第%d的位置上\n",x,i);

for(j=L->length-1;j>=i;j--)

/*=========空白处1===========*/

L->data[j+1]=l->data[j];

L->data[i]=x;

L->length++;

/*======================*/

}}

voiddeletelist(seqlist*L)

{intx,i,j,num;

printf("\n请输入要删除的整数:

");

scanf("\n%d",&x);

printf("\n在下面序列中删除%d\n",x);

for(i=0;ilength;i++)

printf("%3d",L->data[i]);

i=0;num=0;

while(ilength&&xdata[i])i++;

if(x!

=L->data[i])Error("\n没找到要删除的整数!

\n");

else

{

num++;

while(L->data[i+1]==x&&ilength-1)

{i++;num++;}

printf("\n删除原表中从第%d个位置以后的%d个数据%d\n",i-num+1,num,x);

for(j=i+1;j<=L->length-1;j++)

/*=====请在下面填入相应的语句======*/

L->data[j-num]=L->data[j];

L->length=L->length-num;

/*=====================*/}}_

2\单链表的插入与删除*/

#include

#include

#include

#defineErrorprintf

#definen5

typedefstructnode{

intdata;

structnode*next;

}ListNode;

typedefListNode*LinkList;

LinkListCreatelinklist(void);

voidInsertlinklist(LinkListhead);

voidDeletelinklist(LinkListhead);

voidOutputlinklist(LinkListhead);

main()

{

LinkListhead;

charc;

head=Createlinklist();

printf("请选择:

\n");

printf("A--------------插入-----------------\n");

printf("B--------------删除-----------------\n");

printf("C--------------退出-----------------\n");

scanf("\n%c",&c);

while(c!

='c'&&c!

='C')

{

if(c=='A'||c=='a')Insertlinklist(head);

elseDeletelinklist(head);

Outputlinklist(head);

printf("\n请再选择:

\n");

printf("A--------------插入-----------------\n");

printf("B--------------删除-----------------\n");

printf("C--------------退出-----------------\n");

scanf("\n%c",&c);

}

}

/*****************************/

LinkListCreatelinklist()

{

intx;

LinkListhead,s,r;

head=(ListNode*)malloc(sizeof(ListNode));

r=head;

r->next=NULL;

printf("请按递减顺序输入整数(输0结束):

\n");

scanf("%d",&x);

while(x!

=0)

{s=(ListNode*)malloc(sizeof(ListNode));

s->data=x;

s->next=r->next;

r->next=s;

r=s;

scanf("\n%d",&x);

}

returnhead;

}

voidInsertlinklist(LinkListhead)

{

intx;

ListNode*p,*s;

inti,j;

printf("请输入要插入的整数:

");

scanf("%d",&x);

p=head;

j=0;

while(p->next&&xnext->data)

{

j++;

p=p->next;

}

if(x==p->next->data)

Error("重复插入,不允许!

\n");

else

{s=(ListNode*)malloc(sizeof(ListNode));

/*=====请在下面填入相应的语句===*/

S->data=x;

S->next=P->next;

P->next=S;

/*====================*/}}

voidDeletelinklist(LinkListhead)

{

intx;

ListNode*p,*r;

inti,j;

printf("请输入要删除的整数:

");

scanf("%d",&x);

p=head;

r=head->next;

while(r&&xdata)

{p=r;r=r->next;}

if(r==NULL||x!

=r->data)Error("没找到要删除的整数.\n");

else{

/*==========空白处2=========*/

p->next=r->next;

free(r);

/*====================*/}}

voidOutputlinklist(LinkListhead)

{ListNode*p;

p=head->next;

printf("当前链表中数据为:

\n");

while(p)

{printf("%6d",p->data);

p=p->next;}}_

/*====数据结构上机考核试题3======*/

/*栈的操作#defineStackSize10

#defineErrorprintf

typedefintDataType;

typedefstruct{

DataTypedata[StackSize];

inttop;

}SeqStack;

voidInitStack(SeqStack*s)

{s->top=0;}

intStackEmpty(SeqStack*S)

{if(S->top==0)return1;

elsereturn0;

}

intStackFull(SeqStack*S)

{returnS->top==StackSize;

}

voidPush(SeqStack*S,DataTypex)

{if(StackFull(S))

Error("栈溢出!

");

/*==========空白处1============*/

ElseS->data[++(S->top)]=x;

/*=====================*/

}

DataTypePop(SeqStack*S)

{

/*========空白处2=========*/

If(StackEmpty(S))

Error(“Stackunderflow”);

ElsereturnS->data[--(S->top)];

/*=========*/

}

voidconversion(intN,intB);

main()

{intN,B;

charch;

printf("进行数值转换请输入Y,退出请输入N:

");

scanf("\n%c",&ch);

while(ch=='Y'||ch=='y')

{printf("请输入需要转换的十进制数:

");

scanf("%d",&N);

printf("\n请输入想要转换的进制数(2,8or16):

");

scanf("%d",&B);

conversion(N,B);

printf("继续转换请输入Y,退出请输入N:

");

scanf("\n%c",&ch);}}

voidconversion(intN,intB)

{DataTypei;

SeqStack*S;

InitStack(S);

while(N)

{Push(S,N%B);N=N/B;}

printf("转换的结果为:

");

while(!

StackEmpty(S))

{i=Pop(S);

switch(i)

{case10:

printf("%c",'a');break;

case11:

printf("%c",'b');break;

case12:

printf("%c",'c');break;

case13:

printf("%c",'d');break;

case14:

printf("%c",'e');break;

case15:

printf("%c",'f');break;

default:

printf("%d",i);}}

printf("\n");}_

/*==========数据结构上机考核试题4======*/

/*队列的操作*/

#include

#defineQueueSize100

#defineErrorprintf

typedefcharDataType;

typedefstruct{

intfront;

intrear;

intcount;

DataTypedata[QueueSize];

}CirQueue;

voidInitQueue(CirQueue*Q)

{Q->front=Q->rear=0;

Q->count=0;}

intQueueEmpty(CirQueue*Q)

{returnQ->count==0;}

intQueueFull(CirQueue*Q)

{returnQ->count==QueueSize;}

voidEnQueue(CirQueue*Q,DataTypex)

{if(QueueFull(Q))

Error("队列溢出!

");

else

{/*==========空白处1===========*/

Q->count++;

Q->data[Q->rear]=x;

Q->rear=(Q->rear+1)%QueueSize;

/*=================*/}}

DataTypeDeQueue(CirQueue*Q)

{DataTypetemp;

if(QueueEmpty(Q))

Error("队列下溢!

");

else{temp=Q->data[Q->front];

/*============空白处2===========*/

Q->count--;

Q->front=(q->front+1)%QueueSize;

/*==============*/

returntemp;}}

voidInputch(CirQueue*Q);

voidOutputch(CirQueue*Q);

main()

{CirQueue*Q=0;

charch;

printf("\n继续进行请按Y,退出请按N:

");

scanf("\n%c",&ch);

while(ch=='Y'||ch=='y')

{InitQueue(Q);

Inputch(Q);

Outputch(Q);

printf("\n继续进行请按Y,退出请按N:

");

scanf("\n%c",&ch);}}

voidInputch(CirQueue*Q)

{charch;

printf("\n请输入字符串并以$为结束符:

");

scanf("%c",&ch);

while(ch!

='$')

{EnQueue(Q,ch);

scanf("%c",&ch);}}

voidOutputch(CirQueue*Q)

{charch;

printf("你输入的字符串是:

");

while(!

QueueEmpty(Q))

{ch=DeQueue(Q);

printf("%c",ch);}

printf("\n");}

/*========数据结构上机考核试题5=====*/

/*二叉树的遍历*/

#include

#include

typedefcharDataType;

typedefstructnode{

DataTypedata;

structnode*lchild,*rchild;

}BinTNode;

typedefBinTNode*BinTree;

intcount;

voidCreateBinTree(BinTree*T);

voidLevelorder(BinTreeT);

main()

{BinTreeT;

charch1,ch2;

printf("\n请选择:

\n");

ch1='y';

while(ch1=='y'||ch1=='Y')

{printf("\nA------------------二叉树建立-------------");

printf("\nB------------------层次遍历---------------");

printf("\nC------------------退出-------------------\n");

scanf("\n%c",&ch2);

switch(ch2){case'a':

case'A':

printf("请按先序输入建立二叉树存储的结点序列:

\n");

CreateBinTree(&T);break;

case'b':

case'B':

printf("该二叉树的层次遍历序列为:

\n");

Levelorder(T);break;

case'c':

case'C':

ch1='n';break;

default:

ch1='n';}}}

voidCreateBinTree(BinTree*T)

{charch;

scanf("\n%c",&ch);

if(ch=='0')*T=NULL;

else{*T=(BinTNode*)malloc(sizeof(BinTNode));

(*T)->data=ch;

CreateBinTree(&(*T)->lchild);

CreateBinTree(&(*T)->rchild);}}

voidLevelorder(BinTreeT)

{inti,j;

BinTNode*q[20],*p;

p=T;

if(p!

=NULL){i=1;q[i]=p;j=2;}

while(i!

=j)

{p=q[i];printf("%3c",p->data);

/*==========空白处1==============*/

if(p->lchild!

=NULL){q[j]=p->lchild;j++;}

if(p->rchild!

=NULL){q[j]=p->rchild;j++;}

i++;

/*===========*/}}

/*======数据结构上机考核试题6========*/

/*求二叉树叶子结点个数*/

#include

#include

typedefcharDataType;

typedefstructnode{

DataTypedata;

structnode*lchild,*rchild;

}BinTNode;

typedefBinTNode*BinTree;

intcount;

voidCreateBinTree(BinTree*T);

voidLeafnum(BinTreeT);

main()

{

BinTreeT;

charch1,ch2;

printf("\n请选择:

\n");

ch1='y';

while(ch1=='y'||ch1=='Y')

{

printf("\nA------------------二叉树建立-------------");

printf("\nB------------------求叶子结点个数---------");

printf("\nC------------------退出-------------------\n");

scanf("\n%c",&ch2);

switch(ch2)

{case'a':

case'A':

printf("请按先序输入二叉树存储的结点序列:

\n");

CreateBinTree(&T);break;

case'b':

case'B':

count=0;Leafnum(T);

printf("该二叉树有%d个叶子.\n",count);

break;

case'c':

case'C':

ch1='n';break;

default:

ch1='n';}}}

voidCreateBinTree(BinTree*T)

{charch;

scanf("\n%c",&ch);

if(ch=='0')*T=NULL;

else{*T=(BinTNode*)malloc(sizeof(BinTNode));

(*T)->data=ch;

CreateBinTree(&(*T)->lchild);

CreateBinTree(&(*T)->rchild);}}

voidLeafnum(BinTreeT)

{if(T)

{if(T->lchild==NULL&&T->rchild==NULL)

/*=============空白处1==============*/

count++;

Leafnum(T->lchild);

Leafnum(T->rchild);

/*==================*/}}

/*========数据结构上机考核试题7======*/

/*二分查找*/

#include

#definen10

main()

{intR[n],i,k,low,mid,high,m;

charch;

printf("请按递增顺序输入10个整数:

\n",n);

for(i=0;i

scanf("%d",&R[i]);

printf("需要查找请输入Y,否则输入N:

");

scanf("\n%c",&ch);

while(ch=='y'||ch=='Y')

{printf("请输入要查找的整数:

\n");

scanf("\n%d",&k);

low=0;high=n-1;m=0;

while(low<=high)

{/*========空白处1===========*/

/*=======请在下面填入相应的语句========*/

mid=(low+high)/2;

m++;

if(R[mid]>k)high=mid-1;

elseif(R[mid]

elsebreak;

/*=============*/}

if(low>high)

{printf

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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