模拟指针,也就是清华严老师《数据结构-C语言描述》中的静态链表,静态链表的引用是使用一段连续的存储区还模拟指针的功能,可以有效的利用一段连续内存进行一定范围内可变的子链表的空间分配,此数据结构原理比较简单,但是实现起来(至少我个人感觉)有一些绕,原因在于结点的指针域和所申请的整个空间数组的下标都是用整型来表示,极易出错,由于使用连续存储区,稍有不甚将指针地址错写成数组下标则很容易出错并且很难被发现。
以下为本次实现的模拟指针代码,由三个文件构成:
1、 simulatedPointer.h 定义了模拟指针的一些基本结构和方法
2、excp.h 和前面一样,包含定制的异常类。
3、simulatedPointer.cp 测试用的主函数
//simulatedPointer.h
#ifndef __SIMULATEDPOINTER__
#define __SIMULATEDPOINTER__
#include <iostream>
#include "excp.h"
using namespace std;
template<class T>
class SimPointerList;
template<class T>
class Node {
public:
friend class SimPointerList<T>;
private:
T data;
int next;
};
template<class T>
class SimPointerList {
public:
SimPointerList(int maxaSize = 10);
~SimPointerList(){delete [] list;}
int getFreeNode();
void recycleFreeNode(int i);
bool isEmpty() const;
int getLength() const;
SimPointerList<T>& deleteElement(int k, T& x);
SimPointerList<T>& insertElement(int k, const T& x);
void findElement(int k, T& x) const;
int searchElement(const T& x) const;
void output(ostream& out) const;
int getFreeCapacity() const;
pr