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

📄 cirlist.h

📁 数据结构的一些教程....比较适于初学者
💻 H
字号:
//单循环链表类CirList的定义与实现。
//它是作为单链表类LinList的派生类:
//把凡是涉及到表尾和表头的成员函数都超越重载了。
#ifndef CIRLIST_H
#define CIRLIST_H
#include "LinList.h"

template<class T>
class CirList:public ListNode<T>,public LinList<T>
{
public:
//	CirList(void):LinList<T>() //构造函数:先调用基类的构造函数
//	{ head->next=head;	}     //再加上本类的特殊要求
    CirList(void); 
	~CirList(void);     //析构函数:最后调用基类的析构函数
	ListNode<T> *Next();        //当前结点下移
    bool EndOfList() const;     //当前结点是否到表尾
	bool Find(const T data);    //在表中查找指定元素
	bool NextEndOfList() const; //判别下一个结点是否为表尾
	T DeleteAfter();            //删除当前结点的下一个结点
    void ClearList1(void);
};

template<class T>
CirList<T>::CirList(void)
{  head=new ListNode<T>();
   head->next=head;
   size=0;
}
// 增加的,与基类linlist的clearlist不同
template<class T>
CirList<T>::~CirList(void)
{  ClearList1();  
   delete head;
}

template <class T> 
void CirList<T>::ClearList1(void)
{
//删去链表中除表头结点外的所有其他结点
    ListNode<T> *p,*p1;
	p=head->next;
    while(p!=head)      //注意p!=head
	{
         p1=p;
		 p=p->next;
         delete p1;        //释放它 
    }
    size=0;
    head->next=head;
}					

template<class T>
ListNode<T>* CirList<T>::Next()
{
    currPtr=currPtr->next;
   	return currPtr;
}

template<class T>
bool CirList<T>:: EndOfList() const
{
	return currPtr==head;
}

template<class T>
bool CirList<T>:: Find(const T data)
{
    ListNode<T> *p=head->next;
   	while(p!=head)
   	if(p->data==data)
	{
		currPtr=p;
		return true;
	}
	else p=p->next;
    return false;
}

template<class T>
bool CirList<T>::NextEndOfList() const
{
	return currPtr->next==head;
}

template<class T>
T CirList<T>::DeleteAfter()
{
	ListNode<T> *p=currPtr->next;
	currPtr->next=p->next;
	T data=p->data;
	delete p;
	size--;
	return data;
}
#endif //CIRLIST_H



⌨️ 快捷键说明

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