顺序表的实现
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 20
#define OVERFLOW -2
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
void InitList_Sq(SqList &L)
{
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
{
exit(OVERFLOW);
}
L.length=0;
L.listsize=LIST_INIT_SIZE;
}
Status InsertList_Sq(SqList &L,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>L.length+1)
return ERROR;
if(L.listsize==L.length)
{
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
L.elem=newbase;
L.listsize=L.listsize+LISTINCREMENT;
}
q=L.elem+i-1;
p=L.elem+L.length-1;
for(p;p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
L.length++;
return OK;
}
Status DeleteList_Sq(SqList &L,int i ,ElemType &e)
{
ElemType *p,*q;
if(i<1||i>L.length)
{
return ERROR;
}
q=L.elem+i-1;
p=L.elem+L.length-1;
for(q;q<p;q++)
{
*(q)=*(q+1);
}
L.length--;
return OK;
}
int LocateElem_Sq(SqList L,ElemType e)
{
for(int i=1;i<=L.length;i++)
{
if(e==*(L.elem+i-1))
{
return i;
}
}
return 0;
}
void MergeList_Sq(SqList La,SqList Lb,SqList &Lc)
{
ElemType *pa,*pb,*pc,*pa_last,*pb_last;
pc=Lc.elem=(ElemType *)malloc((La.length+Lb.length)*sizeof(ElemType));
if(!Lc.elem)
exit(OVERFLOW);
Lc.listsize=Lc.length=La.length+Lb.length;
pa=La.elem;
pb=Lb.elem;
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++;
}
}
Status GetElem_Sq(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length)
{
return ERROR;
}
e=*(L.elem+i-1);
return OK;
}
void Print(SqList L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%d ",*(L.elem+i));
}
}
int main()
{
int i;
ElemType e,f;
SqList L1,L2,L3;
InitList_Sq(L1);
for(i=1;i<=5;i++)
{
InsertList_Sq(L1,i,i);
}
printf("L1:");
Print(L1);
printf("\n");
InitList_Sq(L2);
for(i=1;i<=5;i++)
{
InsertList_Sq(L2,i,i*2);
}
printf("L2:");
Print(L2);
MergeList_Sq(L1,L2,L3);
printf("\n合并L1,L2->L3:");
Print(L3);
DeleteList_Sq(L3,10,e) ;
printf("\n删除末L3尾元素:");
Print(L3);
GetElem_Sq(L3,3,f);
printf("\n第三个元素是:%d",f);
return 0;
}