模拟实现队列

来源:互联网 发布:淘宝网小饰品批发 编辑:程序博客网 时间:2024/06/05 04:52

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。


模拟代码:

#include <iostream>using namespace std;#include <assert.h>template<class T>struct QueueNode{T _Data;QueueNode<T>* _Next;};template<class T>              //栈一般用数组实现  ----队列一般用链表实现class Queue{typedef QueueNode<T> Node;public:Queue():_Head(NULL),_Tail(NULL){}void Push(const T& x){if (_Head == NULL){_Head = new Node;_Head->_Data = x;_Tail = _Head;}else {Node* Tmp = new Node;Tmp->_Data = x;Tmp->_Next = NULL;_Tail->_Next = Tmp;_Tail = _Tail->_Next;}}void Pop()    //从头删{assert(_Head != NULL);Node* cur = _Head;_Head = _Head->_Next;delete cur;cur = NULL;}bool Empty(){if (_Head ==  NULL){return true;}return false;}size_t Size(){size_t count = 0;if (_Head == _Tail)  //只有一个结点{if (_Head == NULL){return 0;}return 1;}else{Node* cur = _Head;while (cur){count++;cur = cur->_Next;}return count;}}T& front()     //返回队头元素{assert(_Head != NULL); return _Head->_Data;}T& Back(){assert(_Tail != NULL);return _Tail->_Data;}private:Node* _Head;Node* _Tail;};void  Funtest(){Queue<int> a;a.Push(1);a.Push(2);cout<<a.Size();a.Push(3);a.Push(4);a.Pop();a.Push(5);cout<<a.Size();}


原创粉丝点击