手写队列以及stl中队列的使用

一,手写队列。

 1 struct queue
 2 {
 3     int maxn=10000000;
 4     int first=0,rear=0,a[maxn];
 5     
 6     void push(int x)
 7     {
 8         a[++rear]=x;
 9     }
10     void pop()
11     {
12         first++;
13     }
14     int  front()
15     {
16         return a[first];
17     }
18     int empty()
19     {
20         return first>rear?0:1;
21     }
22 }q;

如图所示,是我的手写队列。

二,stl中普通队列的使用。

1,基本操作

 1 push(x) 
 2     将x压入队列的末端
 3 
 4 pop()     
 5     弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
 6 
 7 front()
 8      返回第一个元素(队顶元素)
 9 
10 back()
11      返回最后被压入的元素(队尾元素)
12 
13 empty()
14      当队列为空时,返回true
15 
16 size()
17      返回队列的长度

2,使用方法

#include <queue>

3,声明方法

    ①普通说明

     1 queue<int>q; 

    ②结构体说明

   

1 struct node
2     {    
3        int x, y;
4     };
5     queue<node>q;

三,stl中优先队列的使用方法

1,优先队列的介绍。优先队列的出队并不根据入队的先后顺序,而是根据队内元素的优先权顺序的大小(或者自己算子来计算进行的排序)

同时优先队列(priority_queue),有三个模板类参数,元素类型,容器类型,比较算子。默认的容器为vector,默认比较算子为less,即小在前,大在后。这块我有点不懂。反正大的优先出队。

抄原话为(“……默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)……”

2,定义优先队列的对象的示例代码如下

1 priority_queue<int >q1;
2 
3 priority_queue<pair<int,int> >q2;
4 
5 priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队

3,其操作与queue基本相同。

4,关于比较算字的应用。

四,另外解释

C++队列的成员函数:

back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数

头文件:
#include <queue>

声明: 
1、
queue<int> q;
2.
struct point
{
int x;
int y;
};
queue<point> que;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
pair类型: 
一般当一个对象有多个属性的时候,我们会用结构体stuct写多个属性,而当只有两个属性的时候,就可以使用pair. 
使用方法:

pair<type,type> name;
1
比如:

pair<int,int> P; //对象P有两个属性,都是int类型
1
而且,这里类型一般不做限制,所以自己定义的类型一样可以使用。 
访问方法: 
pair类型有两个属性值,一个first,一个second

int x=P.first; //访问P的第一个属性值
int y=P.second; //访问P的第二个属性值
1
2
如果需要定义多个pair类型,可以使用typedef,例子如下:

typedef pair<int,int>P;
P ac(1,0);
P bc(0,0);

 

 五,以上都是网上的东西

1,我来一些感性的认识,队列简单说,就像自己从屏幕输入的那些东西。当你死机时候乱点其实都是记录上的。

2,另外之前队列和结构体之间似乎搞错了一些东西,队列之所以是队列,是和平常定义结构体不一样的。

posted @ 2019-12-08 19:39  北月真好  阅读(803)  评论(0编辑  收藏  举报