梦想是代码一写就对 2022-09-30 08:32 采纳率: 65%
浏览 37
已结题

调个数据结构代码,图片是输入输出样例

#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
bool InitList_L(LinkList &s);
bool CreateList_L_Head(LinkList &l,ElemType a[],int n);
bool ListEmpty_L(LinkList s);
bool DisplayElem(ElemType e);
void ErrorMessage(const char *s);
bool ListTraverse_L(LinkList c,bool (*func)(ElemType));
void MergeList_L(LinkList a,LinkList b,LinkList &c);
int ListLength_L(LinkList s);
int main()
{
    //测试MergeList_L()
    LinkList A, B, C;
    int n;
    if(InitList_L(A))
        cout<<"初始化线性表A成功"<<endl;
else {
        cout<<"初始化线性表A失败"<<endl;
        return 1;
    }
    cout << "输入线性表A的元素个数:";
    cin >> n; 
    cout << "输入线性表A的数据元素:";
    ElemType *a = new ElemType[n];
    for (int i=0; i<n; i++)
        cin >> a[i];
    if(!CreateList_L_Head(A, a, n)) {
        cout<<"线性表A赋值失败"<<endl;
        return 2;
    }
    cout << endl; 
    if(InitList_L(B))
        cout<<"初始化线性表B成功"<<endl;
    else {
        cout<<"初始化线性表B失败"<<endl;
        return 3;
    }
cout << "输入线性表B的元素个数:";
    cin >> n; 
    cout << "输入线性表B的数据元素:";
    ElemType *b = new ElemType[n];
    for (int i=0; i<n; i++)
        cin >> b[i];
    if(!CreateList_L_Head(B, b, n)) {
        cout<<"线性表B赋值失败"<<endl;
        return 4;
    }
    cout << endl;
    if(ListEmpty_L(A))//检验线性表是否为空
        cout<<"线性表A为空"<<endl;
    else {
        cout << "线性表A中元素个数为" << ListLength_L(A) << ",";//查询线性表中元素个数
        cout << "线性表的元素为:";
        ListTraverse_L(A, DisplayElem);//遍历
        cout << endl;
    }
    if(ListEmpty_L(B))//检验线性表是否为空
        cout<<"线性表B为空"<<endl;
else {
        cout << "线性表B中元素个数为" << ListLength_L(B) << ",";//查询线性表中元素个数
        cout << "线性表的元素为:";
        ListTraverse_L(B, DisplayElem);//遍历
        cout << endl;
    }
    MergeList_L(A, B, C);
    if(ListEmpty_L(C))//检验线性表是否为空
        cout<<"线性表C为空"<<endl;
    else {
        cout << "线性表C中元素个数为" << ListLength_L(C) << ",";//查询线性表中元素个数
        cout << "线性表的元素为:";
        ListTraverse_L(C, DisplayElem);//遍历
        cout << endl;
    }
    return 0;
}
void ErrorMessage(const char *s)
{
    cout << s << endl;
}
//DisplayElem()的实现
bool DisplayElem(ElemType e)
{
    cout<<e;
    return true;
}
bool InitList_L(LinkList &s)
{
    s=new LNode;
    if(s==NULL) return false;
    s->next==NULL;
    return true;
}
bool CreateList_L_Head(LinkList &l,ElemType a[],int n)
{
    if(n<0) return false;
    else if(n==0) return true;
for(n--;n>=0;n--)
    {
    LNode *s=new LNode;
    if(s==NULL) {ErrorMessage("内存不足!"); return false;}
    s->data=a[n];
    s->next=l->next;
    l->next=s;
    }
    return true;
}
bool ListEmpty_L(LinkList s)
{
    if(s->next==NULL)
    return true;
    else 
    return false;
}
bool ListTraverse_L(LinkList c,bool(*func)(ElemType))
{
    LNode *p=c->next;
    while(p){

```if(!(*func)(p->data)) return false;
    p=p->next;
    }
    return true;
}
void MergeList_L(LinkList a,LinkList b,LinkList &c)//把链表ab的data放在e[20]里面,然后进行数组e[20]的排序(大的走下边去),再赋值给链表c 
{
    ElemType e[20];
    LNode *p=a->next,*q=b->next;
    int i=0;
    for(;!p;p=p->next)
    {
        e[i++]=p->data;
    }
    for(;!q;q=q->next)
    {
        e[i++]=q->data;
    }
    int j=0,k=1;
    ElemType temp;
    for(;j<=i;j++)
 for(;k<=i;k++)
    {
       if(e[j]>e[k]){temp=e[j];e[j]=e[k];e[k]=temp;}
    }
    LNode *r,*d=c->next;
    for(int m=0;m<=i;m++)
    {
        r->data=e[i];
        r->next=d->next;
        d->next=r;
        d=d->next;
        r=r->next;
    }
}
int ListLength_L(LinkList s)
{
    LNode *p=s->next;
    int i=0;
    while(p)
    {
        i++;
        p=p->next;
    }
    return i;
}

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/471958794466169.jpg "#left")
  • 写回答

2条回答 默认 最新

  • 浪客 2022-09-30 09:27
    关注

    修改了几处,修改的地方//+标注了。
    最主要问题是C没有初始化就是用了。A,B初始化最后一个NULL赋值错误。

    
    
    #include <iostream>
    using namespace std;
    typedef int ElemType;
    typedef struct _LNode //+
    {
        ElemType data;
        struct _LNode *next; //+
    } LNode, *LinkList;
    
    bool InitList_L(LinkList &s);
    bool CreateList_L_Head(LinkList &l, ElemType a[], int n);
    bool ListEmpty_L(LinkList s);
    bool DisplayElem(ElemType &e); //+
    void ErrorMessage(const char *s);
    bool ListTraverse_L(LinkList c, bool (*func)(ElemType &)); //+
    void MergeList_L(LinkList a, LinkList b, LinkList &c);
    int ListLength_L(LinkList s);
    
    int main()
    {
        //测试MergeList_L()
        LinkList A, B, C;
        int n;
        if (InitList_L(A))
            cout << "初始化线性表A成功" << endl;
        else
        {
            cout << "初始化线性表A失败" << endl;
            return 1;
        }
        cout << "输入线性表A的元素个数:";
        cin >> n;
        cout << "输入线性表A的数据元素:";
        ElemType *a = new ElemType[n];
        for (int i = 0; i < n; i++)
            cin >> a[i];
        if (!CreateList_L_Head(A, a, n))
        {
            cout << "线性表A赋值失败" << endl;
            return 2;
        }
        cout << endl;
        if (InitList_L(B))
            cout << "初始化线性表B成功" << endl;
        else
        {
            cout << "初始化线性表B失败" << endl;
            return 3;
        }
        cout << "输入线性表B的元素个数:";
        cin >> n;
        cout << "输入线性表B的数据元素:";
        ElemType *b = new ElemType[n];
        for (int i = 0; i < n; i++)
            cin >> b[i];
        if (!CreateList_L_Head(B, b, n))
        {
            cout << "线性表B赋值失败" << endl;
            return 4;
        }
        cout << endl;
        if (ListEmpty_L(A)) //检验线性表是否为空
            cout << "线性表A为空" << endl;
        else
        {
            cout << "线性表A中元素个数为" << ListLength_L(A) << ","; //查询线性表中元素个数
            cout << "线性表的元素为:";
            ListTraverse_L(A, DisplayElem); //遍历
            cout << endl;
        }
        if (ListEmpty_L(B)) //检验线性表是否为空
            cout << "线性表B为空" << endl;
        else
        {
            cout << "线性表B中元素个数为" << ListLength_L(B) << ","; //查询线性表中元素个数
            cout << "线性表的元素为:";
            ListTraverse_L(B, DisplayElem); //遍历
            cout << endl;
        }
        InitList_L(C); //+
        MergeList_L(A, B, C);
        if (ListEmpty_L(C)) //检验线性表是否为空
            cout << "线性表C为空" << endl;
        else
        {
            cout << "线性表C中元素个数为" << ListLength_L(C) << ","; //查询线性表中元素个数
            cout << "线性表的元素为:";
            ListTraverse_L(C, DisplayElem); //遍历
            cout << endl;
        }
    
        return 0;
    }
    void ErrorMessage(const char *s)
    {
        cout << s << endl;
    }
    // DisplayElem()的实现
    bool DisplayElem(ElemType &e) //+
    {
        cout << e << " "; //+
        return true;
    }
    bool InitList_L(LinkList &s)
    {
        s = new LNode;
        if (s == NULL)
            return false;
        s->next = NULL; // s->next == NULL;//+
        return true;
    }
    bool CreateList_L_Head(LinkList &l, ElemType a[], int n)
    {
        if (n < 0)
            return false;
        else if (n == 0)
            return true;
        for (n--; n >= 0; n--)
        {
            LNode *s = new LNode;
            if (s == NULL)
            {
                ErrorMessage("内存不足!");
                return false;
            }
            s->data = a[n];
            s->next = l->next;
            l->next = s;
        }
        return true;
    }
    bool ListEmpty_L(LinkList s)
    {
        if (s->next == NULL)
            return true;
        else
            return false;
    }
    bool ListTraverse_L(LinkList c, bool (*func)(ElemType &)) //+
    {
        LNode *p = c->next;
        while (p)
        {
            if (!(*func)(p->data))
                return false;
            p = p->next;
        }
        return true;
    }
    void MergeList_L(LinkList a, LinkList b, LinkList &c) //把链表ab的data放在e[20]里面,然后进行数组e[20]的排序(大的走下边去),再赋值给链表c
    {
        ElemType e[20];
        LNode *p = a->next, *q = b->next;
        int i = 0;
        while (p) // for (; !p; p = p->next)//+
        {
            e[i++] = p->data;
            p = p->next; //+
        }
        while (q) // for (; !q; q = q->next)//+
        {
            e[i++] = q->data;
            q = q->next; //+
        }
        int j = 0, k = 1;
        ElemType temp;
        for (; j < i - 1; j++)        //+
            for (k = j; k < i; k++) //+
            {
                if (e[j] > e[k])
                {
                    temp = e[j];
                    e[j] = e[k];
                    e[k] = temp;
                }
            }
        // LNode *r, *d = c->next; //
        // for (int m = 0; m <= i; m++)
        // {
        //     r->data = e[i];
        //     r->next = d->next;
        //     d->next = r;
        //     d = d->next;
        //     r = r->next;
        // }
        CreateList_L_Head(c, e, i); //+
    }
    int ListLength_L(LinkList s)
    {
        LNode *p = s->next;
        int i = 0;
        while (p)
        {
            i++;
            p = p->next;
        }
        return i;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月25日
  • 创建了问题 9月30日

悬赏问题

  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵
  • ¥15 cfx离心泵非稳态计算