⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clistmz.h

📁 数据结构中的双链表问题
💻 H
字号:
//CListMZ.h
//双链表类的说明

#ifndef CListMZ_CLASS_20050329
#define CListMZ_CLASS_20050329
#define NULL 0

////////////////////////////////////////////////////////////////////////////////

template <class T> class CListMZ;

//模板类 _CListNote
//此类的定义仅仅只能被类CListMZ的使用

template <class T> class _CListNote{
private:
//构造函数
	_CListNote(_CListNote<T> * up=NULL , _CListNote<T> * Donw=NULL);
	_CListNote(T & data , _CListNote<T> * up=NULL , _CListNote<T> * Donw=NULL);
//属性 
	_CListNote<T> * Down;//指向后结点的指针
	_CListNote<T> * Up;//指向前结点的指针
	T Data;//数据元素
//申请友元类
	friend class CListMZ<T>;
};
//类 _CListNote的定义结束


/////////////////////////////////////////////////////////////////////////////////////

//模板类 CListMZ
template <class T> class CListMZ{
//公有成员
public:
//构造函数
	CListMZ();
	CListMZ(int n);
	CListMZ(int n,T & data);
	CListMZ(CListMZ<T> & list);

//创建函数
	bool Create(int n);
	//创建长度为n的链表
	//n>0,如果n<=0,则创建失败
	//创建成功函数返回真值

	bool Create(int n,T & data);
	//创建长度为n的链表,初值都为data
	//n>0,如果n<=0,则创建失败
	//创建成功返函数回真值

	bool Create(CListMZ<T> & list);
	//用一个已存在的链表list对象创建一个新的的链表对象
	//创建成功函数返回真值

//析构函数
	~CListMZ();

//操作函数
	void DestroyList();
	//销毁一个链表

	int GetLength() const;
	//获得链表的长度
	//如果链表是空的,则返回0
	//如果链表不是空的,则返回链表的长度(>0)

	bool GetAt(int n,T & data);
	//获取第n个结点的数据元素
	//如果n满足 0 <= n < GetLength(),则函数返回真值,否则返回假值
	//数据元素由data返回

	bool IsEmpty() const;
	//链表是否为空
	//如果n链表是空的,则函数返回真值,否则返回假值

	bool SetAt(int n,const T & data);
	//更改第n个结点的数据元素
	//如果n满足 0 <= n <GetLength(),则函数返回真值,否则返回假值

    bool Delete(int n);
	//删除第n个结点
	//如果n满足 0 <= n < GetLength(),则函数返回真值,否则返回假值

	bool Find(const T & data,int & n);
	//查找数据元素为data在链表中的位置
	//如果链表中存在数据元素data,则n 返回该数据元素的位置值,函数返回真值,
	//如果链表中不存在数据元素data,则函数返回假值
    
	bool Insert(int n, T & data);
	//如果n满足 0 <= n <= GetLength(),则函数返回真值,否则返回假值
	//在链表第n位插入data,原来第n位的数据元素以及后面数据元素的序数增一
	//如果成功,则返回真值,否则返回假值

	bool Add(T & data);
	//在链表后面追加数据元素data
    //如果成功,则返回真值,否则返回假值
	
	void Display();
	//显示所有的元素

//运算符重载
    T & operator [] (int n);
    //如果n满足 0 <= n < GetLength(),则返回链表第n位的数据元素

//私有成员
private:
//属性
	_CListNote<T> * m_pHead;//头指针
	_CListNote<T> * m_pPoint;//当前指针
	int m_nLength;//链表长度
	int m_nPosition;//当前位置

//工具
	void MoveToHead();
    //当前位置和当前指针移向首位

	bool MoveToPosition(int n);
	//当前位置和当前指针为指定的位置
    //如果 0 <= n < GetLength() ,则返回真值,否则返回假值

	bool MoveToDown();
	//当前位置和当前指针后移一位
    //如果当前位置和当前指针已经到头,返回则假值,否则返回真值

	bool MoveToUp();
	//当前位置和当前指针前移一位
	//如果当前位置和当前指针已经到尾,返回则假值,否则返回真值

	void Set();
    //给类属性赋初值

	_CListNote<T> * NewElem(T & data,_CListNote<T> * up=NULL,_CListNote<T> * down=NULL);
    //获得新的结点
	_CListNote<T> * NewElem(_CListNote<T> * up=NULL,_CListNote<T> * down=NULL);

	bool Check(int n);
    //检查n的值
	//如果 0 <= n < GetLength() ,则返回真值,否则返回假值
};
//类 CListMZ 的定义结束
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -