麻烦哪位帮忙看一下下面的程序有什么问题,是数据结构合并两个非递减线性表的问题,谢谢?

2024-12-25 06:29:07
推荐回答(1个)
回答1:

//可以写一个建立有序表的函数,就不用在主函数中用两个循环来建立有序表了。
#include
#include
#include

#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
#define OVERFLOW 0
#define OK 1

typedef int ElemType;

typedef struct
{

ElemType *elem; //存储空间基址

int length; //当前长度
int listsize; //当前分配的存储容量

}SqList;

int InitList_Sq(SqList &L) //构造一个空的线性表
{

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;

}

void MergeList_Sq(SqList La,SqList Lb,SqList &Lc)
{
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++; //插入La的剩余元素
while(pb<=pb_last)
*pc++=*pb++; //插入Lb的剩余元素
}

void main(void)
{

int i;
SqList la,lb,lc;

InitList_Sq(la);
InitList_Sq(lb);
InitList_Sq(lc);

printf("请输入线性表La:\n");
for(i=0;i<10;i++)
{
scanf("%d",&la.elem[i]);//修改
la.length++;
}
printf("\n\n");

printf("请输入线性表Lb:\n");
for(i=0;i<10;i++)
{
scanf("%d",&lb.elem[i]);//修改
lb.length++;
}
printf("\n\n");

MergeList_Sq(la,lb,lc);//修改,引用调用直接用变量名

printf("请输出线性表La:\n");
//la.elem=0;删除
for(i=0;i{
printf("%d\t ",la.elem[i]);
//*la.elem++;
}
printf("\n\n");

printf("请输出线性表Lb:\n");
//lb.elem=0;删除
for(i=0;i{
printf("%d\t ",lb.elem[i]);
//*lb.elem++;
}
printf("\n\n");

printf("请输出线性表Lc:\n");
//lc.elem=0;删除
for(i=0;i{
printf("%d\t ",lc.elem[i]);
//*lc.elem++;
}
printf("\n\n");

}