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

#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")

修改了几处,修改的地方//+标注了。
最主要问题是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;
}

修改如下,供参考:

#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;
    }
    //修改 需要初始化 C 
    if (InitList_L(C))
        cout << "初始化线性表C成功" << endl;
    else {
        cout << "初始化线性表C失败" << endl;
        return 5;
    }
    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 = new ElemType[ListLength_L(a) + ListLength_L(b)]; //ElemType e[20]; 修改
    LNode* p = a->next, * q = b->next;
    int i = 0;
    for (; p; p = p->next)  //for (; !p; p = p->next) 修改
    {
        e[i++] = p->data;
    }
    for (; q; q = q->next) //for (; !q; q = q->next)  修改
    {
        e[i++] = q->data;
    }
    int j = 0, k = 0;     //修改
    ElemType temp;
    for (j = i - 1; j > 0; j--)  //for(;k<=i;k++)  修改
        for (k = 0; k < j; k++)  // for(;k<=i;k++) 修改
        {
            if (e[k] > e[k + 1]) { temp = e[k]; e[k] = e[k + 1]; e[k + 1] = temp; }
        }
    CreateList_L_Head(c, e, i);
#if 0    //修改
    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;
    }
#endif
}
int ListLength_L(LinkList s)
{
    LNode* p = s->next;
    int i = 0;
    while (p)
    {
        i++;
        p = p->next;
    }
    return i;
}