静态链表1

链表中结点空间的分配和释放由malloc函数和free函数动态实现,故称之为动态链表。

静态链表的定义(区分)

顺序存储结构模拟链表,即将逻辑结构上相邻的数据元素,存储在指定的一块内存空间中。

区别一:数据元素只允许在这块内存空间中随机存放

区别二:每个结点含有两个域,一个是存放结点的数据域,另一个是存放后继结点在结构数组中的相对位置的游标(即数组下标值)

区别三:静态链表需要对数组的第一个和最后一个元素作为特殊元素处理,不存数据。通常把未被使用的数组元素称为备用链表。而数组第一个元素,即下标为0的元素的cursor就存放备用链表的第一个结点的下标;而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点作用,当整个链表为空时,则为0。
 

静态链表的存储结构

数据域的类型是char字符串类型,游标域的类型是int类型

typedef char ElemType;
typedef struct
{
	ElemType data;
	int cursor;
 } Component,StaticList[MAXSIZE];

初始化


 

静态链表的初始化:将静态单链表初始化为一个备用的静态单链表,设s为静态单链表存储空间的首地址,av为备用静态单链表的头指针

//初始化
void primary(StaticList s,int *av)
{
  int k;
  s[0].cursor=-1;//s[0]相当于头结点
  for(k=1;k<MAXSIZE-1;k++)
  s[k].cursor=k+1;
  s[MAXSIZE-1].cursor=-1;//把链连在一起 
  *av=1; //设置备用静态单链表的头指针初值 
  printf("初始化成功!");   	
} 

 分配结点空间

对系统而言,分配结点空间相当于在该链表中减少一个结点,对使用者而言则相当于申请了一个可用的新结点

//分配结点空间
int getnode(StaticList s,int *av)
{
	int i;
	i=*av;
	*av=s[*av].cursor;
	return i;
}

回收结点空间

对系统而言,回收空闲结点相当于在该链表中增加一个结点,对使用者而言相当于释放了一个不用的结点

//回收结点空间
void freenode(StaticList s,int *av,int k)
{
	s[k].cursor=*av;
	*av=k;
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值