数据结构学习笔记--静态链表

  • 静态链表为结构体数组构成
#define EXCEPTION 50
typedef struct StaticList
{
  int val;
  int cur;
}StaticLinklist[EXCEPTION];
  • 创建一个空静态链表
    其中,NUM[0].cur指向的是还未存放数据的下一个空闲域.
    NUM[MAXSIZE-1].cur中存放头结点
    而最后一个非空结点的cur为0,像链表中的NULL.

void StaticList_Init(StaticList* L)
{
  int i;
  for(i=0;i<MAXSIZE-1;i++)
  {
    NUM[i].cur = i+1;//使链表的顺序存储空间中,cur依次指向下一空间.
  }
  NUM[EXCEPTION-1] = 0;
}
void main()
{
  StaticListlist NUM;//创建了一个NUM[100]的数组
  StaticList_Init(NUM);
}
//NUM[x]中val存放数据,cur充当指针指向下一个域

链表的初始化.
在这里插入图片描述

------取自大话数据结构

  • 链表的插入

静态链表并非就整整齐齐的排放,其实他可以很乱,就像这样
在这里插入图片描述

==实际上通过NUM[999]处的cur充当头结点来对链表进行遍历

int malloc_StaticList(StaticList *L)//获取空闲域
{
  int i;
  i=L[0].cur;
  L[0].cur = L[i].cur; //即将用到空闲结点,将NUM[0].cur指向该空闲结点的下一个空闲结点
  return i;
}

void Insert_StaticList(StaticList *L,int n,int e)//n为第几个元素前插入,e为插入的数据
{
    int j,k,l;
    k = MAXSIZE-1;
    l = malloc_StaticList(L);
    for(j=0;j<n;j++)//该代码抽出来单独理解
    {
      k = L[k].cur;
    }
    L[l].val = e;
    L[l].cur = L[k].cur;
    L[k].cur = l;
}

//单独解释
for(j=0;j<n;j++)
{
k = L[k].cur;
}
//实质上是通过头结点遍历静态链表
如前面的图999->1->2->7->3…


==链表的删除
1.找到删除的结点的上一结点,记做 S
2.S的下一结点为要删除的结点,将S的cur赋值为下一结点的cur;
3.删除下一结点的数据

void free_List(StaticList *L,int i)//L[0]指向被释放的结点,该结点又指向原先L指向的空闲结点.
{
	L[i].cur = L[0].cur;
	L[0].cur = i;
}

void Delete_StaticList(StaticList* L,int i)//i为需要删除的第几个数据域
{
	int j, k;
	k = MAXSIZE-1;
	for (j = 1; j < i; j++)//k为删除结点的上一数据域
	{
		k = L[k].cur;
	}
	j = L[k].cur;
	L[k].cur = L[j].cur;
	free_List(L, j);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值