静态链表的头文件以及使用范例与说明的下载地址:
http://download.csdn.net/detail/banana_416432275/6965441
下面粘出头文件代码,欢迎交流
#include<iostream> #define Status int #define OK 1 #define ERROR 0 #define MAXSIZE 100 template<class ElemType> struct Component { ElemType data; // 数据 int cur; // 游标 }; template<class ElemType> class StaticLinkList { private: Component<int> L[MAXSIZE]; // 根据需要修改此处<>内类型可使用其他类型的静态链表 public: Status InitList(); int Malloc_SSL(); Status ListInsert (int i, ElemType e); void Free_SSL(int k); Status ListDelete (int k); int ListLength(); ElemType GetElem(int i); }; template<class ElemType> Status StaticLinkList<ElemType>::InitList() {// 初始化静态链表 int i; // 循环设置所有的游标进行初始化 for(i = 0; i < MAXSIZE-1; i++) L[i].cur = i + 1; // 目前静态链表空,最后一个元素的cur值为0 L[MAXSIZE-1].cur = 0; return OK; } template<class ElemType> int StaticLinkList<ElemType>::ListLength() {// 返回长度 int j = 0; int i = L[MAXSIZE - 1].cur; while(i) { i = L[i].cur; j++; } return j; } template<class ElemType> int StaticLinkList<ElemType>::Malloc_SSL() {// 开辟备用空间,返回分配结点的下标,失败时返回0; // 获取当前备用空间下的第一个下标 int i = L[0].cur; if (L[0].cur) {// 将已获取的备用空间的一下个空间设为当前备用空间的第一个 L[0].cur = L[i].cur; } return i; } template<class ElemType> Status StaticLinkList<ElemType>::ListInsert (int i, ElemType e) { int j, k, n; k = MAXSIZE - 1; // k是最后一个元素的下标 int length = ListLength(); if (i < 1 || i > length + 1 || length >= MAXSIZE - 2) { // 第三个条件为链表已满 return ERROR; } // 获取备用空间的下标 j = Malloc_SSL(); if(j) { L[j].data = e; // 找到第i个元素之前的位置 for (n = 1; n <= i-1; n++) { k = L[k].cur; } L[j].cur = L[k].cur; L[k].cur = j; } return ERROR; } template<class ElemType> void StaticLinkList<ElemType>::Free_SSL(int k) { // 将第一个元素cur值赋值给要删除的分量cur L[k].cur = L[0].cur; // 把要删除的分量下标赋值给第一个元素的cur L[0].cur = k; } template<class ElemType> Status StaticLinkList<ElemType>::ListDelete (int i) { int j, k; // i不合法时删除失败 if (i < 1 || i > ListLength()) { return ERROR; } k = MAXSIZE - 1; // 循环至k到要删除的节点前 for(j = 1; j <= i-1; j++) { k = L[k].cur; } j = L[k].cur; // 将该节点排出在元素链表之外 L[k].cur = L[j].cur; // 释放该节点 Free_SSL(L, j); return OK; } template<class ElemType> ElemType StaticLinkList<ElemType>::GetElem(int i) { int n; int k = MAXSIZE - 1; if (i < 1 || i > ListLength()) {// 如果i的取值不在范围内返回一个-1 return -1; } for (n = 1; n <= i; n++) { k = L[k].cur; } return L[k].data; }