线性表的顺序表示和实现

#include
#include
#include
#define OK 1
#define OVERFLOW -2
#define LIST_INTI_SIZE 100 //线性表的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef int ElemType;
typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量
}Sqlist;//p22
int InitList_Sq(Sqlist &L)
{ L.elem=(ElemType*)malloc(100*sizeof(ElemType));
if(!L.elem)exit(-2);
L.length=0;
L.listsize=LIST_INTI_SIZE;
return OK;}//InitList_Sq 算法2.3 p23
void Print_List(Sqlist La)
{ int i;
for(i=0;iprintf("%d ",La.elem[i]);
printf("\n"); }
void MergeList_Sq(Sqlist La, Sqlist Lb, Sqlist &Lc)
{
//已知线性表La和Lb中的数据元素按值非递减排列
ElemType *pa, *pb, *pc, *pa_last, *pb_last;
pa = La.elem;
pb = Lb.elem;
Lc.listsize = Lc.length = La.length + Lb.length;
pc = Lc.elem = (ElemType *) malloc(Lc.listsize * sizeof(ElemType));
if(!Lc.elem) exit(OVERFLOW); //存储空间失败
pa_last = La.elem + La.length - 1;
pb_last = Lb.elem + Lb.length - 1;
while(pa <= pa_last && pb <= pb_last)
{
if( *pa <= *pb) *pc++ = *pa++;
else *pc++ = *pb++;
}
while(pa<=pa_last) *pc++ = *pa++;
while(pb<=pb_last) *pc++ = *pb++;
} //MergeList_Sq 算法2.7 p26
void main()
{
Sqlist La,Lb,Lc;
int i;
InitList_Sq(La);
InitList_Sq(Lb);
for(i=0;i<10;i++)
{
scanf("%d",&La.elem[i]);
La.length++;
}
for(i=0;i<10;i++)
{
scanf("%d",&Lb.elem[i]);
Lb.length++;
}
MergeList_Sq(La,Lb,Lc);
printf("\n顺序表La\n");
Print_List( La);
printf("\n顺序表Lb\n");
Print_List( Lb);
printf("\n顺序表Lc\n");
Print_List( Lc);
}


相关文档
最新文档