数据结构 -- 静态链表代码实现(总结)

静态链表是利用数组代替指针来描述单链表,数组的每一个元素都由两个数据域组成,datacurdata用来存放数据,cur用来存放下一个元素的在数组中的下标,cur也被称作游标。

此外整个链表也被逻辑划分为两个部分:已使用链表备用链表,我们对数组的首元素和尾元素进行特殊处理,不存数据。首元素cur中存放备用链表第一个元素的下标;而尾元素cur中存放已使用链表的第一个元素的下标,当尾元素cur为0时说明链表为空。

当链表有存储数据时,已使用链表中的最后一个元素的cur为0。
在这里插入图片描述

特点

  1. 静态链表利用游标来索引到下一个元素,每次删除和添加元素时只需要修改cur值,不需要移动元素。改进了顺序存储结构每次添加和删除都需要移动大量元素的缺点。
  2. 静态链表没有解决连续存储分配带来表长难以确定的问题。失去链式存储结构随机存储的特性。

代码实现

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>


#define OK 1       // 状态返回值
#define ERROR 0    // 状态返回值
#define FALSE 0    // 状态返回值
#define TRUE       // 状态返回值
#define MAXSIZE 1000   // 数组最大容量

typedef int ElemType;   // 数据元素类型
typedef int Status;     // 函数操作状态返回类型

// 定义静态链表结构
typedef struct StaticList {
   
	ElemType data;    // 数据域
	int cur;          // 游标
}component, StaticList[MAXSIZE];


// 初始化
Status InitList(StaticList SL)
{
   
	int j = 0;
	for (j = 0; j < MAXSIZE - 1; j++)
	{
   
		SL[j].cur = j + 1;               // 初始化,使每个元素的`cur`都存放下一个元素的下标
	}
	SL[MAXSIZE - 1].cur = 0;             // 最后一个元素的`cur`初始化为0
	return OK;
}

// 获取表长
int Listlength(const StaticList SL)
{
   

	int k = SL[MAXSIZE - 1].cur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值