标签:
用数组来描述一个链表
链表的大小是固定的
不能动态申请内存空间


数组首元素的游标指向第一个没有数据的下标地址,不存放数据
数组尾元素的游标指向第一个有数据的下标地址,不存放数据
未使用的数组称为备用链表
数组尾元素相当于头结点
最后一个有数据的元素游标为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;
}
标签:
原文地址:http://www.cnblogs.com/KennyRom/p/5895404.html