#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;
}

顺序表的合并这样为什么没结果
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 快乐鹦鹉 2022-10-19 02:55关注
(*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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用