有两张单调递增有序的线性表A和B,采用顺序存储结构,将这两张表合并成C表,要求C表单调递减有序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* Note:Your choice is C IDE */ #include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define OVERFLOW -2
typedef int status;
typedef int elemtype;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10 typedef struct{
elemtype *elem;
int length;
int listsize;
}SqList;
status InitList_Sq(SqList *L)/*构造一个空的顺序表*/ {
L->elem=(elemtype*)malloc(LIST_INIT_SIZE*sizeof(el emtype));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
void shengcheng_Sq(SqList *L)/*建立一个顺序表,含有n个数据元素。*/
{
int m,n;
printf("please enter some data:");
scanf("%d",&n);
/*printf("请输入%d个元素:",n);*/
for(m=0;m { scanf("%d",&L->elem[m]); L->length++; } } void shuchu_Sq(SqList L)/*输出顺序表及顺序表的长度*/ { int i; /*printf("顺序表中的元素是:\n");*/ for(i=0;i< L.length;i++) { printf("%d", L.elem[i]); } printf("\n"); } void MergeList_Sq(SqList *La,SqList *Lb,SqList *Lc)/*将两个顺序有序表A和B合并为一个有序表C。*/ { elemtype *pa,*pb,*pc,*pa_last,*pb_last; pa=La->elem;pb=Lb->elem; Lc->listsize =Lc->length =La->length +Lb->length ; pc=Lc->elem =(elemtype *)malloc(Lc->listsize *sizeof(elemtype)); if(!Lc->elem) exit(OVERFLOW); pa_last=La->elem+La->length-1; pb_last=Lb->elem+Lb->length-1; while(pa<=pa_last && pb<=pb_last){ if(*pa<=*pb) *pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last) *pc++=*pa++; while(pb<=pa_last) *pc++=*pb++; } void nizhi_Sq(SqList *La,SqList *Lb)/*将顺序表逆置,将结果保存到另外的顺序表中。*/ { int m,p; InitList_Sq(Lb); p=La->length-1; for(m=0;m<=p;m++) { Lb->elem[m]=La->elem[p-m]; Lb->length++; } } void main() { SqList La,Lb,Lc,Ld; InitList_Sq(&La); InitList_Sq(&Lb); InitList_Sq(&Lc); InitList_Sq(&Ld); shengcheng_Sq(&La); shuchu_Sq(La); shengcheng_Sq(&Lb); shuchu_Sq(Lb); MergeList_Sq(&La,&Lb,&Lc); shuchu_Sq(Lc); nizhi_Sq(&Lc,&Ld); shuchu_Sq(Ld); }