/*
void print(ELemType c) //显示错误的地方!
{
printf("%d",c);
}
*/
//头文件省略
define OK 1;
define ERROR 0;
typedef int Status;
typedef int ElemType;
struct LNode
{
ElemType data;
LNode * next;
};
typedef LNode * LinkList;
void CreateList(LinkList &L,int n)
//逆位序(节点插在表头)输入n个元素的值,建立带表头结点的单链线性表L
{
int i;
LinkList p;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
printf("请输入%d个数据\n",n);
for(i = n;i > 0;i--)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
}
void CreateList1(LinkList &L,int n)
//正位序(结点插在表尾)输入n个元素的值,建立带头结点的单链线性表L;
{
int i;
LinkList p,q;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
q = L;
printf("请输入%d个数据\n",n);
for(i = 1;i <= n;i++)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next = p; //注意不是L->next = p,因为每次插入是插在上个节点的后面
q = q->next;
}
p->next = NULL;
}
void MergeList(LinkList La,LinkList &Lb,LinkList &Lc)
{
LinkList pa = La->next,pb = Lb->next,pc;
Lc = pc = La;
while(pa && pb)
if(pa->data <= pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
pc->next = pa ? pa : pb;
free(Lb);
Lb = NULL;
}
void ListTraverse(LinkList L,void(* visit)(ElemType))
{
LinkList p = L->next;
while(p)
{
visit(p->data);
p = p->next;
}
printf("\n");
}
**void print(ELemType c) //显示错误的地方!
{
printf("%d",c);
}**
void main()
{
int n = 5;
LinkList La,Lb,Lc;
printf("按非递减顺序,");
CreateList(La,n);
printf("La = ");
ListTraverse(La,print);
printf("按非递减顺序,");
CreateList(Lb,print);
printf("Lb = ");
ListTraverse(Lb,print);
MergeList(La,Lb,Lc);
printf("Lc = ");
ListTraverse(Lc,print);
}
/*
error C2065: 'ELemType' : undeclared identifier
//不理解这儿:我前面已经用 typedef int ElemType 定义了ElemType,为什么此处还提示这样的错误信息!
error C2146: syntax error : missing ')' before identifier 'c'
//这个我也不明白了
error C2182: 'print' : illegal use of type 'void'
//这个print是通过调用ListTraverse来实现的,就应该是void型,此处为什么不正确
error C2059: syntax error : ')'
*/