队列定义:一种可以实现“先进先出”的存储结构
这里主要讲述的是静态队列。- 静态队列的参数:front以及rear。
- front为静态队列的首个有效元素。
- rear为静态队列最后一个有效元素的下一位。
- 静态队列的初始化
- 为队列分配内存空间;
- 令front和rear的值相等;
- 静态队列存储满
- front==(rear+1)%数组长度
- 静态队列为空
- front和rear的值相等
- 静态队列入队
- rear=(rear+1)%数组长度
- 静态队列出队
- front=(front+1)%数组的长度
- 静态队列都是循环队列,主要是为了节省内存空间以及操作的方便性。同时,这也是理解上述操作的基础。
循环队列模型图:
以下是队列的详细程序
函数声明以及结构体的构建
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.变量写错。
以上内容引以为戒!!!