吃透静态链表

学习了数据结构后,最初认识的是顺序表和单链表,那么什么是静态链表呢?机智的避开了顺序表和单链表的缺点,静态链表就此诞生了。用顺序表来模拟单链表,它在插入,删除数据时不用移动数据,而且可以用一维数组来进行描述,这就有效的屏蔽了单链表存储内存分片的问题。

如上图所示为静态链表的示意图,其中静态链表包括有效链(数据域中存储的有有效数据)和空闲链(地址内没有有效数据)两个带头结点的链表。0下标是有效链的头结点,1下标是空闲链的头结点。

需要注意的是:静态链表的next域中保存的是下一个结点的下标。

所以在定义结点时需按如下格式写:

typedef struct SNode
{
  char name[10];//定义了十个格子的数组
  int next;//后继指针,保存下一个结点的下标。next 的类型必须是int.
}SNode,*SList;

下面就来展现单链表所具有的独特魅力,插入数据。首先需要将空闲链中除了头结点外的第一个结点剔除,给其赋值后插入头插到有效链中。如此便可实现时间复杂度为o(1)的大作。

bool Insert_begin(SList plist,int val)
{
   if(IsFull(plist))//判满
   {
     return false;
   }
   int p=plist[1].next;//找到空闲结点
   plist[1].next=plist[p].next;//将结点从空闲链中剔除
   plist[p].data=val;//将数据放到p中
   //将p插入到有效链中
   plist[p].next=plist[0].next;
   plist[0].next=p;
   return true;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值