当前位置:   article > 正文

数据结构--队列的顺序存储_队列存储数据

队列存储数据

系列文章目录

第五话  数据结构之队列

文章目录

  • 一、了解什么是队列
  • 二、队列的基本特征
  • 三、队列的基本操作
    • 1.存储结构
    • 2.基本操作
    • 3.实现运用
  • 四、总结


前言

     生活中到处都是队列形式,比如买票需要排队、上下飞机需要排队、递交申请表需要排队。排队是有目的地一个跟一个的队列,人类文明社会中,排队是文明的表现,是有限资源的分配方式之一,以顺序确保公平,是“先到先得”。

     从抽象层面看,凡是两端开口的容器或通道都可以看成列队,如水管、电缆、隧道、单行车道等。对于计算机来说,队列无处不在。


一、什么是队列?

     队列是一种“先进先出”的数据结构,即插入操作在表的一端进行,而删除操作在表的另一端进行。和日常生活中的排队是一致的,最先进入列队的一端称为对头。队列的例子在生活中比比皆是,比如一条生产线、排队购物等;在计算机的操作系统中也存在着各种队列,如资源等待队列】就绪队列等。

二、队列的基本特征

先进先出或者后进后出:最先进去的最先出来,最后进去的最后出来

三、队列的基本操作

1.定义存储结构--顺序存储

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define maxsize 100
  4. typedef int Elemtype;
  5. typedef struct{
  6. Elemtype date[maxsize];
  7. int rear;
  8. int front;
  9. }Queue;

2.将队列初始化 

  1. Queue *init_queue()
  2. {
  3. Queue *Q;
  4. Q = (Queue*)malloc(sizeof(Queue));
  5. Q->rear = 0;
  6. Q->front = 0;
  7. return Q;
  8. }

3.入队操作

  1. int pushqueue(Queue *Q,Elemtype x)
  2. {
  3. if((Q->rear+1)%maxsize==Q->front){
  4. printf("队列已满,无法入队\n");
  5. return 0;//入队失败返回0
  6. }else{
  7. Q->date[Q->rear] = x;
  8. Q->rear = (Q->rear+1)%maxsize;
  9. return 1;//入队成功返回1
  10. }
  11. }

4.出队操作

  1. int popqueue(Queue *Q,Elemtype *x)
  2. {
  3. if(Q->front==Q->rear){
  4. printf("队列已空,无法出栈\n");
  5. return 0;//队空时返回值为0;
  6. }else{
  7. *x = Q->date[Q->front];
  8. Q->front = (Q->front+1)%maxsize;
  9. return 1;
  10. }
  11. }

5.在主函数中实现调用

  1. int main()
  2. {
  3. Queue *Q1;
  4. int cnt = 0;
  5. int i = 0;
  6. Elemtype x;
  7. Q1 = init_queue();
  8. printf("请输入入队的数,输入-1代表结束:\n");
  9. scanf("%d",&x);
  10. while(x!=-1){
  11. pushqueue(Q1,x);
  12. cnt++;
  13. scanf("%d",&x);
  14. }
  15. for(i=0;i<cnt;i++){
  16. popqueue(Q1,&x);
  17. printf("x = %d\n",x);
  18. }
  19. return 0;
  20. }

 


四、总结

由于循环队列的存储特性可知,如果应用程序中使用循环队列,则必须申请一个合理的队列长度;如果无法预估所用队列的大小,则宜采用链队列。

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

闽ICP备14008679号