包括结构体,初始化,插入,删除,查找功能。
#include<stdio.h>
#include<malloc.h>
#define INIT_SIZE 10
#define INCREASESIZE 10
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
void Init(SqList *L){
L->elem = (ElemType *) malloc(INIT_SIZE*sizeof(ElemType));
if(!L->elem)
return ;
L->length = 0;
L->listsize = INIT_SIZE;
}
void InsertElem(SqList *L, int i, ElemType e){
if(i<1 || i>L->length+1)
return ;
if(L->length >= L->listsize){
ElemType *newbase = (ElemType *) realloc(L->elem,(INIT_SIZE+INCREASESIZE)*sizeof(ElemType));
if(!newbase)
return ;
L->elem = newbase;
L->listsize += INCREASESIZE;
}
ElemType *p = &(L->elem[i-1]);
ElemType *q;
for(q=&(L->elem[L->length-1]); q>=p; --q){
*(q+1) = *q;
}
*p = e;
L->length++;
}
void DeleteElem(SqList *L, int i, ElemType *e){
if(i<1 || i>L->length)
return ;
*e = L->elem[i-1];
ElemType *p = &(L->elem[i-1]);
ElemType *q;
for(q=p; q<=&(L->elem[L->length-1]); ++q){
*q = *(q+1);
}
L->length--;
}
int compare(ElemType a, ElemType b){
if(a == b)
return 1;
else
return 0;
}
int LocateElem(SqList *L,ElemType e, int(* compare)(ElemType, ElemType)){
ElemType *base = L->elem;
int i=1;
while(i <= L->length && !(*compare)(*base++,e))
++i;
if(i<= L->length)
return i;
else
return 0;
}
void print(SqList *L){
int i;
for(i=0; i< L->length; ++i){
printf("%3d",L->elem[i]);
}
printf("\n");
}
int main(){
SqList L;
Init(&L);
InsertElem(&L,1,4);
InsertElem(&L,2,2);
print(&L);
int m;
m = LocateElem(&L,4,compare);
printf("%d\n",m);
ElemType e;
DeleteElem(&L,1,&e);
print(&L);
return 0;
}
顺序表合并
#include"./sequence_list.c"
void merge(SqList *L, SqList *R, SqList *S){
S->length = S->listsize = L->length + R->length;
S->elem = (ElemType *)malloc(S->length*sizeof(ElemType));
ElemType *l,*r,*s;
l = L->elem, r = R->elem, s = S->elem;
ElemType * ll, * rr;
ll = L->elem + L->length -1;
rr = R->elem + R->length -1;
while(l <= ll && r <= rr){
if(*l < *r)
*s++ = *l++;
else *s++ = *r++;
}
while(l <= ll)
*s++ = *l++;
while(l <= ll)
*s++ = *r++;
}
int main(){
SqList L,R,S;
merge(&L,&R,&S);
print(&S);
return 0;
}