数据结构C语言实现
顺序表 包括建立,插入,删除,合并等
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -1
typedef struct
{
int *elem;
int length;
int listsize;
}SqList;
int InitSqlist(SqList *L)
{
(*L).elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!(*L).elem)
return OVERFLOW;
(*L).length=0;
(*L).listsize=LIST_INIT_SIZE;
return OK;
}
int InsertSqlist(SqList *L,int i,int e)
{
int *newbase,*q,*p;
if(i<1||i>((*L).length+1))
{
printf("插入位置不合法");
return ERROR;
}
if((*L).length>=(*L).listsize)
{
newbase=(int*)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
return ERROR;
(*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;
}
int GetElem(SqList L,int i,int *e)
{
if(i<1||i>L.length)
{ printf("输入位置不合法!\n");
return ERROR;
}
*e=L.elem[i-1];
printf("第%d个元素为%d\n",i,*e);
}
int DeleteSqlist(SqList *L,int i,int *e)
{
int *q,*p;
if(i<1||i>(*L).length)
{
printf("删除位置不合法!\n");
return ERROR;
}
q=(*L).elem+i-1;
p=(*L).elem+(*L).length-1;
for(++q;q<=p;q++)
*(q-1)=*q;
--(*L).length;
}
void TraversSqlist(SqList L)
{
int len;
int *q;
int i;
len=L.length;
q=L.elem;
printf("SqList=");
for(i=1;i<=len;i++)
printf("%d ",*q++);
printf("\n");
}
int MergeList(SqList La,SqList Lb,SqList *Lc)
{
int *pa,*pb,*pc,*pa_last,*pb_last;
pa=La.elem;
pb=Lb.elem;
(*Lc).listsize=(*Lc).length=La.length+Lb.length;
pc=(*Lc).elem;
*pc=(int *)malloc((*Lc).listsize*sizeof(int));
if(!pc)
return ERROR;
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++;
}
int main()
{
int n,e,i,m;
SqList L,La,Lb,Lc;
InitSqlist(&L);
InitSqlist(&Lc);
InitSqlist(&Lb);
prin