队列模拟实现

来源:互联网 发布:网络客服工资怎么算 编辑:程序博客网 时间:2024/06/06 01:23

队列的特点:


先进先出/后进后出


队列的常见操作:


Push——往队尾插入一个元素

Pop——从队头删除一个元素

Front——返回队列的第一个元素

Back——返回队列的最后一个元素

Size——求队列的元素个数

Empty——判断队列是否为空


队列的模拟实现:


#include<assert.h>template<class T>struct QueueNode{T _data;QueueNode<T>* _next;QueueNode(const T& data): _data(data), _next(NULL){}};template<class T>class Queue{typedef QueueNode<T> Node;public:Queue()//构造函数: _head(NULL), _tail(NULL){}~Queue()//析构函数{Node* cur = _head;while (cur){Node* del = cur;cur = cur->_next;delete del;}}void Push(const T& data)//在末尾插入一个数{if (_head == NULL)//为空{_head = _tail = new Node(data);}else      //不为空{_tail->_next = new Node(data);_tail = _tail->_next;}}void Pop()//删除第一个元素{if (_head == _tail)//只有一个元素时{delete _head;_head = _tail = NULL;}else               //有多个元素时{Node* del = _head;_head = _head->_next;delete del;}}size_t Size()//返回队列中元素的个数{size_t count = 0;Node* cur = _head;while (cur){++count;cur = cur->_next;}return count;}T& Front()//返回队列中的第一个元素{assert(_head);return _head->_data;}T& Back()//返回队列的最后一个元素{assert(_tail);return _tail->_data;}bool Empty()//判断一个队列是否为空{return _head == NULL;}protected:Node* _head;Node* _tail;};void TestQueue(){Queue<int> q;q.Push(1);q.Push(2);q.Push(3);q.Push(4);q.Push(5);cout << q.Size() << endl;while (!q.Empty()){cout << q.Front() << " ";q.Pop();}cout << endl;}#include<iostream>using namespace std;#include "queue.h"int main(){TestQueue();system("pause");return 0;}


代码运行结果:




0 0
原创粉丝点击