#include <stdio.h>
#include <stdlib.h>
#define ListLength 5;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void CreateList_L (LinkList &L, int n)
{ //逆位序输入n个元素,建立带表头结点的链表L
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL; //建立一个带头结点的单链表
LinkList p;
for (int i=n; i>0; --i){
p=(LinkList)malloc(sizeof(LNode)); //生成新节点
scanf("%c", &p->data); //输入元素值
p->next=L->next;
L->next=p; //插入到表头
}
}
//**************************************
int GetElem_L(LinkList &L, int i, ElemType &e)
{ //当第i个元素存在时,将其值赋给e并返回OK,否则返回ERROR
LinkList p;
p=L->next; //初始化,p指向第一个结点
int j=1; //j为计数器
while( p && j<i)
{ //顺指针往后查找,直到p指向第i个元素或p为空
p=p->next;
++j;
}
if (!p|| j>i) return 0; //第i个元素不存在
e = p->data; //用e返回值
return 1;
}
//**************************************
void SortList_L(LinkList &L,int n)
{ //冒泡排序,将链表L中的n个元素排序
int i,j,t;
LinkList p,q;
for(i=0;i<n-1;i++)
{
p=L->next; //初始化,p指向第一个结点
q=L->next->next;
for(j=0;j<n-1-i;j++)
{
if(p->data>q->data)
{
t=p->data;
p->data=q->data; //按从小到大的顺序排序
q->data=t;
}
p=p->next; q=q->next;
}
}
}
void PrintList_L (LinkList &L, int n)
{
LinkList p;
p=L;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
}
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{ //La, Lb是有序表,归并得到有序表Lc
LinkList pa, pb, pc;
pa = La->next; pb = Lb->next; //pa,pb分别指向La、Lb的头结点
Lc = pc = La;
while (pa && pb)
{
if(pa->data>=pb->data)
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
else
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
}
pc->next = pa ? pa : pb; //插入剩余段
free(Lb); //释放Lb头结点
}
//**************************************
int ListInsert_L(LinkList &L, int i, ElemType e)
{ //在带头结点的单链表L中的第i个元素之前插入e
LinkList p,s;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
} //寻找第i个结点
if(!p||j>i-1)
return 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
//**************************************
int ListDelete_L (LinkList &L, int i, ElemType &e)
{ //在带头结点的单链表L中删除第i个元素并用e返回其值
LinkList p,q;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
} //寻找第i个结点
if(!p||j>i-1)
return 0;
q=p->next;
p->next=q->next;
e=q->data;free(q);
return 1;
}
//**************************************
void main(){
LinkList La,Lb,Lc;
//输入任意5个值,构造链表La
printf("输入任意%d个值,构造链表La\n",ListLength);
La=CreateList_L(La,ListLength);
printf("Original La:\n");
PrintList_L(La, ListLength);
//输入任意5个值,构造链表Lb
printf("输入任意%d个值,构造链表Lb\n",ListLength);
Lb=CreateList_L (Lb,ListLength);
printf("Original Lb:\n");
PrintList_L(Lb, ListLength);
//链表La, Lb排序
La=SortList_L(La,ListLength);
printf("La sorted:\n");
PrintList_L(La, ListLength);
Lb=SortList_L(Lb,ListLength);
printf("Lb sorted:\n");
PrintList_L(Lb, ListLength);
//有序链表La, Lb归并为有序链表Lc
MergeList_L(La,Lb,Lc);
printf("Lc:\n");
PrintList_L(Lc, ListLength);
}
C:\Users\zjjcl\Desktop\LinkList.cpp(176) : error C2143: syntax error : missing ')' before ';'
C:\Users\zjjcl\Desktop\LinkList.cpp(176) : error C2059: syntax error : ')'
C:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2143: syntax error : missing')'before';'C:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2440: '=' : cannot convert from 'void' to 'struct LNode *' Expressions of type void cannot be converted to other typesC:\Users\zjjcl\Desktop\LinkList.cpp(177) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(179) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(179) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(183) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(183) : error C2059: syntax error : ')'C:\Users\zjjcl\Desktop\LinkList.cpp(184) : error C2143: syntax error : missing ')' before ';'C:\Users\zjjcl\Desktop\LinkList.cpp(184) : error C244
好像宏定义的变量和主函数的变量重名了,但是还是会有错误C2440说不能从’void’转换成’struct LNode’,awsl,我这么菜又这么喜欢大佬,或许有人能救救孩子