第一节 线性表

一.线性表

线性表分为1.顺序线性表2.链式线性表(可包括1.循环链表2.双向链表)

下面以代码实现:

1.顺序线性表

//----线性表的动态分配顺序储存结构

#define LIST_INIT_SIZE 100 //线性表储存空间的初始分配量

#define LISTINCREMENT 10 //线性表储存空间的分配增量

type struct {

Elemtype *elem;  //储存空间基地址

int length; //当前长度

int listsize; //当前分配的储存容量(以sizeof(Elemtype)为单位)

}Sqlist;

//----构造一个顺序线性表

Status InitSqlist(Sqlist L)

{

if(!(L.elem = (Elemtype*)malloc(listsize*sizeof(Elemtype)))   exit(OVERFLOW);

L.length=0;

L.listsize=LIST_INIT_SIZE;

return ok;

}

//-----顺序线性表第i个位置中增添一个元素

Status ListInsert(Sqlist &L,int i,elemtype e)

{

if(i<1||i>length+1) return ERROR; //插入位置有误

if(L.length>=L.listsize) //线性表已满,需要增加储存空间

L.elem = (Elemtype*)realloc(L.elem,(L.listsize + LISTINCREMENT)*size of(elemtype));

if(!L.elem) return (OVERFLOW);

L.listsize + = LISTINCREMENT;

}

q=L.elem[ i-1];

for(p=L.elem[Length -1];q<=p;--p) *(p+1)=*p;// 插入位置及之后的元素后移

*q =e;

++L.length;

return ok;

}

//-----顺序线性表第i个位置中删除一个元素

Status ListDelete(Sqlist &L,int i elemtype e)

{

if((i<1)||(i>length)) return ERROR;

q=L.elem[ i-1];

e=*p;

for(p=L.elem[Length -1];q<=p;--p) *(p-1)=*p;// 插入位置及之后的元素后移

*q =e;

--L.length;

return OK;

}

2.链式线性表

//----线性表法的单链表储存结构----

typedef struct LNode

{

elemtype data;

struct LNode* next;

}LNode,*LinkList;

//----GetElem函数----

Status GetElem(LinkList L,int i,Elemtype e)

{

p=L->next; j=1;

while(p&&j<i)

{

p=p->next,++j;

}

if(!p||j>i) return ERROR;

e=p->data;

return OK;

}

//链式线性表的增添元素

Staus ListInsert(Linklist L,int i,elemtype e)

{

p=L,j=0;

while(p&&j<i-1)

{

p=p->next;

j++;

}

if(!p||j>i-1) return ERROR;

s=(LinkList)malloc(sizeof(Lnode));

s->data=e;

s->next =p->next;

p->next =s;

return ok;

}

//链式线性表的删除元素

 Staus ListDelete(LinkList L, int i,elemtype e )

{

p=L,j=0;

while(p->next&&j<i-1)

{

p=p->next;

j++;

}

if(!(p->next)||j>i-1) return ERROR;

e=p->data;

q=p->next;

p->next=q->next;//后面补给前面的

free(q);

return ok;

}

上一篇:顺序表 数据调整


下一篇:25、静态查找表(顺序表、索引顺序表、静态树表、折半查找)