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

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