代码如下 小白肯定有很多错误,哪位好心人能帮我看看修改修改,谢谢啦 teacher让我们输出如下图片结果
// 1-2-blank.cpp 实现算法2.11、2.12的程序
#include"c1.h"
typedef int ElemType;
#include"c2-2.h"
#include"bo2-2.h"
void CreateList(LinkList &L,int n) // 算法2.11
{ // 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
int i;
LinkList p;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next=NULL; // 先建立一个带头结点的单链表
printf("请输入%d个数据\n",n);
for(i=n;i>0;--i)
{
L=new LNode;// 生成新结点
cin>>p->data;// 输入元素值
node *p = L->head; // 插入到表头
return OK;
}
}
void CreateList2(LinkList &L,int n)
{ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
int i;
LinkList p,q;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
L=new LNode;// 生成新结点
cin>>p->data;// 输入元素值
p->next=NULL; r->next=p; // 插入到表尾
return OK;
}
p->next=NULL;
}
void MergeList(LinkList La,LinkList &Lb,LinkList &Lc)// 算法2.17
{ // 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列
LinkList pa=La->next,pb=Lb->next,pc;
Lc=pc=La; // 用La的头结点作为Lc的头结点
while((pa<=pa_last) && (pb<=pb_last))//循环条件
if(pa->data<=pb->data)//摘取pa所指结点
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else//摘取pb所取结点
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
while (pa<=pa // 将非空表的剩余段插入pc后
delete LB;// 释放Lb的头结点
Lb=NULL;
}
void visit(ElemType c) // ListTraverse()调用的函数(类型要一致)
{
printf("%d ",c);
}
void main()
{
int n=5;
LinkList La,Lb,Lc;
ElemType e;
printf("按非递减顺序, ");
CreateList2(La,n); // 正位序输入n个元素的值
printf("La="); // 输出链表La的内容
ListTraverse(La,visit);
printf("按非递增顺序, ");
CreateList(Lb,n); // 逆位序输入n个元素的值
printf("Lb="); // 输出链表Lb的内容
ListTraverse(Lb,visit);
ListDelete(La,3,e);
printf("删除表La中第三个元素:");
ListTraverse(La,visit);
MergeList(La,Lb,Lc); // 按非递减顺序归并La和Lb,得到新表Lc
printf("Lc="); // 输出链表Lc的内容
ListTraverse(Lc,visit);
}
这么长吗,我傻了,哪个函数错了?
creatlist中L->head是?
题主的代码修改如下,供参考:
//#include <stdio.h>
//#include"c1.h"
//#include"c2-2.h"
//#include"bo2-2.h"
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
}SqList,* LinkList;
void CreateList(LinkList& L, int n) // 算法2.11;;
{ // 逆位序(插在表头)输入n个元素的值,建立带表头结构的单链线性表L
int i;
LinkList p;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next = NULL; // 先建立一个带头结点的单链表
cout << "请输入" << n << "个数据:" << endl; //printf("请输入 % d个数据 : \n", n);
for (i = 0; i < n; i++)//for (i = n; i > 0; --i)
{
p = (SqList*)malloc(sizeof(SqList));//L = new LNode;// 生成新结点
if (!p) return;
p->next = NULL;
cin >> p->data;// 输入元素值
p->next = L->next;// 插入到表头
L->next = p;
}
//return OK;
}
void CreateList2(LinkList& L, int n)
{ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
int i;
LinkList p, q;
L = (SqList*)malloc(sizeof(SqList));//用malloc函数来新建一个L
L->next = NULL;
q = L;
cout << "请输入" << n << "个数据:" << endl; //printf("请输入%d个数据:\n", n);
for (i = 0; i < n; i++) //for (i = 1; i <= n; i++)
{
p = (SqList*)malloc(sizeof(SqList));//L = new LNode;// 生成新结点
if (!p) return;
p->next = NULL;
cin >> p->data;// 输入元素值
q->next = p; // 插入到表尾
q = p;
}
}
void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc)// 算法2.17
{ // 已知单链线性表La和Lb的元素按值非递减排列。
// 归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列
LinkList pa = La->next, pb = Lb->next, pc;
Lc = pc = La; // 用La的头结点作为Lc的头结点
while (pa && pb)//循环条件
{
if (pa->data <= pb->data)//摘取pa所指结点
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else { //摘取pb所取结点
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb; //while (pa <= pa) // 将非空表的剩余段插入pc后
free(Lb);//deletd Lb; 释放Lb的头结点
Lb = NULL;
}
void ListDelete(LinkList L, int n, ElemType& e)
{
int i = 0;
LNode* p = L, * s = NULL;
if (n < 1) return;
while (p && i < n)
{
s = p;
p = p->next;
i++;
}
if (!p) return;
s->next = p->next;
e = p->data;
free(p);
}
void ListTraverse(LinkList L)//visit(ElemType c) // ListTraverse()调用的函数(类型要一致)
{
SqList* p = L->next;
while (p)
{
cout << p->data<<" "; //printf("%d ", p->data);
p = p->next;
}
cout << endl; //printf("\n");
}
int main()
{
int n = 5;
LinkList La, Lb, Lc = NULL;
ElemType e = -1;
cout << "按非递减顺序,"; //printf("按非递减顺序, ");
CreateList2(La, n); // 正位序输入n个元素的值
cout << "La="; //printf("La="); // 输出链表La的内容
ListTraverse(La); //ListTraverse(La);
cout << "按非递增顺序,"; //printf("按非递增顺序, ");
CreateList(Lb, n); // 逆位序输入n个元素的值
cout << "Lb="; //printf("Lb="); // 输出链表Lb的内容
ListTraverse(Lb);//ListTraverse(Lb);
ListDelete(La, 3, e);
cout << "删除表La中第三个元素[" << e << "]:"; //printf("删除表La中第三个元素[%d]:", e);
ListTraverse(La);
MergeList(La, Lb, Lc); // 按非递减顺序归并La和Lb,得到新表Lc
cout << "Lc="; //printf("Lc="); // 输出链表Lc的内容
ListTraverse(Lc);
return 0;
}