循环单链表的实现代码C/C++

template<class T> class CirList
{
 CirListNode<T>* head;
 CirListNode<T>* tail;
 CirListNode<T>* cur;
public:
 CirList ();
 ~CirList();
 bool AddTail(T value);
 void RemoveThis();
 void RemvoeAll();
 void SetBegin();
 int  GetCount();
 CirListNode<T>* GetCur();
 bool IsEmpty();
 T GetNext();
};
//--------------------------------------------------------------
template<class T>
Circle<T>::CirList()
{
 head=tail=new CirListNode<T>;
 cur=NULL;
 head->SetLink(head);

}
//--------------------------------------------------------------
template<class T>
bool CirList<T>::AddTail(T value)
{
 CirListNode<T>* add=new CirListNode<T>(value);
 tail->SetLink(add);
 tail=tail->GetLink();
 tail->SetLink(head);
 if(tail!=NULL)
 {
  return true;
 }
 else
 {
  return false;
 }
}

//--------------------------------------------------------------
template<class T>
void CirList<T>::RemoveThis()
{
 if(cur==head)
 {
  cur=cur->GetLink();
 }
 CirListNode<T>* preCur=cur;
 for(int i=0;i<this->GetCount();i++)
 {
  preCur=preCur->GetLink();
 }
 preCur->SetLink(cur->GetLink());
 cur=preCur->GetLink();
 preCur=NULL;
}

//--------------------------------------------------------------
template<class T>
void CirList<T>::RemvoeAll()
{
 SetBegin();
 int length=GetCount();
 for(int i=0;i<length;i++)
 {
  RemoveThis();
 }
 cur=head;
}
//--------------------------------------------------------------
template<class T>
void CirList<T>::SetBegin()
{
 cur=head;
}
//--------------------------------------------------------------
template<class T>
int CirList<T>::GetCount()
{
 int num=0;
 CirListNode<T>* here=cur;
 while(cur->GetLink!=here)
 {
  cur=cur->GetLink();
  ++num;
 }
 cur=cur->GetLink();
 return num;
}
//--------------------------------------------------------------
template<class T>
CirListNode<T>* CirList<T>::GetCur()
{
 return cur;
}
//--------------------------------------------------------------
template<class T>
bool CirList<T>::IsEmpty()
{
 return head->GetLink()==head;
}
//--------------------------------------------------------------
template<class T>
T CirList<T>::GetNext()
{
 if(cur==head)
 {
  cur=cur->GetLink();
 }
 T num=cur->GetData();
 cur=cur->GetLink();
 return num;
}

 

至于CirListNode类的实现请参见:http://my.oschina.net/u/181847/blog/42593

转载于:https://my.oschina.net/u/181847/blog/42804

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值