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

📄 dlist.h

📁 类模板,助于参考及编写代码,代码以数据结构值的排序方式及链表操作为主.
💻 H
字号:
#ifndef DLIST_H
#define DLIST_H
template <class LDT>
class LNode
{
public:
	LDT Data;
	LNode * Next;
};

template <class LDT>
class DList
{
protected:
	LNode<LDT> *Head;
	int Count;
public:
	DList()
	{ 
		Head=new LNode<LDT>;
		Head->Next=0;
		Count=0; 
	}

	~DList()
	{
		RemoveAll();
		delete Head;
	}

	inline void AddHead(LNode<LDT> *node)
	{
		node->Next=Head->Next;
		Head->Next=node;
		Count++;
	}

	inline LNode<LDT> * AddHead()
	{
		LNode<LDT> *node=new LNode<LDT>;
		AddHead(node);
		return node;
	}

	void AddHead(LDT data)
	{
		LNode<LDT> *node=AddHead();
		node->Data=data;
	}

	void AddTail(LNode<LDT> *node)
	{
		LNode<LDT> *p=Head;
		node->Next=0;
		while(p->Next) p=p->Next;
		p->Next=node;
		Count++;
	}

	LNode<LDT> * AddTail()
	{
		LNode<LDT> *node=new LNode<LDT>;
		node->Next=0;
		LNode<LDT> *p=Head;
		while(p->Next) p=p->Next;
		p->Next=node;
		Count++;
		return node;
	}

	void AddTail(LDT data)
	{
		LNode<LDT> *node=new LNode<LDT>;
		node->Next=0; node->Data=data;
		LNode<LDT> *p=Head;
		while(p->Next) p=p->Next;
		p->Next=node;
		Count++;
	}
	
	inline void InsertAt(int index,LNode<LDT> *node)
	{
		LNode<LDT> *p=Head;
		node->Next=0;
		if(index<=Count)
		    for(int i=0;i<index;i++) p=p->Next;
		else
		{
			LNode<LDT> *m;
			while(p->Next) p=p->Next;
			for(int i=Count;i<index;i++)
			{
				m=new LNode<LDT>;
				p->Next=m;
				p=m;
				Count++;
			}
		}
		p->Next=node;
		Count++;
	}
    
	LNode<LDT> * InsertAt(int index)
	{
		LNode<LDT> *node=new LNode<LDT>;
		InsertAt(index,node);
		return node;
	}

	void InsertAt(int index,LDT data)
	{
		LNode<LDT> *node=new LNode<LDT>;
		node->Data=data;
		InsertAt(index,node);
	}

	void Alloc(int count)
	{
		while(Count<count)
			AddHead();
	}
/*删除*/
	void RemoveAt(int index)
	{
		LNode<LDT> *p=Head,*q;
		for(int i=0;i<index;i++) p=p->Next;
		q=p->Next; p->Next=q->Next;
		delete q;
		Count--;
	}

	inline void RemoveHead()
	{
		LNode<LDT> *p=Head->Next;
		Head->Next=p->Next;
		delete p;
		Count--;
	}

	void RemoveTail()
	{
		LNode<LDT> *p=Head;
		while(p->Next->Next) p=p->Next;
		delete p->Next;
		p->Next=0;
		Count--;
	}

	void RemoveAll()
	{
		while(Count) RemoveHead();
	}

/*设置/获取*/
	void SetAt(int index,LDT data)
	{
		LNode<LDT> *p=Head;
		for(int i=0;i<=index;i++) p=p->Next;
		p->Data=data;
	}

	LDT GetAt(int index)
	{
		LNode<LDT> *p=Head;
		for(int i=0;i<=index;i++) p=p->Next;
		return p->Data;
	}

	LDT & operator [] (int index)
	{
		LNode<LDT> *p=Head;
		for(int i=0;i<=index;i++) p=p->Next;
		return p->Data;
	}

	inline LNode<LDT> * GetHeadPointer() { return Head->Next; }

	inline LNode<LDT> * GetTailPointer() 
	{
		LNode<LDT> *p=Head;
		while(p->Next) p=p->Next;
		return p;
	}
    
	inline LNode<LDT> * GetNextPointer(LNode<LDT> *p)
	{ return p->Next; }

	inline LNode<LDT> * GetPointer(int index)
	{
		LNode<LDT> *p=Head->Next;
		for(int i=0;i<index;i++)
			p=p->Next;
		return p;
	}
/*其它*/
	int GetCount() { return Count; }
	bool IsEmpty() 
	{ 
		if(Count) return false;
		else return true;
	}
};
#endif

⌨️ 快捷键说明

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