📄 cirlist.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 + -