线性结构_队列
2012-12-12 22:39
260 查看
队列定义:一种可以实现“先进先出”的存储结构
这里主要讲述的是静态队列。
静态队列的参数:front以及rear。
front为静态队列的首个有效元素。
rear为静态队列最后一个有效元素的下一位。
静态队列的初始化
为队列分配内存空间;
令front和rear的值相等;
静态队列存储满
front==(rear+1)%数组长度
静态队列为空
front和rear的值相等
静态队列入队
rear=(rear+1)%数组长度
静态队列出队
front=(front+1)%数组的长度
静态队列都是循环队列,主要是为了节省内存空间以及操作的方便性。同时,这也是理解上述操作的基础。
循环队列模型图:
以下是队列的详细程序
函数声明以及结构体的构建
接下来对队列进行初始化:
初始化完成后进行入队操作,在对队列进行入队操作之前需要判断队列是否已满?
遍历整个队列,在遍历整个队列之前需要判断队列是否为空
1.使用malloc函数未引用头文件
2.返回bool类型时在函数末尾未return true;导致未能入队成功
3.变量写错。
以上内容引以为戒!!!
这里主要讲述的是静态队列。
静态队列的参数: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.变量写错。
以上内容引以为戒!!!
相关文章推荐
- 线性结构之队列 Java版
- 【算法和数据结构】_9_线性结构_队列_续_1
- 抽象数据类型-线性结构-先进先出:队列
- 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)
- 线性结构之栈和队列
- 数据结构之线性结构---队列 顺序储存
- 数据结构全攻略--线性结构不攻自破之栈和队列
- 数据结构之线性结构-队列结构(静态队列的实现)
- 数据结构之线性表——队列的链式存储
- 数据结构——线性结构(7)——链队列的实现
- 常见的线性列表结构---【数组、链表、栈、队列、堆】
- 线性结构--->循环队列的链式储存实现
- 线性结构-队列
- 线性结构之链队列实现
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- 3. 线性结构--队列
- 线性结构——队列
- (三)数据结构之线性表的简单实现:队列
- 数据结构知识汇总1:线性表,栈和队列
- 线性结构(队列和栈)