顺序表: 逻辑结构与物理结构相符,一组地址连续的存储单元存储元素,顺序存储
链表: 链式存储,由节点组成, 节点包含数据域,指针域, 数据域存储数据,指针域 指向下一个节点
顺序表实现
#define INIT_SIZE 100
#define INCREM 10
#define ok 1
#define ERROR 0
typedef struct Sqlist
{
ElemType * slist;
int length;
int listsize;
}Sqlist;
int InitList_sq(Sqlist *L){
L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
L->length=0;
L->listsize= INIT_SIZE;
}
int ListInsert_sq(Sqlist *L, int i,ElemType e)
{
int k;
if(i<1||i>L->length+1) return ERROR;
if(L->length >= L->listsize){
L->slist=(ElemType*)realloc(L->slist,(L->listsize+ICREM)*sizeof(ElemType));
if(!L->slist) return ERROR;
L->listsize+=INCREM;
}
for(k=L->length-1;k>=i-1;k--)
L->slist[k+1] = L->slist[k];
L->slist[i-1] =e;
L->length++;
return ok;
}
int ListDelete_sq(Sqlist *L , int i, ElemType *e)
{
int j;
if(i<1||L->length) return ERROR;
*e =L->slist[i-1]; /*e带回删除元素的值*/
for(j=1;j<L->length;j++)
L->slist[j-1] = L->slist[j];
L->length--;
return ok;
}
int ListLocate_sq(Sqlist *L,ElemType e , int *pos)
{
ElemType *end = L->slist+L->length;
ElemType *p = L->slist;
int i;
for(i=1;p<end;p++){
if(*p==e){
*pos = i;
break;
}
i++;
}
if(p>=end)
return ERROR;
else
return ok;
}
链表实现
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode,*LinkList;
//带头节点
void InitList(LinkList* H)
{
LNode * head;
head=(LNode*)malloc(sizeof(LNode));
if(!head) return ERROR;
head->next=NULL;
*H=head;
}
int InsertList(LinkList H, int i , ElemType e)
{
LNode *p=H,*s;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p || j > i-1) return ERROR;
s = (LNode *)malloc(sizeof(LNode));
if(!s) return ERROR;
s->data = e;
s->next = p->next;
p->next = s ;
return ok;
}
int DeleteList(LinkList H , int i,ElemType *e)
{
LNode *p=H,*s;
int j =0;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1||!p->next) return ERROR;
s=p->next;
p->next =s->next;
*e= s->data;
free(s);
return ok;
}
// 线性表的查找
int GetList(LinkList H,int i, ElemType *e)
{
LNode *p;
int j=1;
p=H->next;
while(p&&j<i){
p=p->next;
j++;
}
if(!p||j>i) return ERROR;
*e=p->data;
return ok;
}