#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")
![](https://profile-avatar.csdnimg.cn/ec20e12f06ae4d68894f30d708aca791_weixin_72102454.jpg!4)
调个数据结构代码,图片是输入输出样例
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; }
解决 1无用
悬赏问题
- ¥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离心泵非稳态计算