一个链表合并的问题,请求帮忙!!
我写了下列的代码,想实现两个链表的合并,编译时没出错,但结果什么都没有,不知怎么回事!请大家帮我找找原因,谢谢了!
代码如下:
/*两个顺序表的合并*/
#include <stdio.h>
#define OVERFLOW 1
#define ok 1
typedef struct
{
int no;
int grade;
}ElemType;
typedef struct
{
ElemType *elem;
int length;
int ListSize;
}SqList;
/*初始化链表*/
InitList(SqList *pL)
{
pL->ListSize=100;
pL->elem=(ElemType*)malloc(pL->ListSize*sizeof(ElemType));
if(pL->elem==NULL) exit(OVERFLOW); /*如果分配不成功则退出*/
pL->length=0;
}
/*插入函数*/
ListInsert(SqList *pL,ElemType e)
{
int i,j;
if(pL->length>=pL->ListSize) /* 当元素的个数超出表的长度时,重新分配内存*/
{
pL->ListSize=pL->ListSize+10;
pL->elem=(ElemType*)realloc(pL->ListSize*sizeof(ElemType));
}
for(i=0;i<pL->length;i++) /*寻找插入的位置*/
{
if(e.grade>=pL->elem[i].grade)
break;
}
/*位置向后移*/
for(j=pL->length+1;j>i;j--)
{
pL->elem[j].grade=pL->elem[j-1].grade;
pL->elem[j-1].grade=e.grade;
}
return ok;
}
int ListLength(SqList *pL) /*数链表的长度*/
{
int length=0; /*初始化长度为0*/
if(pL->elem!=NULL) /*如果链表中的elem结构体不为NULL 时,则长度自增*/
{
length++;
}
return length; /*返回长度的值*/
}
ElemType GetElem(SqList *pL,int j) /*得到指定的ElemType 元素 j */
{
return pL->elem[j];/*返回所指定的ElemType元素*/;
}
ShowList(SqList*pL) /*显示链表元素*/
{
int i;
for(i=0;i<pL->length;i++){
printf("\n(%d,%d)",pL->elem[i].no,pL->elem[i].grade);
}
}
MergeList(SqList *a,SqList *b) /*合并链表*/
{
int i=1,j=1;
ElemType ai,bj;
int La_len,Lb_len; /*定义链表 a 和b 的长度*/
SqList L; /*定义合并后的链表*/
InitList(&L);
La_len=ListLength(a);
Lb_len=ListLength(b);
while(i<=La_len&&j<=Lb_len) /*当a ,b链表均非空时执行循环*/
{
ai=GetElem(a,i);
bj=GetElem(b,j);
if(ai.grade<=bj.grade) /*ElemType元素ai,bj成绩的比较*/
{
ListInsert(&L,bj);++i;
}
else
{
ListInsert(&L,ai);++j;
}
while(i<=La_len) /*把剩下元素放到L链表后面*/
{
ai=GetElem(a,i++);ListInsert(&L,ai);
}
while(j<=Lb_len)
{
bj=GetElem(b,j++);ListInsert(&L,bj);
}
}
ShowList(&L);
}
main()
{
SqList a;
ElemType e[3];
SqList b;
ElemType f[3];
InitList(&a); /*对链表a的初始化,并赋值*/
e[0].no=1;e[0].grade=88;
ListInsert(&a,e[0]);
e[1].no=2;e[1].grade=83;
ListInsert(&a,e[1]);
e[2].no=3;e[2].grade=68;
ListInsert(&a,e[2]);
InitList(&b); /*对链表b的初始化,并赋值*/
f[0].no=1 ;f[0].grade=74 ;
ListInsert(&b,f[0]);
f[1].no=2 ;f[1].grade=66 ;
ListInsert(&b,f[1]);
f[2].no=3 ;f[2].grade=78 ;
ListInsert(&b,f[2]);
MergeList(&a,&b); /*调用合并函数,打印出合并后的结果*/
getch();
}