注:此代码还没有完全完善,也不太想去完善了,等以后要用的时候再完善吧
#ifndef STATICLIST_H
#define STATICLIST_H
#include <iostream>
using namespace std;
const int maxSize = 100; //静态链表大小
template<class T>
struct SLinkNode
{
T data; //结点数据
int link; //结点链接指针
};
template<class T>
class StaticList
{
public:
void InitList(); //静态链表空间的初始化
int Length(); //计算静态链表的长度
int Search(T x); //在静态链表中查找具有给定值的结点
int Locate(int i); //在静态链表查找第i个结点
bool Append(T x); //在静态链表的表尾追加一个新结点
bool Insert(int i,T x); //在静态链表第i个结点后插入新结点
bool Remove(int i); //在静态链表中释放第i个结点
bool IsEmpty(); //判断链表空否
private:
SLinkNode<T> elem[maxSize];
int avil; //当前可分配窨首地址
};
template<class T>
void StaticList<T>::InitList()
{
elem[0].link = -1;
avil = 1;
//当前可分配空间从开始建立带表头结点的空链表
for(int i = 1;i < maxSize - 1;++i)
elem[i].link = i+1; //构成空闲链接表
elem[maxSize-1].link = -1; //链表收尾
}
template<class T>
int StaticList<T>::Length()
{
int p = elem[0].link;
int count = 0;
while(p != -1)
{
++count;
p = elem[p].link;
}
return count;
}
template<class T>
bool StaticList<T>::IsEmpty()
{
if(elem[0].link == -1)
return true;
else
return false;
}
template<class T>
int StaticList<T>::Search(T x)
{
int p = elem[0].link;
while (p != -1)
{
if(elem[p].data == x)
break;
else
p = elem[p].link;
}
return p;
}
template<class T>
int StaticList<T>::Locate(int i)
{
if(i < 0)
return -1;
if(i == 0)
return 0;
int j = 1,p = elem[0].link;
while (p != -1 && j < i)
{
++j;
p = elem[p].link;
}
return p;
}
template<class T>
bool StaticList<T>::Append(T x)
{
if(avil == -1)
return false;
int q = avil; //分配结点
avil = elem[avil].link;
elem[q].data = x;
elem[q].link = -1;
int p = 0; //查找表尾
while(elem[p].link != -1)
p = elem[p].link;
elem[p].link = q;
return true;
}
template<class T>
bool StaticList<T>::Insert(int i,T x)
{
int p = Locate(i);
if(p == -1)
return false;
int q = avil; //分配结点
avil = elem[avil].link;
elem[q].data = x;
elem[q].link = elem[p].link;
elem[p].link = q;
return true;
}
template<class T>
bool StaticList<T>::Remove(int i)
{
int p = Locate(i-1);
if(p == -1)
return false;
int q = elem[p].link; //第i号结点
elem[p].link = elem[q].link;
elem[q].link = avil;
avil = q;
return true;
}
#endif