nuoeraaa 2022-10-19 02: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 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;
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    nuoeraaa 2022-10-19 03:14

    哦哦 我改了 为什么还是没有结果呢

    回复
    快乐鹦鹉 2022-10-19 04:13

    img

    回复
编辑
预览

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月21日
  • 已采纳回答 10月19日
  • 创建了问题 10月19日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部