当前位置:   article > 正文

数据结构与性质(1)队列(queue)基础板子_队列的性质

队列的性质

        队列的定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。它允许在表的一端插入数据,在另一端删除元素。插入元素的这一端称之为队尾。删除元素的这一端我们称之为队首。它的特点是数据元素先进先出(FIFO),类似于排队取票(买到票的在队伍前面,要离开队伍,与删除操作类似;没买到票的在队伍后面,新来的人在队尾,与插入操作类似)。

附简图:

        Head

.......

......

......

         Tail

           C                                                                                                       A                      B

则C从head处离开,若有新来的D,则跟着Tail处的B进来。

(打饭先到先得,不能插队!) 

PS:为了避免head与tail重合,我们令tail记录队尾的下一个位置。

实际上,queue也可作为一个结构体类型:

  1. struct queue
  2. { int data[1000];//队列主体,用于存放数据
  3. int head;//队首
  4. int tail;//队尾
  5. };

一.不使用C++中STL库函数对队列进行操作(创建、入队、出队)

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<queue>
  4. struct queue
  5. { int data[100];
  6. int head;
  7. int tail;
  8. };
  9. int main()
  10. { struct queue q;
  11. int i;
  12. //初始化队列
  13. q.head=1;
  14. q.tail=1;
  15. for(i=1;i<10;i++)
  16. { scanf("%d",&q.data[q.tail]);//依次向队列中插入9个数
  17. q.tail++;
  18. }
  19. while(q.head<q.tail) //当队列不为空的时候执行循环
  20. {
  21. //打印队首并将队首出队(等同于没有q.data[1])
  22. printf("%d",q.data[q.head]);
  23. q.head++;
  24. //先将新的队首的数添加到队尾
  25. q.data[tail]=q.data[head];
  26. q.tail++;//将队首出队
  27. }
  28. return 0;
  29. }

由上述代码可知,我们只能对队列的head和tail进行访问,因此队列不能用for等循环语句进行遍历

二:C++STL中queue的常见接口(内置函数)

构造函数:

  1. queue<T> que;//queue采用模板类实现,queue对象的默认构造形式
  2. queue(const queue &que);//拷贝构造函数

赋值操作:

queue& operator=(const queue &que);//重载等号操作符

数据存取:

  1. push(elem);//向队尾添加元素(类似于v.push_back())
  2. pop();//从队首删除第一个元素
  3. back();//返回队尾值
  4. front();//返回队首值

大小操作:

  1. empty();//判断堆栈是否为空
  2. size();//返回栈的大小

实例操作:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<queue>
  4. using namespace std;
  5. //队列 queue
  6. void test11()
  7. { queue<int> q;//创建queue
  8. //准备数据
  9. int a[5];
  10. for(int i=0;i<5;i++)
  11. { a[i]=i;
  12. }//对a[10]中的每个元素进行赋值
  13. //入队
  14. q.push(a[0]);
  15. q.push(a[1]);
  16. q.push(a[2]);
  17. q.push(a[3]);
  18. q.push(a[4]);
  19. printf("队列大小为: ",q.size());
  20. //判断只要队列不为空,查看队头,查看队尾,出队
  21. while(!q.empty)//队列不为空时
  22. { printf("%d",q.front());//查看队首
  23. printf("%d",q.back());//查看队尾
  24. q.pop();//出队
  25. printf("队列大小为: ",q.size());//查看队列大小
  26. }
  27. }
  28. int main()
  29. { test11()
  30. return 0;
  31. }
  32. //PS:queue与vector不同,不提供迭代器,更不支持随机访问
  33. /*常用接口总结:
  34. push-----入队
  35. pop------出队
  36. front-------返回队首元素
  37. back--------返回队尾元素
  38. empty-------判断队列是否为空
  39. size--------返回队列的大小
  40. */

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/913685
推荐阅读
相关标签
  

闽ICP备14008679号