在C++中只要#include<queue>即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序)

1. push

2. pop

3. size

4. empty

5. front

6. back

接下来逐一举例说明:

1. push

队列中由于是先进先出,push即在队尾插入一个元素,如:

  1. queue<string> q;
  2. q.push("Hello World!");
  3. q.push("China");
  4. cout<<q.front()<<endl;

可以输出:Hello World!

2. pop

将队列中最靠前位置的元素拿掉,是没有返回值的void函数。如:

  1. queue<string> q;
  2. q.push("Hello World!");
  3. q.push("China");
  4. q.pop();
  5. cout<<q.front()<<endl;

可以输出:China

原因是Hello World!已经被除掉了。

3. size

返回队列中元素的个数,返回值类型为unsigned int。如:

  1. queue<string> q;
  2. cout<<q.size()<<endl;
  3. q.push("Hello World!");
  4. q.push("China");
  5. cout<<q.size()<<endl;

输出两行,分别为0和2,即队列中元素的个数。

4. empty

判断队列是否为空的,如果为空则返回true。如:

  1. queue<string> q;
  2. cout<<q.empty()<<endl;
  3. q.push("Hello World!");
  4. q.push("China");
  5. cout<<q.empty()<<endl;

输出为两行,分别是1和0。因为一开始队列是空的,后来插入了两个元素。

5. front

返回值为队列中的第一个元素,也就是最早、最先进入队列的元素。注意这里只是返回最早进入的元素,并没有把它剔除出队列。如:

  1. queue<string> q;
  2. q.push("Hello World!");
  3. q.push("China");
  4. cout<<q.front()<<endl;
  5. q.pop();
  6. cout<<q.front()<<endl;

输出值为两行,分别是Hello World!和China。只有在使用了pop以后,队列中的最早进入元素才会被剔除。

6. back

返回队列中最后一个元素,也就是最晚进去的元素。如:

  1. queue<string> q;
  2. q.push("Hello World!");
  3. q.push("China");
  4. cout<<q.back()<<endl;

输出值为China,因为它是最后进去的。这里back仅仅是返回最后一个元素,也并没有将该元素从队列剔除掉。

其他的方法不是很常用,就不再研究了。

接下来我们使用链表,自己将queue类写出来,将其所有方法都实现。代码都是自己写的,最后随便写了点main函数小测一下,没有发现问题,如果有不足还望能指正。如下:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4.  
  5. template <typename T>
  6. struct Node{
  7. T value;
  8. Node<T> *next;
  9. Node<T>(){next = NULL;}
  10. };
  11.  
  12. template <typename T>
  13. class MyQueue{
  14. private:
  15. unsigned int num;
  16. Node<T> *first;
  17. Node<T> *last;
  18.  
  19. public:
  20. MyQueue();
  21. ~MyQueue();
  22. unsigned int size();
  23. void push(T element);
  24. void pop();
  25. bool empty();
  26. T back();
  27. T front();
  28. };
  29.  
  30. template <typename T>
  31. MyQueue<T>::MyQueue(){
  32. num = ;
  33. first = NULL;
  34. last = NULL;
  35. }
  36.  
  37. template <typename T>
  38. MyQueue<T>::~MyQueue(){
  39. while(!empty()){
  40. pop();
  41. }
  42. }
  43.  
  44. template <typename T>
  45. unsigned int MyQueue<T>::size(){
  46. return num;
  47. }
  48.  
  49. template <typename T>
  50. bool MyQueue<T>::empty(){
  51. return (==num);
  52. }
  53.  
  54. template <typename T>
  55. void MyQueue<T>::push(T element){
  56. Node<T> *temp = new Node<T>;
  57. temp->next = NULL;
  58. temp->value = element;
  59. if ( == this->num){
  60. first = temp;
  61. last = temp;
  62. }else{
  63. last->next = temp;
  64. last = temp;
  65. }
  66. (this->num)++;
  67. }
  68.  
  69. template <typename T>
  70. void MyQueue<T>::pop(){
  71. if (==this->num){
  72. cout<<"No elements in the queue!"<<endl;
  73. }else if( == this->num){
  74. delete first;
  75. first = NULL;
  76. last = NULL;
  77. this->num = ;
  78. }else{
  79. Node<T> *temp = first;
  80. first = first->next;
  81. delete temp;
  82. (this->num)--;
  83. }
  84. }
  85.  
  86. template <typename T>
  87. T MyQueue<T>::back(){
  88. if (==this->num){
  89. cout<<"No elements in the queue!"<<endl;
  90. return NULL;
  91. }
  92. return last->value;
  93. }
  94.  
  95. template <typename T>
  96. T MyQueue<T>::front(){
  97. if(== this->num){
  98. cout<<"No elements in the queue!"<<endl;
  99. return NULL;
  100. }
  101. return first->value;
  102. }
  103.  
  104. int main(){
  105. MyQueue<string> q;
  106. q.push("Hello world");
  107. q.push("China");
  108. cout<<q.front()<<endl;
  109. cout<<q.size()<<endl;
  110. cout<<q.back()<<endl;
  111. q.pop();
  112. cout<<q.empty()<<endl;
  113. cout<<q.back()<<endl;
  114. cout<<q.front()<<endl;
  115. q.pop();
  116. cout<<q.size()<<endl;
  117. cout<<q.empty()<<endl;
  118. system("pause");
  119. return ;
  120. }

队列实现

[C++基础]队列<queue>中的常用函数的更多相关文章

  1. 学习笔记之Java队列Queue中offer/add函数,poll/remove函数,peek/element函数的区别

    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. Java中Que ...

  2. socket编程中客户端常用函数

    1 常用函数 1.1   connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...

  3. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  4. Mysql中的常用函数:

    Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...

  5. numpy函数库中一些常用函数的记录

    ##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...

  6. 日期时间函数 mysql 和sqlserver 中对于常用函数的日期和时间函数的区别

    1. sqlserver中获取时间用getdate(),默认返回格式是2019-01-21 13:58:33.053,具体的年月日,时分秒毫米,年月日之间用短线连接,时分秒之间用冒号连接,秒和毫米之间 ...

  7. 算法与数据结构基础 - 队列(Queue)

    队列基础 队列具有“先进先出”的特点,用这个特点我们可以用它来处理时间序列相关或先后次序相关的问题,例如 LeetCode题目 933. Number of Recent Calls,时间复杂度O(1 ...

  8. MySQL基础篇(3)常用函数和运算符

    一.字符串函数(索引位置都从1开始) CONCAT(S1,S2,...Sn): 连接S1,S2,...Sn为一个字符串,任何字符串与NULL进行连接的结果都是NULL INSERT(str,x,y,i ...

  9. C++中string常用函数用法总结

    string(s小写)是C++标准库中的类,纯C中没有,使用时需要包含头文件#include<string>,注意不是<string.h>,下面记录一下string中比较常用的 ...

随机推荐

  1. Alpha 冲刺 (3/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助后端界面的开发 搭建项目运行的服务器环境 ...

  2. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

  3. 2019.01.22 hdu5195 DZY Loves Topological Sorting(贪心+线段树)

    传送门 题意简述:给出一张DAGDAGDAG,要求删去不超过kkk条边问最后拓扑序的最大字典序是多少. 思路:贪心帮当前不超过删边上限且权值最大的点删边,用线段树维护一下每个点的入度来支持查询即可. ...

  4. 2019.01.13 loj#6515. 贪玩蓝月(线段树分治+01背包)

    传送门 题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组(wi,vi)(w_i,v_i)(wi​,vi​),支持询问从当前队列中选取若干个元素是的他们的和对 MODMODM ...

  5. Jquery中parentsUntil函数调用最容易犯的三个错误

    来自 :http://jquery01.diandian.com/post/2012-01-16/14500044 Jquery中parentsUntil函数调用最容易犯的三个错误 Jquery的pa ...

  6. MySQL批量修改表前缀

    error_reporting(0); $old_pre = 'tdr_'; // 原表前缀 $new_pre = 'db_'; // 新表前缀 // 配置连接 $db = new mysqli('1 ...

  7. springboot mybatis 分页整合

    spring boot 整合mybatis ,分两块mybatis 整合,分页整合.   1.pom文件增加 <dependency> <groupId>org.mybatis ...

  8. centos6上安装jenkins

    一.安装jdk 1.下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  9. Mybatis-Plus 实战完整学习笔记(一)------简介

    第一章    简介      1. 什么是MybatisPlus                MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只 ...

  10. git,版本控制教程

    主要内容 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 分支管理     *****此处没有深讲***** 一.两条基本查看命名 查看状态命令: git status 查看修改内容命令: g ...