数据结构 第三季(part 3)

//静态链表:用数组描述的链表叫静态链表 
//数组的每个下标都对应着一个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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值