队列的简单操作及优先队列

  上一次我们学习了关于栈的简单的操作,这一节我们来学习一下队列的操作和优先队列。

  其实我们学习队列可以类比着栈来学,因为他们是差不多的,主要的区别就是栈是先进后出,而队列是先进先出,其他的操作也基本上和栈差不多。就是有一些关键字不一样。

队列的定义: 队列的定义和栈的定义是一模一样的,queue<int> que,这样我们就定义好了一个名字为que,里面的元素为int 类型的队列。

元素入队: que.push(x) 。这样就是把元素 x 放入队列中 。

查询栈顶元素:a=sta.tfront()  。这样就是把队首元素的值赋给了a 。

删除栈顶元素 sta.pop()。 这样就是把栈顶元素给删除了。

判断栈是否为空 sta.empty() .栈不空返回值为 0,栈空返回值为 1;

从中我们可以看出其实队列的操作和栈的操作基本上是一模一样的,只有一个非常明显的差异,那就是获取栈的栈顶元素的时候我们用的是 sta.top(),而获得队列的队首元素的时候我们用的是 que.front().其他的就基本上完全一样了。

我们知道队列里面的顺序是根据进队列的先后顺序进行排序的,那么我们如果另有其他的排序要求,并不想用队列本来的排序方式,那么我们还能不能用队列呢?答案是可以的,但是我们不能用简单的队列了,我们要用一个比较特别的队列,就是能够按照你的要求去进行排序的,这个东西是什么呢?那就是优先队列,这个优先队列并不是按照先入先出的规则去进行排序的,而是需要你自己去定义优先级的大小。

其实优先队列和队列事差不多的,但是又有一点的差异,现在我们就来简单的介绍一下优先队列。

优先队列的简单的操作中,有一个和队列不同的地方就是优先队列的定义,正常的队列的定义是 queue<int> que。而优先队列的定义是 priority_queue <node > que ; 这两个定义也就是有一点不一样,那就是 关键字的问题,一个是queue 另一个多加了一个 priority_其他的就一模一样了。

接下来我们来说一下优先队列最关键的地方,那就是优先队列优先级的问题,我们知道既然默认的优先级是越大优先级越高,那么我们如何来 更改这个优先级呢?

我们就用结构体来定义它的优先级,其实是和cmp函数差不多的。下面我用代码来简单的讲解一下:

 


//下面的排序规则是先根据u从小到大排序,如果u相等那么就根据 w 从小到大排序
struct node      //首先我们借用结构体
{  
	char ch[105];
	int z;
    int w;
    int u;                                   //定义了一个元素所包含的4个元素。
    friend bool operator < (node p1,node p2)  //固定格式 先记住吧。
    {    
        if(p1.u != p2.u){
			return p1.u > p2.u;             // "<"为从大到小排列,">"为从小到大排列     
		}
		else{
			return p1.w > p2.w;
		}
    }
}A;
/*
优先队列的定义 priority_queue<node> que
*/

 这个里面有一个不好理解的就是 "<"为从大到小排列,">"为从小到大排列      这个可能和我们想的不太一样,大家一定要牢牢的记住。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值