数据结构上机题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构上机题
〃1、设有两个有序序列,利用归并排序将它们排成有序表,并输出。
#i nclude"stdio.h"
#i nclude"stdlib.h"
#defi ne LIST_INIT_SIZE 100
#defi ne LISTINCREMENT 10
#defi ne OVERFLOW -2
#defi ne OK 1
typedef struct
{ int *elem;
int len gth;
int listsize;
}SqList;
int In itList_Sq(SqList &L)
{L.elem=(i nt *)malloc(LIST_INIT_SIZE*sizeof(i nt)); if(!L.elem)exit(OVERFLOW);
L.le ngth=O;
L.listsize=LIST_INIT_SIZE;
return OK;
}
void MergeList_Sq(SqList La,SqList Lb,SqList &Lc)
{int *pa,*pa_last,*pb,*pb_last,*pc;
pa=La.elem;
pa_last=La.elem+La.le ngth-1;
pb=Lb.elem;
pb_last=Lb.elem+Lb .len gth-1;
Lc」i stsize=Lc .len gth=La .len gth+Lb .len gth;
pc=Lc.elem=(i nt*)malloc(Lc.listsize*sizeof(i nt)); if(!Lc.elem)exit(OVERFLOW); while(pa<=pa_last&&pb<=pb_last)
{if(*pa<=*pb)*pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last)*pc++=*pa++;
while(pb<=pb_last)*pc++=*pb++;
}
int In put(SqList &L)
{ int i,j;
int *pa=L.elem;
printf("要输入的元素个数:”);
scan f("%d",&i);
printf("输入有序序列:");
{ scan f("%d",pa++);
L.len gth=i;
}
prin tf("\n");
return OK;
}
int Output(SqList &L)
{ printf("输出序列:");
int i=0;
while(i prin tf("\n"); return OK; } int mai n() {SqList La,Lb,Lc; In itList_Sq(La); In itList_Sq(Lb); In itList_Sq(Lc); In put(La); In put(Lb); MergeList_Sq(La,Lb,Lc); Output(Lc); return OK; } 〃2、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果在输出"YSE";否则, 将它插入到序列中使它仍然有序,并输出排序后的序列。 #in clude #in clude #defi ne OK 1 #defi ne ERROR -1 #defi ne OVERFLOW -2 #defi ne LIST_INIT_SIZE 100 typedef struct{ int *elem; int len gth; int listsize; }SqList; in t In itList_Sq(SqList & L){ L.elem=(i nt *)malloc(LIST_INIT_SIZE*sizeof(i nt)); if(!L.elem) exit(OVERFLOW); L.le ngth=O; L.listsize=LIST_INIT_SIZE; return OK; } int ListInsert_Sq(SqList &L, int i,int e){ if((i<1)||(i>L」e ngth+1)) return ERROR; int *q=&(L.elem[i-1]); for(i nt *p=&(L.elem[L.le ngth-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L .len gth; return OK; } int elemfi nd(SqList & L,i nt e){ for(i nt i=0;i { if(e==L.elem[i]) retur n 1; if(i==0&&e {ListInsert_Sq(L,i+2,e);break;} if(e>L.elem[i] &&e } void mai n(){ SqList L1; int a,i, n; In itList_Sq(L1); printf("输入序列的元素个数:”); scan f("%d",&n); printf("请输入%d个有序元素:",n); for(i=1;i<=n; i++){ sca nf("%d",&a); ListI nsert_Sq(L1,i,a); } printf("请输入要操作的元素:"); scan f("%d",&a); if(elemfi nd(L1,a)==1) pri ntf("YES"); else for(i=0;i prin tf("%d ", L1.elem[i]); prin tf("\n"); } 〃3、设有一有序序列,从键盘输入一个数,判别是否在序列中,如果不在,则输出"NO", 否则,将它从序列中删除它,并输出删除后的序列。 #i nclude"stdio.h" #i nclude"stdlib.h" #defi ne LIST_INIT_SIZE 100