test1
ios
#include<map>
#include <string>
#include <queue>
#include <list>
#include <iostream>
using namespace std;算法
int main(int argc,char* argv[])
{
queue<int,list<int> > q2; //双向链表做底层容器
q2.push(3);
q2.push(32);
q2.push(33);
q2.push(34);
while(!q2.empty())
{
cout<<q2.front()<<endl;
q2.pop();
//int dd = q2.pop();
}
return 0;
}数组
队列是一种经常使用的数据结构,一般以消息队列的形式应用于进程间的通讯。C++ STL 提供的queue容器对 队列的数据结构和受限操做进行了泛化封装,包括队列初始化,元素入队列,取队首元素,元素出队列,队列是否为空以及获取当前队列长度等操做。数据结构
与堆栈同样,queue队列也是默认使用qeque 双端队列做底层架构,元素的出队也不返回队首元素,须要先用取值函数将之读出。经过检查当前队列长度,来决定是否容许元素入队,可实现具备固定长度的队列。架构
test2函数
priority queue spa
优先队列也是一种入队出队的队列,不一样于通常队列的是,队列中最大的元素老是位于队首位置,所以,元素的出队并不是按照先进先出的要求,将最早入队的元素出队,而是将当前队列中的最大元素出队。队列
C++ STL 优先队列的泛化,底层默认采用vector容器,使得队列容器的元素可作数组操做,从而应用堆算法找到当前队列最大元素,并将它调整到队首位置,确保最大元素先出队。 heap algorithm 具备nlog(n)阶的算法时间复杂度。进程
#include <map>
#include <string>
#include <queue>
#include <list>
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
priority_queue<int> pq;
pq.push(4);
pq.push(19);
pq.push(33);
pq.push(26);
pq.push(34);
while(!pq.empty())
{ cout<<pq.top(<<endl;
pq.pop();
//int dd = q2.pop();
}
return 0;
}
ci
test3:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h>
using namespace std;
template <typename T>
class CircularQueue
{
public:
CircularQueue(int init= 100);
~CircularQueue() {if(base) delete [] base;}
bool cqempty() const ;
void cqtraverse()const;
int cqlength() const;
bool cqenqueue(T e);
bool cqdequeue();
private:
int size;
int front;
int rear;
T *base;
};
template<typename T>
CircularQueue<T>::CircularQueue(int init)
{
size = init;
base = new T[size];
if(!base)
exit(-1);
front = rear = 0;
}
template<typename T>
int CircularQueue<T>::cqlength() const
{
return ((rear -front + size) % size);
}
template<typename T>
void CircularQueue<T>::cqtraverse() const
{
int length = (rear - front + size)% size;
cout<<"traverse ...."<<endl;
for(int i=0;i<length;i++)
{
cout<<base[front+i]<<" ";
}
cout<<endl;
}
template<typename T>
bool CircularQueue<T>::cqenqueue(T e)
{
if( (rear+1) % size == front)
return false;
base[rear]=e;
rear = (rear+1) % size;
return true;
}
template<typename T>
bool CircularQueue<T>::cqdequeue()
{
if(front == rear)
return false;
front = (front+1) % size;
return true;
}
int main(int argc,char* argv[])
{
CircularQueue<long> *cq = new CircularQueue<long>;
cq->cqenqueue(33);
cq->cqenqueue(31);
cq->cqenqueue(23);
cq->cqenqueue(11);
cq->cqenqueue(23);
cq->cqenqueue(56);
cq->cqenqueue(43);
cout<<"circular queue len: "<<cq->cqlength()<<endl;
cq->cqtraverse();
cout<<"after deleting top ele "<<endl;
cq->cqdequeue();
cout<<"circular queue len: "<<cq->cqlength()<<endl;
cq->cqtraverse();
return 0;
}