静态链表

用数组来描述一个链表

链表的大小是固定的

不能动态申请内存空间

数组首元素的游标指向第一个没有数据的下标地址,不存放数据

数组尾元素的游标指向第一个有数据的下标地址,不存放数据

未使用的数组称为备用链表

数组尾元素相当于头结点

最后一个有数据的元素游标为0

 

#include<iostream>
using namespace std;

const int size = 1000;

//静态链表的数据结构
typedef struct Node
{
	ElementType data;
	int cur;
}staticLink[size];

//初始化静态链表
void initiate(staticLink L)
{
	L[0].cur = size - 1;
	for (int i = 1; i < size - 1; i++)
		L[i].cur = i + 1;
	L[size - 1].cur = 0;
}

//获取备用链表元素位置
int Malloc_SLL(staticLink L)
{
	int i = L[0].cur;
	if (i)
	{
		L[0].cur = L[i].cur;
	}
	return i;
}

//静态链表的插入操作
void insert(int i, staticLink L, ElementType e)
{
	int k = size-1;//尾节点的位置
	int pos = Malloc_SLL(L);//备用链表位置
	int j;

	if (i<1 || i>Listlength(L) + 1)
	{
		return ERROR;
	}
	if (pos)
	{
		L[pos].data = e;
		for (j = 1; j <= i - 1; j++)
			k = L[k].cur;
	}
	L[pos].cur = L[k].cur;
	L[k].cur = pos;
	return OK;
}

//静态链表删除元素
void Delete(int i, staticLink L)
{
	if (i<1 || i>ListLength(L) + 1)
		return ERROR;
	int pos = size-1;
	for (int j = 1; j <= i - 1; j++)
		pos = L[pos].cur;
	L[pos].cur = L[L[pos].cur].cur;
}

//按值查找
void Search1(staticLink L, ElementType e)
{
	int pos = L[size - 1].cur;
	while ((pos > 0) && (pos < size - 1) && L[pos].data != e)
	{
		pos = L[pos].cur;
	}
	cout << pos << endl;
}

//按位查找,该位置是游标的位置,而不是下标的位置
void Search2(staticLink L, int pos)
{
	int k = size-1;
	for (int i = 1; i < pos; i++)
		k = L[k].cur;
	cout << L[L[k].cur].data << endl;
}

  

原文地址:https://www.cnblogs.com/KennyRom/p/5895404.html