线性表Part2--静态、循环、双向链表(C语言描述)

本文探讨了静态链表、循环链表和双向链表的实现与特性。静态链表利用数组描述链表,避免了元素移动,但无法解决存储分配问题。循环链表通过头尾相连改善了单链表的查找条件。双向链表则增加了对前驱结点的访问,提高了插入删除效率。这些链表结构各有优缺点,适用于不同的场景。
摘要由CSDN通过智能技术生成

此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢!


一、静态链表(Static Linked List):

  • 静态链表(Static Linked List):用数组代替指针描述的链表,也称游标实现法。

Each element in a static linked list includes two fields:
1.“data field” for storing data;
2.“cur field”, cursor, for storing the next element’s index, having the same function as the “p->next” above.
静态链表的数组的元素由两个数据域组成:data(数据域)及cur(游标域)。其中,data存放数据元素,cur相当于单链表中的next指针,存放当前元素的后继在数组中的下标。

(为了方便插入数据,我们通常会把数组建立得大一些,可以便于插入时不至于溢出)

#define OK 1 
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType; //ElemType的类型根据实际需求而定,此处假设为int。 
typedef int Status;	/*"Status" is defined as a type of a function, with its returned value representing the result of the function.
					(Status是函数的类型,它的返回值势函数结果状态代码,0或1.)*/ 
					
#define MAXSIZE 1000
typedef struct
{
   
	ElemType data;
	int cur; 	//cursor(游标), means non-pointing when its value is 0.
} Component, StaticLinkList[MAXSIZE];

另外,我们对数组第一个和最后一个元素作为特殊元素处理,不存储数据。我们通常把未被使用的数组元素称为备用链表(Spare List)而数组第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标;而数组最后一个元素的cur则存放第一个有数值的元素的下标,其作用相当于单链表中头结点。

在这里插入图片描述


二、静态链表部分操作具体实现:

  • 初始化静态链表:(将一维数组space中各分量链成一备用链表)
[Initialize a Static linked list.] //将一维数组space中各分量链成一备用链表

Status InitList ( StaticLinkList space )
{
   
	int i;
	for( i=0 ; i<MAXSIZE-1 ; i++ ) //"i<MAXSIZE-1"--the last element is special.
	{
   
		space[i].cur = i+1;
	} 
	space[MAXSIZE-1] = 0; 		  //Since the list is now empty, the last element's "cur" is 0.
	
	return OK;
}

  • 静态链表存储空间的分配:

(须知)
–In dynamic link lists, we can use “malloc()” and “free()” to achieve the application and release of nodes. 在动态链表中,结点的申请和释放可分别借用"malloc()"和"free()"两个函数来实现。

–In static link lists, we operate arrays. So we cannot do the same as above. We need to achieve ourselves. 在静态链表中,操作的是数组,不存在像动态链表的结点申请和释放问题,所以我们需要自己去实现,才能进行插入和删除的操作。

为了辨明数组中哪些分量未被使用,解决的办法是:将所有未被使用过的及已被删除的分量用游标链成一个备用的链表,每当进行插入时,便可以从备用链表上取得第一个结点作为待插入的新结点。

- “Malloc_SLL”&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值