dzqlist.h

来自「一种基于二维链表的稀疏矩阵模半板类设计 A template Class of」· C头文件 代码 · 共 109 行

H
109
字号
#include <iostream.h>
#include <stdlib.h>


#ifndef _dzqList_
#define _dzqList_



//ChainNode...........................................................................
template <class T>
class Chain;
template <class T>
class SigLinkedCirList;    //forward declaration.


template <class T>
class ChainNode
{
	friend Chain<T>;
	friend SigLinkedCirList<T>;

private:
	T data;
	ChainNode<T> *link;
};
//ChainNode over...........................................................................




//Chain...........................................................................
template<class T>
class Chain
{
public:

	Chain() {first=last= 0;}
	Chain(Chain<T>& c);
	Chain<T>& operator=(const Chain<T>& c);
	~Chain( );
	bool IsEmpty() const {return first == 0;}
	int Length() const;
	bool Find(int k, T& x) const;
	int Search(const T& x) const;
	Chain<T>& Delete(int k, T& x);
	Chain<T>& Insert(int k, const T& x);
	void Erase();
	void Output(ostream& out) const;
	Chain<T>& Append(const T& x);
	Chain<T>& AppendLeft(const T& x);
	Chain<T>& Reverse();
	Chain<T>& Reverse(Chain<T>& dest,Chain<T>& src);
	Chain<T>& Emerge(Chain<T>& dest,Chain<T>& srcA,Chain<T>& srcB);
	void Split(Chain<T>& destA, Chain<T>& destB, Chain<T>& srcC);


	inline void Zero() { first =last= 0;}
//	friend class ChainIterator<T>;

private:
	ChainNode<T> *first; // 指向第一个节点的指针
	ChainNode<T> *last; 

};



//***************************************************************************************//
//****SigLinkedCirList with HeadNode,so the circular chain(list) never be empty**********//
//***************************************************************************************//
template <class T>
class SigLinkedCirList
{
	public:
		SigLinkedCirList();
		SigLinkedCirList(SigLinkedCirList<T>& c);
		SigLinkedCirList<T>& operator=(const SigLinkedCirList<T>& c);
		~SigLinkedCirList( );
		bool IsEmpty() const {return first==last;}
		int Length() const;
		bool Find(int k, T& x) const;
		int Search(const T& x) const;
		SigLinkedCirList<T>& Delete(int k, T& x);
		SigLinkedCirList<T>& Insert(int k, const T& x);
		void Erase();
		void Output(ostream& out) const;
		SigLinkedCirList<T>& Append(const T& x);
		SigLinkedCirList<T>& AppendLeft(const T& x);
		SigLinkedCirList<T>& Reverse();
		SigLinkedCirList<T>& Reverse(SigLinkedCirList<T>& dest,SigLinkedCirList<T>& src);
	//	Chain<T>& Emerge(Chain<T>& dest,Chain<T>& srcA,Chain<T>& srcB);
	//	void Split(Chain<T>& destA, Chain<T>& destB, Chain<T>& srcC);


	inline void Zero() { first->link=0;  last=first;}
//	friend class ChainIterator<T>;

private:
	ChainNode<T> *first; // 指向第一个节点的指针
	ChainNode<T> *last;
	ChainNode<T> HeadNode; 

};
//****************************************************************************************//
//********************SigLinkedCirList's interface define finished************************//
//****************************************************************************************//

#endif

⌨️ 快捷键说明

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