线性结构_队列

队列定义:一种可以实现“先进先出”的存储结构

这里主要讲述的是静态队列。
  1. 静态队列的参数:front以及rear。
    • front为静态队列的首个有效元素。
    • rear为静态队列最后一个有效元素的下一位。
  2. 静态队列的初始化
    • 为队列分配内存空间;
    • 令front和rear的值相等;
  3. 静态队列存储满
    • front==(rear+1)%数组长度
  4. 静态队列为空
    • front和rear的值相等
  5. 静态队列入队
    • rear=(rear+1)%数组长度
  6. 静态队列出队
    • front=(front+1)%数组的长度
  7. 静态队列都是循环队列,主要是为了节省内存空间以及操作的方便性。同时,这也是理解上述操作的基础。

循环队列模型图:


以下是队列的详细程序

函数声明以及结构体的构建

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <stdbool.h>
  4 #include <stdlib.h>
  5 typedef struct Queue
  6 {
  7     int *pBase;
  8     int front;
  9     int rear;
 10 }QUEUE;

接下来对队列进行初始化:

 34 void init_queue( QUEUE *pQ )
 35 {
 36     pQ->pBase = ( int * )( malloc( sizeof( int ) * 7 ) );
 37     pQ->front = 0;
 38     pQ->rear = 0;
 39 }

初始化完成后进行入队操作,在对队列进行入队操作之前需要判断队列是否已满?

 40 bool full_queue( QUEUE *pQ )
 41 {
 42     if( ( pQ->rear + 1 ) % 7 == pQ->front )
 43         return true;
 44     else
 45         return false;
 46 }

 47 bool en_queue( QUEUE *pQ, int en_queue_val )
 48 {
 49     if( full_queue( pQ ))
 50         return false;
 51     else
 52     {
 53         pQ->pBase[ pQ->rear ] = en_queue_val;
 54         pQ->rear = ( pQ->rear + 1 ) % 7;
 55         return true;
 56     }
 57 }

遍历整个队列,在遍历整个队列之前需要判断队列是否为空

 75 bool empty_queue( QUEUE *pQ )
 76 {
 77     if( pQ->front == pQ->rear )
 78         return true;
 79     else
 80         return false;
 81 }

 58 bool traverse_queue( QUEUE *pQ )
 59 {
 60     int i = pQ->front;
 61     if( empty_queue( pQ ))
 62     {
 63         return false;
 64     }
 65     else
 66     {
 67         while( i != pQ->rear )
 68         {
 69             printf( "the%dvalue is:%d\n", i, pQ->pBase[ i ] );
 70             i = ( i + 1 ) % 7;
 71         }
 72         return true;
 73     }
 74 }
出队操作,这个时候也需要判断队列是否为空:

 82 bool out_queue( QUEUE * pQ, int *pVal )
 83 {
 84     if( empty_queue( pQ ) )
 85         return false;
 86     else
 87     {
 88         *pVal = pQ->pBase[ pQ->front ];
 89         pQ->front = ( ( pQ->front + 1 ) % 7 );
 90         return true;
 91     }
 92 }
main()函数内容:

 17 int main()
 18 {
 19     int out_queue_val = 0;
 20     QUEUE New_Queue;
 21     init_queue( &New_Queue );
 22     en_queue( &New_Queue, 1 );
 23     en_queue( &New_Queue, 2 );
 24     en_queue( &New_Queue, 3 );
 25     en_queue( &New_Queue, 4 );
 26     en_queue( &New_Queue, 5 );
 27     en_queue( &New_Queue, 6 );
 28     traverse_queue( &New_Queue );
 29     out_queue( &New_Queue, &out_queue_val );
 30     printf( "output queue value is%d\n", out_queue_val );
 31     traverse_queue( &New_Queue );
 32     return 0;
 33 }
在整个程序的调试过程中主要有三个问题:
1.使用malloc函数未引用头文件
2.返回bool类型时在函数末尾未return true;导致未能入队成功
3.变量写错。
以上内容引以为戒!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值