一、顺序表存储结构
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
typedef struct{
ElemType elem[SIZE];
int length;
}SqList;
ElemType elem[SIZE];
int length;
二、顺序表的基本操作
- 构造一个空的顺序表。
Status InitList(SqList &L)
{
L.elem = (ElemType*)malloc(SIZE*sizeof(ElemType));
if(!L.elem)
return FALSE;
L.length = 0;
L.listsize = SIZE;
return TRUE;
}
- 在顺序表在第i个位置前插入元素e。
Status ListInsert(SqList &L, int i, ElemType e)
{
if(i>L.length+1 && i<1)
return FALSE;
if(L.length>=L.listsize)
return FALSE;
ElemType *p, *q;
p = L.elem+(i-1);
for(q = L.elem+L.length-1; q>=p; q--)
*(q+1)= *q;
L.length++;
*p = e;
return TRUE;
}
- 删除顺序表第i个元素。
Status ListDelete(SqList &L, int i, ElemType &e)
{
if(i<0&&i>L.length)
return FALSE;
ElemType *p, *q;
p = L.elem + (i-1);
q = L.elem + (L.length-1);
e = *p;
for(p; p<q; p++)
*p = *(p+1);
L.length--;
return TRUE;
}
- 将两个有序的顺序表合并
Status MergeList(SqList La, SqList Lb, SqList &Lc)
{
ElemType *pa, *pb, *pc;
Lc.listsize = Lc.length = La.length+Lb.length;
pc = Lc.elem = (ElemType*)malloc(Lc.listsize*sizeof(ElemType));
if(!Lc.elem)
return FALSE;
pa = La.elem;
pb = Lb.elem;
while(pa<=La.elem+La.length-1 && pb<=Lb.elem+Lb.length-1)
{
if(*pa<=*pb)
*pc++ = *pa++;
else
*pc++ = *pb++;
}
while(pa<=La.elem+La.length-1)
*pc++ = *pa++;
while(pb<=Lb.elem+Lb.length-1)
*pc++ = *pb++;
return TRUE;
}