双端队列(链表表示)
2009-05-10 10:33
316 查看
#ifndef LINKEDDEQUE_H
#define LINKEDDEQUE_H
#include <iostream>
#include <assert.h>
using namespace std;
template<class T>
struct LinkNode //链式队列节点类的定义
{
T data; //数据域
LinkNode<T> *link; //链指针域
LinkNode(LinkNode<T> *ptr = NULL) //仅初始化指针成员的构造函数
{
link = ptr;
}
LinkNode(const T &item,LinkNode<T> *ptr = NULL) //初始化数据与指针成员的构造函数
{
data = item;
link = ptr;
}
};
template<class T>
class LinkedDeque
{
public:
LinkedDeque():front(NULL),rear(NULL){}
~LinkedDeque()
{
MakeEmpty();
}
void MakeEmpty(); //置空队列
bool IsEmpty()const
{
return (front == NULL) ? true : false;
}
bool GetHead(T& x)const;
bool GetTail(T& x)const;
bool EnQueue(const T& x);
bool EnQueueHead(const T& x);
bool EnQueueTail(const T& x);
bool DeQueue(T &x);
bool DeQueueHead(T &x);
bool DeQueueTail(T &x);
private:
LinkNode<T> *front,*rear; //队头、队尾指针
};
template<class T>
void LinkedDeque<T>::MakeEmpty()
{
LinkNode<T> *p;
while(front != NULL)
{
p = front;
front = front->link;
delete p;
}
}
template<class T>
bool LinkedDeque<T>::GetHead(T &x) const
{
if(IsEmpty() == true)
return false;
x = front->data;
return true;
}
template<class T>
bool LinkedDeque<T>::EnQueueTail(const T &x)
{
return EnQueue(x);
}
template<class T>
bool LinkedDeque<T>::DeQueueHead(T &x)
{
T temp;
bool tag = LinkedDeque<
c981
;T>::DeQueue(temp);
x = temp;
return tag;
}
template<class T>
bool LinkedDeque<T>::GetTail(T& x)const
{
if(IsEmpty() == true)
return false;
x = rear->data;
return true;
}
template<class T>
bool LinkedDeque<T>::EnQueueHead(const T &x)
{
LinkNode<T> *p = new LinkNode<T>(x);
if(p == NULL)
return false;
p->link = front;
front = p;
return true;
}
template<class T>
bool LinkedDeque<T>::DeQueueTail(T &x)
{
if(IsEmpty() == true)
return false;
LinkNode<T> *p = front;
while(p->link != rear)
p = p->link;
x = rear->data;
delete rear;
p->link = NULL;
rear = p;
return true;
}
#endif
相关文章推荐
- 双链表--双端队列
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- 队列的链表表示
- 带头结点的循环链表表示队列的初始化、入队列和出队列的算法
- 循环队列的链表表示
- UVA 11988 STL deque (双端队列||链表模拟)
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- 假设以不带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针。试设计相应的入队和出队的算法
- java数据结构与算法-双端链表实现队列
- 数据结构——使用双端链表实现队列(java实现)
- STL--双端队列(deque)和链表(list)
- 队列的链表表示
- java数据结构之LinkedDeque(用链表实现的双端(即头尾两个哨兵节点)双向(node里两个指向)队列)
- 队列(queue)的链表与数组表示
- 链表实现双端队列
- 双端链表实现队列
- Java双端链表实现队列
- (第7讲)利用双向链表实现双端队列、优先级队列(有序数组实现、有序链表实现)
- 《Java数据结构与算法》笔记-CH5-链表-5用双端链表实现队列
- 双端队列(deque)链表实现