您的位置:首页 > 理论基础 > 数据结构算法

线性结构_队列

2012-12-12 22:39 260 查看
队列定义:一种可以实现“先进先出”的存储结构

这里主要讲述的是静态队列。
静态队列的参数: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.变量写错。

以上内容引以为戒!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息