数据结构——队列(C++实现)
来源:互联网 发布:mac 便笺 保存位置 编辑:程序博客网 时间:2024/05/23 00:05
什么是队列?
队列简而言之就是先入先出(FIFO)的一种数据结构。队列的操作与栈操作类似。有如下操作:
- clear()——清空队列
- isEmpty()——判断队列是否为空
- enqueue(el)——在队列尾部加入元素el
- dequeue()——弹出队列的第一个元素
- firstEl()——返回队列的第一个元素,但不删除该元素
代码实现如下:(用链表实现)
#include <list>template<class T>class Queue {public: Queue() { } void clear() { lst.clear(); } bool isEmpty() const { return lst.empty(); } T& front() { return lst.front(); } T dequeue() { T el = lst.front(); lst.pop_front(); return el; } void enqueue(const T& el) { lst.push_back(el); }private: list<T> lst;};
循环队列
循环队列其实和循环链表差不多,只不过循环队列只能从尾部插入数据,从头部弹出数据。上面一般的队列用链表实现的,下面的循环队列采用数组实现。需要注意的是循环队列是有容量限制的,你创建一个循环队列时就要定义循环队列的大小,不能像一般队列一样,可以随时增大。
代码实现如下:
// circular_queue.cpp : 循环队列数组实现#include "stdafx.h"#include<iostream>#include<assert.h>using namespace std;
//T 数据类型,size循环队列大小template<typename T,size_t size=10>class CircularQueue{public: CircularQueue():front(0),rear(0){} virtual ~CircularQueue(){} bool isEmpty() const{ //是否为空队列 return front == rear; } //在判断是否为满队列时,有不同的方法,这里采用少用一个元素空间,约定以队列头指针在队列尾指针的下一位置作为队列满的标志。 //当然,也可以采用一个独立的标识位标识,这里不采取这种方法。 bool isFull() const{ return front==(rear+1)%(size+1); } void push(const T& e){//入队列 if(isFull()) return; rear=(rear+1)%(size+1); data[rear]=e; } void pop(){//弹出队列 if(isEmpty()) return; front=(front+1)%(size+1); } T top() const{ assert(!isEmpty()); return data[(front+1)%(size+1)]; } void clear(){//清空队列 front=rear=0; }protected: int front; int rear; T data[size+1];};
int _tmain(int argc, _TCHAR* argv[]){ CircularQueue<int,3> m_queue; m_queue.push(1); m_queue.push(2); m_queue.push(3); cout<<m_queue.top(); return 0;}
标准模版库中的队列
代码示例:
#include "stdafx.h"#include<iostream>#include<algorithm>#include<stack>#include<queue>#include<list>using namespace std;int main(){ std::queue<int> q1; queue<int, std::list<int>> q2; for (int i = 1; i < 4; i++) q1.push(i); for (int i = 4; i < 7; i++) q2.push(i); while (!q1.empty()) { cout << q1.front()<<" "; q1.pop(); } cout << endl; while (!q2.empty()) { cout << q2.front() << " "; q2.pop(); } cout << endl; system("pause"); return 0;}
优先队列
队列中还有一个编程时经常用到的优先队列(Priority Queue),在优先对列中,根据元素的优先级以及在队列中的当前位置决定出队列的顺序。
//更多详细内容以后补充
阅读全文
0 0
- 数据结构(四)——队列(C语言实现)
- 数据结构——队列的链式实现(C语言)
- C数据结构实现队列
- 数据结构——循环队列(c++)
- 数据结构——链式队列(c++)
- 数据结构(C++)——队列
- 数据结构C语言实现系列[4]——队列
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列
- 数据结构C语言实现系列——队列
- [150422][C++]数据结构复习——队列实现源码
- 数据结构(c)——队列
- 数据结构:队列(C语言实现)
- 数据结构(C语言)实现循环队列
- 数据结构实现链式队列(C语言)
- 数据结构:循环队列(C语言实现)
- 数据结构(C实现)------- 链队列
- 垂直居中
- Highways POJ
- ACM基础题:谁获得了最高奖学金
- MySQL事物的概念
- 51C中_nop_(); 指令的说明和作用
- 数据结构——队列(C++实现)
- HTML5(第一次)
- RMQ区间最值查询SparseTable算法
- MD5, SHA256, SHA512哈希算法
- Zju1100 Mondriaan
- 动态对象创建
- Java打印日历
- Using VNCserver + GUI application + Virtual Display in Docker container
- HDU 5572-An Easy Physics Problem (计算几何)