您的位置:首页 > 理论基础 > 数据结构算法

数据结构 第三季(part 3)

2014-05-05 13:45 344 查看
//静态链表:用数组描述的链表叫静态链表
//数组的每个下标都对应着一个data和一个cur,data用来存放数据元素,游标相当于链表中的next指针

//线性表的静态链表的存储结构
#define MAXSIZE 100
typedef struct{
ElemType data;
int cur;//游标,为0时表示无指向
}Component,StaticLinkList(MAXSIZE);

//将一维数组space中各分量链成一备用链表
//space[0].cur为头指针,"0"表示空指针

Status InitList(StaticLinkList space){//初始化静态链表
int i;
for(i=0;i<MAXSIZE-1;i++)
space[i].cur = i+1;
space[MAXSIZE-1] = 0;
return OK;
}

int Malloc_SLL(StaticLinkList space){//获得空闲结点的下标
int i = space[0].cur;//当前数组第一个元素的cur存的值,就是要返回的第一个备用空闲的下标
if(space[0].cur)
space[0].cur = space[i].cur;
return i;
}

Status ListInsert(StaticLinkList L,int i,ElemType e){//在L中的第i个元素之前插入元素e
int j,k,l;
k = MAXSIZE-1;
if ( i < 1 || i > ListLength(L) + 1)
return ERROR;
j = Malloc_SSL(L);//
if( j ){
L[j].data = e;
for(l=1;l<i-1;i++)
k = L[k].cur;//找到第i个元素
L[j].cur = L[k].cur;//先确定新加入元素的下一个元素是什么
L[k].cur = j;//确认新加入元素的位置
return OK;
}
return ERROR;
}

Status ListDelete(StaticLinkList L,int i){//删除第i个元素
int j,k;
if(i<1||i>ListLength(L))
return ERROR;
k = MAXSIZE - 1;
for(j=1;j<=i-1;j++)
k = L[k].cur;
j = L[k].cur;
L[k].cur = L[j].cur;
Free_SLL(L,j);
return OK;
}

void Free_SLL(StaticLinkList space,int k){
space[k].cur =space[0].cur;
space[0].cur = k;
}

int ListLength(StaticLinkList L){//返回静态链表的长度
int j =0;
int i = L[MAXSIZE-1].cur;
while(i){
i = L[i].cur;
j++
}
return j;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息