#pragma once
template<class T>
class Queue
{
struct Node
{
T _data;
Node *_next;
Node(const T&x)
:_data(x)
, _next(NULL)
{}
};
public:
Queue()
:_head(NULL)
, _tail(NULL)
, _size(0)
{}
~Queue()
{
while (_head != NULL)
{
Node *tmp = _head;
_head = _head->_next;
delete tmp;
}
_head = _tail = NULL;
_size = 0;
}
void push(const T&x)
{
if (_head == NULL)
{
_head = new Node(x);
_tail = _head;
}
else
{
_tail->_next = new Node(x);
_tail = _tail->_next;
}
++_size;
}
void pop()
{
assert(_head);//注意检查
//考虑到只有一个节点 将两个指针置空
if (_head == _tail)
{
delete _head;
_head = NULL;
_tail = NULL;
}
else
{
Node *tmp = _head;
_head = _head->_next;
delete tmp;
}
--_size;
}
const T& front()
{
if (_size != 0)
return _head->_data;
}
const T& back()
{
if (_size != 0)
return _tail->_data;
}
inline size_t size(){ return _size; }
inline bool empty(){ return _size == 0; }
void Print()
{
Node *newHead = _head; //千万考虑到对队列的修改
while (newHead != _tail->_next) //打印的时候认准条件
{
cout << newHead->_data<<" ";
newHead = newHead->_next;
}
printf("\n");
}
private:
Node *_head;
Node *_tail;
size_t _size;
};
动态数组实现队列
最新推荐文章于 2022-02-17 15:47:16 发布