nuoeraaa 2022-10-19 10:49 采纳率: 85.7%
浏览 17
已结题

顺序表的合并这样为什么没结果

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

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-10-19 10: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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月21日
  • 已采纳回答 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错