【数据结构——优先队列】优先队列的各种运用

#include<iostream>
#include<queue>
#include<string>

using namespace std;
//优先队列的使用

int main ()
{

	int num = 0;
	priority_queue<int> pq;
	while(cin>>num)
	{
		pq.push(num);
	}
	cout << pq.size() <<" " << pq.top() <<" "<<pq.empty() <<endl;

	while(!pq.empty())
	{
		cout<<pq.top()<<" ";
		pq.pop();
	}
	cout<< endl;
	system("pause");
	return 0;
}

栈、队列、优先队列

栈stack    网上实例

队列queue    网上实例

优先队列priority_queue   网上实例

[cpp]  view plain copy
  1. #include <string>  
  2. #include <stack>  
  3. #include <queue>   
  4. #include <conio.h>  
  5. #include<iostream>  
  6. using namespace std;     
  7. //栈stack的用法  
  8. void test0()  
  9. {  
  10.     stack<int> st;   
  11.     for (int i=0;i<4;i++)  
  12.         st.push(i*10); //压栈  
  13.     cout<<st.top()<<" "<<st.size()<<endl; //30 4  
  14.     for (int i=0;i<4;i++)   
  15.     {  
  16.         cout<<st.top()<<" ";//30 20 10 0  
  17.         st.pop();//出栈  
  18.     }  
  19.     cout<<endl<<st.size()<<" "<<st.empty()<<endl;//0 1  
  20.   
  21.     stack<int> first,scond;  
  22.     for (int i=0;i<5;i++)  
  23.     {  
  24.         first.push(i*5);  
  25.         scond.push(i*2);  
  26.     }  
  27.     first.swap(scond);//将栈first与scond元素互换  
  28.     first.emplace(444); //安放 它与push()的功能相同  
  29.     scond.emplace(852);  
  30.   
  31.     while (!first.empty())  
  32.     {  
  33.         cout<<first.top()<<" ";//444 8 6 4 2 0  
  34.         first.pop();  
  35.     }  
  36.     cout<<endl;  
  37.     while (!scond.empty())  
  38.     {  
  39.         cout<<scond.top()<<" ";//852 20 15 10 5 0  
  40.         scond.pop();  
  41.     }  
  42.     cout<<endl;      
  43.     //栈stack,提供访问数据的接口只有一个top();而vector,list,deque则提供访问数的接口有:iterator,front(),back();queue则提供的是back(),front(),没有iterator  
  44. }  
  45. //队列queue的用法  
  46. void test1()  
  47. {  
  48.     queue<int> q;  
  49.     for(int i=0;i<5;i++)  
  50.         q.push(i);//在队尾增加元素  
  51.     //返回元素数目,返回队头元素,返回队尾元素,是否为空  
  52.     cout<<q.size()<<" "<<q.front()<<" "<<q.back()<<" "<<q.empty()<<endl;//5 0 4 0  
  53.     q.pop();//删除队头元素  
  54.     cout<<q.front()<<" "<<q.back()<<endl;//1 4   
  55.   
  56.     queue<int> first,scond;  
  57.     for (int i=0;i<5;i++)  
  58.     {  
  59.         first.push(i*5);  
  60.         scond.push(i*2);  
  61.     }  
  62.     first.swap(scond);//将队列first与scond元素互换  
  63.     first.emplace(444); //安放 它与push()的功能相同  
  64.     scond.emplace(852);  
  65.   
  66.     while (!first.empty())  
  67.     {  
  68.         cout<<first.front()<<" ";//0 2 4 6 8 444  
  69.         first.pop();  
  70.     }  
  71.     cout<<endl;  
  72.     while (!scond.empty())  
  73.     {  
  74.         cout<<scond.front()<<" ";//0 5 10 15 20 852  
  75.         scond.pop();  
  76.     }  
  77.     cout<<endl;  
  78. }  
  79. //优先队列priorityQueue的用法;插入的数据(按照某种顺序)自动排序  
  80. void test2()  
  81. {  
  82.     priority_queue<int>pq;  
  83.     pq.push(34);  
  84.     pq.push(21);  
  85.     pq.push(45);  
  86.     pq.push(9);  
  87.     //返回元素数目,返回队头元素,返回队尾元素,是否为空  
  88.     cout<<pq.size()<<" "<<pq.top()<<" "<<pq.empty()<<endl;//4 45 0  
  89.     while(!pq.empty())  
  90.     {  
  91.         cout<<pq.top()<<" ";//45 34 21 9  
  92.         pq.pop();  
  93.     }  
  94.     cout<<endl;   
  95.     priority_queue<int> first,scond;  
  96.     for (int i=0;i<5;i++)  
  97.     {  
  98.         first.push(i*5);  
  99.         scond.push(i*2);  
  100.     }  
  101.     first.swap(scond);//将优先队列first与scond元素互换  
  102.     first.emplace(444); //安放 它与push()的功能相同  
  103.     scond.emplace(852);  
  104.   
  105.     while (!first.empty())  
  106.     {  
  107.         cout<<first.top()<<" ";//444 8 6 4 2 0  
  108.         first.pop();  
  109.     }  
  110.     cout<<endl;  
  111.     while (!scond.empty())  
  112.     {  
  113.         cout<<scond.top()<<" ";//852 20 15 10 5 0  
  114.         scond.pop();  
  115.     }  
  116.     cout<<endl;  
  117. }  
  118. void Test(char h)  
  119. {  
  120.     cout<<"press key===="<<h<<endl;  
  121.     switch(h)  
  122.     {   
  123.     case '0':  test0();break;  
  124.     case '1':  test1();break;  
  125.     case '2':  test2();break;   
  126.     case 27:  
  127.     case 'q':exit(0);break;   
  128.     default:cout<<"default "<<h<<endl;break;  
  129.     }  
  130. }  
  131. void main()  
  132. {  
  133.     while(1)  
  134.     {  
  135.         Test(getch());  
  136.     }   
  137. }  

 

容器适配器

容器适配器:是用基本的容器改造出的容器。共有的成员函数:empty(),size(),push(),pop(),(front(),back()/top()),swap(),emplace()
栈stack:是先进后出(FILO)的数据结构,可用vector,list,deque来实现,默认用deque实现。只能插入push(),删除pop(),访问栈顶元素top()
队列queue:是先进先出(FIFO)的数据结构,可用list,deque来实现,默认用deque实现。也提供了push(),pop()但是push()发生在队尾,pop()发生在队头。与stack不同的是top()变成了(front(),back())返回队头元素front(),返回队尾元素back(),
优先队列priority_queue:可用vector,deque实现,默认用vector实现。插入到容器中的元素自动排序(从大到小),这些元素是有优先级的,大的在前小的在后,与queue不同的是由front(),back()变成一个top()



转自: http://blog.csdn.net/shimazhuge/article/details/8482504
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值