数据结构(C语言版)线性表的归并,求大神帮忙改一改那里错了!

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//
typedef struct
{ ElemType * elem;
int length;
int listsize;
}SqList;
//
Status InitList(SqList L)
{ L.elem=(ElemType * )malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length =0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//
Status ListInsert(SqList L,int i,ElemType e)
{ ElemType * newbase, * q, * p;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{ newbase=(ElemType * )realloc(L.elem,(L.listsize+LISTINCREMENT) * sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
* (p+1)= * p;
* q= e;
++L.length;
return OK;
}
//
Status ListTraverse(SqList L,void( * vi)(ElemType * ))
{ ElemType * p;
int i;
p=L.elem;
for(i=1;i<=L.length;i++)
{ if(i!=1)
printf("%d", * p);
vi(p++);
}
printf("\n");
return OK;
}
//
int ListLength(SqList L)
{ return L.length;}
//
Status GetElem(SqList L,int i,ElemType e)
{ if(i<1||i>L.length)
exit(ERROR);
e= * (L.elem+i-1);
return OK;
}
//
void print(ElemType * c)
{ printf("%d", * c);}
//
void MergeList(SqList La,SqList Lb,SqList Lc)
{ int i=1,j=1,k=0;
int La_len,Lb_len;
ElemType ai, bj;
InitList(Lc);
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while((i<=La_len) && (j<=Lb_len))
{ GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
{ ListInsert(Lc,++k,ai);
++i;
}
else
{ ListInsert(Lc,++k,bj);
++j;
}
}
while(i<=La_len)
{ GetElem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
while(j<=Lb_len)
{ GetElem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}
}
int main()
{ int a[4]={3,5,8,11},b[7]={2,6,8,9,11,15,20},j;
SqList La,Lb,Lc;
InitList(La);
for(j=1;j<=4;j++)
ListInsert(La,j,a[j-1]);
printf("La= ");
ListTraverse(La,print);
InitList(Lb);
for(j=1;j<=7;j++)
ListInsert(Lb,j,b[j-1]);
printf("Lb= ");
ListTraverse(Lb,print);
MergeList(La,Lb,Lc);
printf("Lc= ");
ListTraverse(Lc,print);
return 0;
}

第1个回答  推荐于2016-02-21
修改如下,个中问题自己找
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//
typedef struct
{ ElemType * elem;
int length;
int listsize;
}SqList;
//
Status InitList(SqList &L)
{ L.elem=(ElemType * )malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length =0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
//
Status ListInsert(SqList &L,int i,ElemType e)
{ ElemType * newbase, * q, * p;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{ newbase=(ElemType * )realloc(L.elem,(L.listsize+LISTINCREMENT) * sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
* (p+1)= * p;
* q= e;
++L.length;
return OK;
}
//
Status ListTraverse(SqList L,void( * vi)(ElemType * ))
{ ElemType * p;
int i;
p=L.elem;
for(i=1;i<=L.length;i++)
{ if(i!=1)
printf(" %d", * p++);
else vi(p++);
}
printf("\n");
return OK;
}
//
int ListLength(SqList L)
{ return L.length;}
//
Status GetElem(SqList L,int i,ElemType &e)
{ if(i<1||i>L.length)
exit(ERROR);
e= * (L.elem+i-1);
return OK;
}
//
void print(ElemType * c)
{ printf("%d", * c);}
//
void MergeList(SqList La,SqList Lb,SqList &Lc)
{ int i=1,j=1,k=0;
int La_len,Lb_len;
ElemType ai, bj;
InitList(Lc);
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while((i<=La_len) && (j<=Lb_len))
{ GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
{ ListInsert(Lc,++k,ai);
++i;
}
else
{ ListInsert(Lc,++k,bj);
++j;
}
}
while(i<=La_len)
{ GetElem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
while(j<=Lb_len)
{ GetElem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}
}
int main()
{ int a[4]={3,5,8,11},b[7]={2,6,8,9,11,15,20},j;
SqList La,Lb,Lc;
InitList(La);
for(j=1;j<=4;j++)
ListInsert(La,j,a[j-1]);
printf("La= ");
ListTraverse(La,print);
InitList(Lb);
for(j=1;j<=7;j++)
ListInsert(Lb,j,b[j-1]);
printf("Lb= ");
ListTraverse(Lb,print);
MergeList(La,Lb,Lc);
printf("Lc= ");
ListTraverse(Lc,print);
return 0;
}追问

运行时很多错误!

大神帮我呀!

追答

你用VC++来运行就没问题,因为程序里用的C++特有的引用(&),你们老师没讲?

追问

我用的就是vc++6.0

我现在大二,大一学的不是计算机专业,我转专业的。才学了1个月!没听老师说过!

追答

那是因为你创建的是.c程序,不是.cpp程序,你只要创建一个win32 console application的工程,在里面把代码添加进去就可以了

追问

你试过了吗?

谢大神呀!

我遍历打印哪一块不是太懂,可以给我讲讲么?

本回答被提问者和网友采纳
相似回答