数据结构上机考核试题及答案.docx
- 文档编号:4376702
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:27
- 大小:19.86KB
数据结构上机考核试题及答案.docx
《数据结构上机考核试题及答案.docx》由会员分享,可在线阅读,更多相关《数据结构上机考核试题及答案.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构上机考核试题及答案
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;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;i printf("%3d",L->data[i]); i=0; while(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;i printf("%3d",L->data[i]); i=0;num=0; while(i if(x! =L->data[i])Error("\n没找到要删除的整数! \n"); else { num++; while(L->data[i+1]==x&&i {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&&x { 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&&x {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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 上机 考核 试题 答案