数据结构实验考试题 修正版.docx
- 文档编号:24562384
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:70
- 大小:76.63KB
数据结构实验考试题 修正版.docx
《数据结构实验考试题 修正版.docx》由会员分享,可在线阅读,更多相关《数据结构实验考试题 修正版.docx(70页珍藏版)》请在冰豆网上搜索。
数据结构实验考试题修正版
1、已知线性表A,B,C是递增有序的线性表。
要求对A表作如下运算:
删去那些既在B表中出现又在C表中出现的元素。
A,B,C以顺序表存储。
如:
A={1,2,3,4,5,6,7,8,9}
B={2,4,6,8,10,12}
C={4,5,6,7,8}则,运算后A={1,2,3,5,7,9}
#include
#include
#defineMAXSIZE100
usingnamespacestd;
typedefstruct
{
intlist[MAXSIZE];
intlength;
}Seqlist;//顺序表数据类型的定义
voidInitList(Seqlist*L)//顺序表初始化
{
L->length=0;
return;
}
voidCreatList(Seqlist*L,intn)//创建顺序表
{
inti;
for(i=0;i scanf("%d",&L->list[i]); L->length=n; return; } voidShowList(SeqlistL)//显示顺序表 { inti; for(i=0;i { printf("%2d",L.list[i]); } printf("\n"); return; } intDeleteList(Seqlist*L,inti)//删除顺序表中的元素 { intj; if(L->length<=0) { printf("顺序表已空不能进行删除! \n"); return0; } elseif(i<1||i>L->length) { printf("删除位置不合适! \n"); return-1; } else { for(j=i;j<=L->length-1;j++) L->list[j-1]=L->list[j]; L->length=L->length-1; return1; } } intFind(SeqlistL,inte) { for(inti=0;i { if(L.list[i]==e) return1; } return0; } voidDeleteinA(Seqlista,Seqlistb,Seqlist*c) { intn,m; for(inti=0;i { n=Find(a,c->list[i]); m=Find(b,c->list[i]); if(n==1&&m==1) { DeleteList(c,i+1); i=i-1; } } printf("在B和C中查找同时与A相同的元素,并将其删除,删除后A为: "); return; } voidShow()//功能菜单 { printf("请选择功能: \n"); printf(" (1)创建列表\n"); printf(" (2)在B,C中找出公共元素,并在A中删除\n"); printf("(0)退出程序\n"); } intmain()//主函数,顺序表功能的实现 { SeqlistA,B,C; intk=1,m; InitList(&A); InitList(&B); InitList(&C); Show(); while(k) { printf("请选择要继续执行的操作: "); scanf("%d",&k); if(k==1) { printf("请创建顺序表A: "); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入A的数据元素: ");CreatList(&A,m); printf("请创建顺序表B: "); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入B的数据元素: ");CreatList(&B,m); printf("请创建顺序表C: "); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入C的数据元素: ");CreatList(&C,m); printf("\n"); } elseif(k==2) { DeleteinA(B,C,&A); ShowList(A); printf("\n"); } else break; }return0; } 2、已知线性表A,B是递增有序的线性表。 要求对A表作如下运算: 线性表A中出现的元素,在线性表B中也出现,则将A中该元素删除。 A,B以顺序表存储。 如: A={1,2,3,4,5,6,7,8,9} B={4,8,12} 则,运算后A={1,2,3,5,6,7,9} #include #include #defineMAXSIZE100 usingnamespacestd; typedefstruct { intlist[MAXSIZE]; intlength; }Seqlist;//顺序表数据类型的定义 voidInitList(Seqlist*L)//顺序表初始化 { L->length=0; return; } voidCreatList(Seqlist*L,intn)//创建顺序表 { inti; for(i=0;i scanf("%d",&L->list[i]); L->length=n; return; } voidShowList(SeqlistL)//显示顺序表 { inti; for(i=0;i { printf("%2d",L.list[i]); } printf("\n"); } intDeleteList(Seqlist*L,inti)//删除顺序表中的元素 { intj; if(L->length<=0) { printf("顺序表已空不能进行删除! \n"); return0; } elseif(i<1||i>L->length) { printf("删除位置不合适! \n"); return-1; } else { for(j=i;j<=L->length-1;j++) L->list[j-1]=L->list[j]; L->length=L->length-1; return1; } } intFind(SeqlistL,inte) { for(inti=0;i { if(L.list[i]==e) return1; } return0; } voidShow()//功能菜单 { printf("请选择功能: \n"); printf(" (1)创建列表\n"); printf(" (2)在A,B中找出公共元素,并在A中删除\n"); printf("(0)退出程序\n"); } intmain()//主函数,顺序表功能的实现 { SeqlistA,B; intk=1,n,m; InitList(&A);InitList(&B); Show(); while(k) { printf("请选择需要继续执行的操作: "); scanf("%d",&k); if(k==1) { printf("请创建顺序表A: "); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入A的元素值: ");CreatList(&A,m); printf("请创建顺序表B: "); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入B的元素值: ");CreatList(&B,m); } elseif(k==2) { for(inti=0;i { n=Find(B,A.list[i]); if(n==1) { DeleteList(&A,i+1); i=i-1; printf("查找、比较、删除之后,A为: "); } } ShowList(A); } elsebreak; } return0; } 3、顺序表A和顺序表B的元素都是非递减排列,利用线性表的基本运算,将它们合并成一个顺序表C,要求C也是非递减排列。 A,B表的值可以自行设计。 #include #defineMAXSIZE100 typedefstruct { intlist[MAXSIZE]; intlength; }Seqlist;//顺序表数据类型的定义 voidInitList(Seqlist*L)//顺序表初始化 { L->length=0; return; } voidCreatList(Seqlist*L,intn)//创建顺序表 { inti; for(i=0;i scanf("%d",&L->list[i]); L->length=n; return; } voidShowList(SeqlistL)//显示顺序表 { inti; for(i=0;i { printf("%d",L.list[i]); } printf("\n"); } intInsertList(Seqlist*L,inti,inte)//在顺序表中插入元素 { intj; if(i<1||i>L->length+1)/*在插入元素前,判断插入位置是否合法*/ { printf("插入位置i不合法! \n"); return-1; } elseif(L->length>=MAXSIZE) { printf("顺序表已满,不能插入元素。 \n"); return0; } else { for(j=L->length;j>=i;j--)/*将第i个位置以后的元素依次后移*/ { L->list[j]=L->list[j-1]; } L->list[i-1]=e;/*插入元素到第i个位置*/ L->length=L->length+1;/*将顺序表长增1*/ return1; } } intDeleteList(Seqlist*L,inti)//删除顺序表中的元素 { intj; if(L->length<=0) { printf("顺序表已空不能进行删除! \n"); return0; } elseif(i<1||i>L->length) { printf("删除位置不合适! \n"); return-1; } else { for(j=i;j<=L->length-1;j++) L->list[j-1]=L->list[j]; L->length=L->length-1; return1; } } voidMergeList(Seqlista,Seqlistb,Seqlist*c)//顺序表合并 { inti,j,k; c->length=a.length+b.length; i=0;j=0;k=0; while(i { if(a.list[i]<=b.list[j]) { c->list[k]=a.list[i]; i++;k++; } else { c->list[k]=b.list[j]; j++;k++; } } while(i { c->list[k]=a.list[i]; i++;k++; } while(j { c->list[k]=b.list[j]; j++;k++; } } voidShow()//功能菜单 { printf("请选择功能: \n"); printf("****** (1)创建列表********\n"); printf("****** (2)删除列表中元素**\n"); printf("******(3)插入元素********\n"); printf("******(4)合并列表********\n"); printf("******(0)退出程序********\n"); } intmain()//主函数,顺序表功能的实现 { Seqlistl[4]; intk=1,n,m,p; InitList(&l[0]);InitList(&l[1]);InitList(&l[2]);InitList(&l[3]); Show(); while(k) { printf("请输入想要执行的操作: "); scanf("%d",&k); if(k==1) { printf("请输入要创建的顺序表代号: ");scanf("%d",&n); printf("请输入元素个数: ");scanf("%d",&m); printf("请输入该%d号顺序表的元素值: ",n);CreatList(&l[n-1],m); } elseif(k==2) { printf("请输入要删除元素的顺序表代号: ");scanf("%d",&n); printf("请输入元素位置: ");scanf("%d",&m); DeleteList(&l[n-1],m); printf("进行元素删除后,%d号顺序表为: ",n);ShowList(l[n-1]); } elseif(k==3) { printf("请输入要插入元素的顺序表代号: ");scanf("%d",&n); printf("请输入要插入元素位置: ");scanf("%d",&m); printf("请输入要插入元素: ");scanf("%d",&p); InsertList(&l[n-1],m,p); printf("进行元素插入后,%d号顺序表为: ",n);ShowList(l[n-1]); } elseif(k==4) { printf("请输入要合并顺序表代号: ");scanf("%d%d",&n,&m); MergeList(l[n-1],l[m-1],&l[3]); printf("进行合并后后的顺序表为: ");ShowList(l[3]); } else break; } return0; } 4、已知线性表La和Lb的元素按值非递减排列。 归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。 采用链式结构来实现。 La、Lb表的值可以自行设计。 #include #include typedefintDataType; typedefstructNode { DataTypedata; structNode*next; }ListNode,*LinkList; voidInitList(LinkList*head) /*将单链表初始化为空。 动态生成一个头结点,并将头结点的指针域置为空。 */ { if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)/*为头结点分配一个存储空间*/ return; (*head)->next=NULL;/*将单链表的头结点指针域置为空*/ } voidCreatList(LinkList*head,intn) { LinkListp; inti; *head=(LinkList)malloc(sizeof(ListNode)); (*head)->next=NULL; for(i=n;i>0;i--) { p=(LinkList)malloc(sizeof(ListNode)); p->next=(*head)->next; (*head)->next=p; } p=(*head)->next; while(p) { scanf("%d",&p->data); p=p->next; } } voidOutput(LinkListL) { inti=0; LinkListp; p=(LinkList)malloc(sizeof(ListNode)); p=L->next; while(p) { printf("%d",p->data); p=p->next; } printf("列表为: "); printf("\n"); } intListEmpty(LinkListhead) { if(head->next==NULL) { return1; } else { return0; } } voidShow() { printf("*******功能列表***********\n"); printf("***** (1)创建列表**********\n"); printf("***** (2)显示列表**********\n"); printf("*****(3)合并两列表********\n"); printf("*****(0)退出程序**********\n"); } voidMergeList(LinkListla,LinkListlb,LinkList&lc) { LinkListpa=la->next,pb=lb->next,pc; lc=la; pc=la; while(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; } intmain() { LinkListla,lb,lc; intk=-1,n; while(k! =0) {Show(); printf("请输入要执行的操作: ");scanf("%d",&k); switch(k) { case0: return0; case1: {printf("请输入列表一元素个数: ");scanf("%d",&n); printf("请输入列表一元素: ");CreatList(&la,n); printf("请输入列表二元素个数: ");scanf("%d",&n); printf("请输入列表二元素: ");CreatList(&lb,n); break;} case2: {printf("请选择要显示的列表: \n (1)列表一\n (2)列表二\n"); printf("您的选择是: ");scanf("%d",&n); if(n==1) {Output(la);} elseif(n==2) {Output(lb);} break;} case3: {MergeList(la,lb,lc); printf("归并后的列表为: ");Output(lc); break; } } printf("\n"); } return0; } 5、设有一个线性表(a,b,c,d,e,f,g),请编写一个函数将这个线性表原地逆置,即将线性表内容置换为(g,f,e,d,c,b,a)。 采用链式结构来实现。 #include #include typedefcharElemType; typedefstructDNode//定义单链表结点类型 { ElemTypedata;//指向前驱结点 structDNode*next;//指向后继结点 }ListNode,*LinkList; voidInitList(LinkList*head) /*将单链表初始化为空。 动态生成一个头结点,并将头结点的指针域置为空。 */ { if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)/*为头结点分配一个存储空间*/ return; (*head)->next=NULL;/*将单链表的头结点指针域置为空*/ } voidDestroyList(LinkList*L) { LinkListp=*L,q=p->next; while(q! =NULL) { free(p);p=q;q=q->next; } free(p); } intListEmpty(LinkListL) { return(L->next==NULL); } intListLength(LinkListL) { LinkListp=L; inti=0; while(p->next! =NULL) { i++;p=p->next; } return(i); } voidOutput(LinkListL) { inti=0; LinkListp; p=(LinkList)malloc(sizeof(ListNode)); p=L->next; while(p)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验考试题 修正版 数据结构 实验 考试题 修正