首页 > 代码库 > 队列queue

队列queue

  队列queue也是一种线性结构,我们可以再其两端进行操作,它是一种属于先进先出的结构(FIFO)。

  数据在只能在队尾进入,且只能在队首出去。

  队列与栈差不多,基本操作如下:

  1.queue::size()

  2.queue::empty()

  3.queue::push(typename t)

  4.queue::pop()     删除队首元素

  5.queue::front()    访问队首元素

  6.queue::back()      访问队尾元素

 1 #include<IOSTREAM> 2 #include<QUEUE> 3  4 using namespace std; 5  6 int main() 7 { 8     queue<int> a; 9     int i;10     for(i=0;i<5;i++)11     {12         a.push(i);13     }14     cout<<a.size()<<endl;15     cout<<a.front()<<endl;16     cout<<a.back()<<endl;17     a.pop();18     cout<<a.size()<<endl;19     cout<<a.front()<<endl;20     cout<<a.back()<<endl;21     if (a.empty())22     {23         cout<<"empty!\n";24     }25     else26     {27         cout<<"it has "<<a.size()<<" ge yuansu!\n";28     }29     return 0;30 }

  在<queue>中还定义了一另一个非常有用的模板类priority_queue(优先队列),(我还用到过。。。。)优先队列不是按照入队的顺序出列,而是按照队列中元素的优先权顺序出队。(默认大者优先,也可以指定自己的算子来改变优先顺序)  

  priority_queue模板类有3个参数,第一个是元素类型,第二个是容器类型,第三个是比较算子。后2个参数可以省略,默认容器是vector,默认算子是less,即小的往前排,大的往后排,出队时队尾的元素出队。

  

 1 #include <IOSTREAM> 2 #include <QUEUE> 3  4 using namespace std; 5  6 int main() 7 { 8     priority_queue<int,vector<int>,less<int> > a; 9     a.push(1);10     a.push(18);11     a.push(16);12     a.push(31);13     if (a.empty())14     {15         cout<<"empty!\n";16     }17     cout<<a.size()<<endl;18     for(int i=0;i<4;i++)19     {20         cout<<a.top()<<endl;21         a.pop();22     }23     if (a.empty())24     {25         cout<<"empty!\n";26     }27     return 0;28 }