主题:[讨论]顺序表合并的简单问题
这是我最近找出来的题目 想用和书上不同的方式写写 但好像一到合并函数部分就出错
希望各位帮忙看看 指教指教 就是合并函数那块 看看怎么改 那个 题目是:将两个升序顺序表合并成一个升序表
#include"stdio.h"
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{ ElemType *data;
int listsize;
int length;
}sqlist;
void creslist(sqlist *L) /*初始化表*/
{ L->data=(ElemType *)malloc(sizeof(ElemType) *MAXSIZE);
L->length=0;
L->listsize=MAXSIZE;
}
void combine(sqlist *L1,sqlist *L2,sqlist *L) /*合并函数*/
{ int i,j,k;
k=L1->length+L2->length; /*k是用来得到L的表长的*/
for(i=L1->length-1;i>=0;i--) /*这两个循环是用来判断
for(j=L2->length-1;j>=0;j--) 哪个数大就将那个放到
{ if(L1->data[i]>=L2->data[j]) L表的尾部,故K在此有
L->data[k]=L1->data[i]; 用*/
else
L->data[k]=L2->data[j];
k--;L->length++;
}
if(L1->length<L2->length)
while(j) {L->data[k]=L2->data[j];--j;--k;L->length++;}/*这里我是想将
else 剩余的表中的
while(i) {L->data[k]=L1->data[i];--i;--k;L->length++;} 元素放到L中,
} 即收尾工作*/
void inputlist(sqlist *L) /*输入*/
{ int i,k;
printf("please input the K and numbers: \n");
scanf("%d",&k);
if(k>L->listsize) printf("Sorry,it is overflow\n");
else
for(i=1;i<=k;i++)
{ scanf("%d",&L->data[i-1]);
L->length++;
}
}
void outputlist(sqlist *L) /*输出*/
{ int i;
for(i=1;i<=L->length;i++)
printf("%d,",L->data[i-1]);
printf("\n");
}
main()
{ sqlist L1,L2,L3;
creslist(&L1);
creslist(&L2);
creslist(&L3);
inputlist(&L1);
inputlist(&L2);
combine(&L1,&L2,&L3);
outputlist(&L1);
outputlist(&L2);
outputlist(&L3);
}
希望各位帮忙看看 指教指教 就是合并函数那块 看看怎么改 那个 题目是:将两个升序顺序表合并成一个升序表
#include"stdio.h"
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{ ElemType *data;
int listsize;
int length;
}sqlist;
void creslist(sqlist *L) /*初始化表*/
{ L->data=(ElemType *)malloc(sizeof(ElemType) *MAXSIZE);
L->length=0;
L->listsize=MAXSIZE;
}
void combine(sqlist *L1,sqlist *L2,sqlist *L) /*合并函数*/
{ int i,j,k;
k=L1->length+L2->length; /*k是用来得到L的表长的*/
for(i=L1->length-1;i>=0;i--) /*这两个循环是用来判断
for(j=L2->length-1;j>=0;j--) 哪个数大就将那个放到
{ if(L1->data[i]>=L2->data[j]) L表的尾部,故K在此有
L->data[k]=L1->data[i]; 用*/
else
L->data[k]=L2->data[j];
k--;L->length++;
}
if(L1->length<L2->length)
while(j) {L->data[k]=L2->data[j];--j;--k;L->length++;}/*这里我是想将
else 剩余的表中的
while(i) {L->data[k]=L1->data[i];--i;--k;L->length++;} 元素放到L中,
} 即收尾工作*/
void inputlist(sqlist *L) /*输入*/
{ int i,k;
printf("please input the K and numbers: \n");
scanf("%d",&k);
if(k>L->listsize) printf("Sorry,it is overflow\n");
else
for(i=1;i<=k;i++)
{ scanf("%d",&L->data[i-1]);
L->length++;
}
}
void outputlist(sqlist *L) /*输出*/
{ int i;
for(i=1;i<=L->length;i++)
printf("%d,",L->data[i-1]);
printf("\n");
}
main()
{ sqlist L1,L2,L3;
creslist(&L1);
creslist(&L2);
creslist(&L3);
inputlist(&L1);
inputlist(&L2);
combine(&L1,&L2,&L3);
outputlist(&L1);
outputlist(&L2);
outputlist(&L3);
}