线性表-静态链表

#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;
typedef int ElemType;

//线性表的静态链表的存储结构
typedef struct
{
	ElemType data;
	int cur; //游标cursor,为0时表示无指向的
}Component,SatticLinkList[MAXSIZE];


int main()
{

}

Status InitList(SatticLinkList space) {
	int i;
	for (i = 0; i < MAXSIZE-1; i++)
	{
		space[i].cur = i + 1;
	}
	space[MAXSIZE - 1].cur = 0;  //目前静态链表为空,最后一个元素从cur为0
	return OK;
}

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

	if (space[0].cur)
	{
		space[0].cur = space[i].cur; //由于要拿出一个分量来使用了,所以我们旧的把它的下一个分量用来做备用
	}
	return i;
}

Status ListInsert(SatticLinkList L, int i, ElemType e) {
	int j, k, l;
	k = MAXSIZE - 1; //注意k首先是最后一个元素的下标

	if (i<1 || i> ListLength(L)+1)
	{
		return ERROR;
	}
	j = Malloc_SLL(L); //获得空闲分量的下标

	if (j)
	{
		L[j].data = e; //将数据赋值给此分量的data

		for (l = 1; l <= i-1; l++) //找到第i个元素之前的位置
		{
			k = L[k].cur;
		}

		L[j].cur = L[k].cur; //把第i个元素之前的cur赋值给新元素的cur
		L[k].cur = j; //把新元素的下标赋值给第i个元素之前元素的cur
		return OK;
	}
	return ERROR;

}

/// <summary>
/// 返回L中数据元素的个数
/// </summary>
/// <param name="L"></param>
/// <returns></returns>
int ListLength(SatticLinkList L) {
	int j = 0;
	int i = L[MAXSIZE-1].cur;
	while (i)
	{
		i = L[i].cur;
		j++;
	}
	return j;
}

void Free_SSL(SatticLinkList space, int k) {
	space[k].cur = space[0].cur;//把第一个元素cur值赋值给要删除的分量cur
	space[0].cur = k; //把要删除的分量下标赋值给第一个元素的cur
}

//删除在L中第i个数据元素e
Status ListDelete(SatticLinkList L, int i) {
	int j, k;
	if (i<1 || i>ListLength(L))
	{
		return ERROR;
	}
	k = MAXSIZE - 1;
	for (j = 0; j < i; j++)
	{
		k = L[k].cur;
	}
	j = L[k].cur;
	L[k].cur = L[j].cur;
	Free_SSL(L, j);
	return OK;
}

参考《大话数据结构》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值