#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 180
#define ElemType
typedef struct{
int ElemType data[MAXSIZE];
int length;}
SeqList;
void InitList(SeqList L){
L.length=0;
}
void CreateList(SeqList *L, int x)//线性表的赋值操作for(int i-0;i<x;i++)
{
for(int i =0;i<x;i++){
printf("输入数据元素:");
int data;
scanf("%d",&data);
(*L).data[i]=data;
(*L).length++;}
}
void ListTraverse(SeqList L)
{ /* 初始条件:顺序线性表L已存在 */
int ElemType *p;
int i;
p=L.data;
for(i=1;i<=L.length;i++)
printf("%3d",*p++);
printf("\n");
}
void MergeList(SeqList L1, SeqList L2, SeqList *L3)
{
int i=0,j=0,k=0;
while((i<L1.length)&&(j<L2.length)){
if(L1.data[i]>L2.data[j]){
(*L3).data[k++]=L2.data[j++];(*L3).length++;
}
else{
(*L3).data[k++]-L1.data[i++];(*L3).length++;
}
}
while(i<L1.length){//当1表不为空时,将1表所剩元素填入3表
(*L3).data[k++]=L1.data[i++];
(*L3).length++;
}
}
int main()
{
int n,m;
printf("输入顺序表1元素个数:");
scanf("%d",&n);
printf("输入顺序表2元素个数:");
scanf("%d",&m);
SeqList L1,L2,L3;
InitList(L1),InitList(L2),InitList(L3);
printf("创建顺序表1\n");
CreateList(&L1,n);
printf("创建顺序表2\n");
CreateList(&L2,m);
MergeList(L1,L2,&L3);
printf("结果\n");
ListTraverse(L3);
return 0;
}
(*L3).data[k++]-L1.data[i++];(*L3).length++;
这咋用减号?不应该等于号吗?
while(i<L1.length) ===为什么只考虑L1还有值呢?如果L2更大呢?
修改如下:
#define MAXSIZE 180
#define ElemType int
typedef struct _SeqList
{
ElemType data[MAXSIZE];
int length;
}SeqList;
void CreateList(SeqList *L, int x)//线性表的赋值操作for(int i-0;i<x;i++)
{
for(int i =0;i<x;i++)
{
printf("输入数据元素:");
int data;
scanf("%d",&data);
(*L).data[i]=data;
(*L).length++;}
}
void ListTraverse(SeqList L)
{ /* 初始条件:顺序线性表L已存在 */
ElemType *p;
int i;
p=L.data;
for(i=1;i<=L.length;i++)
printf("%3d",*p++);
printf("\n");
}
void MergeList(SeqList L1, SeqList L2, SeqList *L3)
{
int i=0,j=0,k=0;
while((i<L1.length)&&(j<L2.length))
{
if(L1.data[i]>L2.data[j]){
(*L3).data[k++]=L2.data[j++];(*L3).length++;
}
else{
(*L3).data[k++]=L1.data[i++];(*L3).length++;
}
}
while(i<L1.length){//当1表不为空时,将1表所剩元素填入3表
(*L3).data[k++]=L1.data[i++];
(*L3).length++;
}
while(j<L2.length){//当1表不为空时,将1表所剩元素填入3表
(*L3).data[k++]=L2.data[j++];
(*L3).length++;
}
}
int main()
{
int n,m;
printf("输入顺序表1元素个数:");
scanf("%d",&n);
printf("输入顺序表2元素个数:");
scanf("%d",&m);
SeqList L1,L2,L3;
L1.length = L2.length = L3.length = 0;
printf("创建顺序表1\n");
CreateList(&L1,n);
printf("创建顺序表2\n");
CreateList(&L2,m);
MergeList(L1,L2,&L3);
printf("结果\n");
ListTraverse(L3);
return 0;
}