C++实现有哨兵的双向循环链表

发表于:2014-4-14 10:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:wordwarwordwar    来源:51Testing软件测试网采编

  C++实现有哨兵的双向循环链表:
#include<iostream>
#include<stack>
using namespace std;
template<class T>
class Node
{
private:
T data;
Node<T>* next;
public:
Node()
{
Node=NULL;
}
Node(T d)
{
data=d;
next=NULL;
}
};
template<class T>
class myqueue
{
private:
Node<T> *tail;
public:
myqueue()
{
tail=new Node<T>();
//tail->next=NULL;
tail->next=tail;  //这种表示采用的是循环队列,且队列头是一个哨兵为空,它的下一个才是队列的第一个数据
}
bool empty()
{
//return (NULL==tail->next)
return (tail->next==tail);
}
void push(T d)
{
Node<T> *p=new Node<T>(d);
//p->next=NULL;
p->next=tail->next;
tail->next=p;
tail=p;  //始终标记出尾部的位置
}
T front()  //取队列的第一个元素
{
if(empty())
{
cout<<"queue is empty!"<<endl;
exit(0);
}
Node<T> *p=tail->next;  //这是一个循环链表构成的队列,尾部的链接的下一个就是队列头
T data=p->next->data;  //队列头链接的下一个才是第一个数据
return data;
}
void pop()  //队列的第一个元素出队列
{
Node<T> *p=tail->next;
Node<T> *q=p->next;
p->next=q->next;
if(q==tail)
tail=p;
delete q;
q=NULL;
}
};
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号