#include <iostream.h>
#include <stdlib.h>
#define LISTINITSIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
Status InitList(SqList &L);
Status DestroyList(SqList &L);
Status ClearList(SqList &L);
Status ListEmpty(SqList L);
int ListLength(SqList L);
Status GetElem(SqList L,int i,ElemType &e);
int LocateElem(SqList L,ElemType e);
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e);
Status NextElem(SqList L,ElemType cur_e,ElemType &next_e);
Status ListInsert(SqList &L,int i,ElemType e);
Status ListDelete(SqList &L,int i,ElemType &e);
Status ListTraverse(SqList L);
void MergeList(SqList La,SqList Lb,SqList &Lc);
int main()
{
Status s;
SqList La,Lb,Lc;
InitList(La);
InitList(Lb);
s=ListInsert(La,1,3);
s=ListInsert(La,2,5);
s=ListInsert(La,3,8);
s=ListInsert(La,4,11);
s=ListInsert(Lb,1,2);
s=ListInsert(Lb,2,6);
s=ListInsert(Lb,3,8);
s=ListInsert(Lb,4,9);
s=ListInsert(Lb,5,11);
s=ListInsert(Lb,6,15);
s=ListInsert(Lb,7,20);
MergeList(La,Lb,Lc);
s=ListTraverse(La);
s=ListTraverse(Lb);
s=ListTraverse(Lc);
return 0;
}
Status InitList(SqList &L)
{
L.elem=(ElemType*)malloc(LISTINITSIZE*sizeof(ElemType));
if(!L.elem)
exit(-1);
L.length=0;
L.listsize=LISTINITSIZE;
return TRUE;
}
Status DestroyList(SqList &L)
{
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
return TRUE;
}
Status ClearList(SqList &L)
{
L.length=0;
return TRUE;
}
Status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
int ListLength(SqList L)
{
return L.length;
}
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<=0 || i>L.length)
return FALSE;
e=*(L.elem+i-1);
return TRUE;
}
int LocateElem(SqList L,ElemType e)
{
int i=1;
ElemType *p=L.elem;
while(i<=L.length && *p!=e)
{
i++;
p++;
}
if(i<=L.length)
return i;
else
return 0;
}
Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)
{
int i=2;
ElemType *p=L.elem+1;
while(i<=L.length && *p!=cur_e)
{
i++;
p++;
}
if(i>L.length)
return FALSE;
else
{
p--;
pre_e=*p;
return TRUE;
}
}
Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)
{
int i=1;
ElemType *p=L.elem;
while(i<L.length && *p!=cur_e)
{
i++;
p++;
}
if(i==L.length)
return FALSE;
else
{
p++;
next_e=*p;
return TRUE;
}
}
Status ListInsert(SqList &L,int i,ElemType e)
{
ElemType *p,*q,*newelem;
if(i<1 || i>L.length+1)
return FALSE;
if(L.length>=L.listsize)
{
newelem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newelem)
exit(-1);
L.elem=newelem;
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 TRUE;
}
Status ListDelete(SqList &L,int i,ElemType &e)
{
ElemType *p,*q;
if(i<1 || i>L.length )
return FALSE;
q=L.elem+i-1;
e=*q;
for(p=q+1;p<=L.elem+L.length-1;p++)
*(p-1)=*p;
L.length--;
return TRUE;
}
Status ListTraverse(SqList L)
{
ElemType *p;
for(p=L.elem;p<=L.elem+L.length-1;p++)
cout<<*p<<" ";
cout<<endl;
return TRUE;
}
void MergeList(SqList La,SqList Lb,SqList &Lc)
{
int i,j,k;
int Lalen,Lblen;
ElemType ai,bj;
InitList(Lc);
i=j=k=1;
Lalen=ListLength(La);
Lblen=ListLength(Lb);
while(i<=Lalen && j<=Lblen)
{
GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
{
ListInsert(Lc,k,ai);
k++;
i++;
}
else
{
ListInsert(Lc,k,bj);
k++;
j++;
}
}
while(i<=Lalen)
{
GetElem(La,i,ai);
ListInsert(Lc,k,ai);
i++;
k++;
}
while(j<=Lblen)
{
GetElem(Lb,j,bj);
ListInsert(Lc,k,bj);
j++;
k++;
}
}
评论0