C++抽象编程——STL(3)——queue 类

来源:互联网 发布:福建摩尔软件骗局 编辑:程序博客网 时间:2024/05/20 03:48

在上一篇的博文中,我们提到过一个叫栈(stack)的数据结构,它是一种符合最后一个进栈的元素一定会是第一个出栈的元素(LIFO),这种机制在计算机编程中是非常有用的,因为它反映了我们编程中函数调用的机制。然而在现实生活中却显得限制太多显得无用。

在人类社会中,我们的公平的集体概念赋予了先发制人的优先权,如“先到先得”所表达的那样。在编程中,这种策略的通常称为是“先到先得” ,缩写为FIFO。
使用FIFO规则存储项目的数据结构称为队列。 队列中的基本操作(类似于栈的push和pop操作)被称为入队(enqueue)和出队(dequeue)。 在队列的末尾添加一个新元素,称为它的尾部(tail)。出队操作将删除队列开头的元素,这个元素称为它的头(head)。这两者的差别用图表可以很容易的看出来,就像下面一样:
在stack中,进程必须从这个数据结构的尾部添加或者删除元素,就像这样:
stack

在queue中,进程通过下面的方式来添加或者删除元素,就像这样:
queue

Queue类的结构看起来非常像它对应的Stack结构。下面的图列出了常用的方法,唯一的区别在于术语,因为它反映了元素排序的不同。
方法
我们看看是不是跟stack类很像呢?(上一篇的链接)可能你觉得这样形容不是很贴切,什么叫很像,明明就是嘛,方法都一样了。哈哈。那好,我们就从上一篇博文改编一下,就是下面的表格了:

方法 用法 pop() 移除队列中第一个元素,但是不返回它的值 back() 返回队列q中最后一个元素(也就是最后被插入的元素) push() 添加一个元素到队列的尾部 size() 返回队列中的元素个数 empty() 判断队列中的元素是否为空,返回的为bool类型 emplace() 向队列的首位置插入一个元素,但是不返回其值 front() 返回队列q内的第一个元素,但是不移除这个元素

关于它的扩展功能我们一样可以参考上一篇的博文stack的方法,我就不多说。因为这个数据结构只是跟stack完全相反的存放类型而已。我们又在stack上花了大工夫讲解,所以队列的基本重点就完了。是不是很快?但是运用起来却不是那么简单。下一篇我们就提一下它的应用。

0 0
原创粉丝点击