数据结构 - 队列
来源:互联网 发布:起名字软件 编辑:程序博客网 时间:2024/06/10 00:30
郝斌版《数据结构》学习笔记
时间:2015.08.31 - 2015.09.05
队列:“先进先出”(两个口,一个口进,一个口出,时间相关的适用)。
front
rear 队尾
入队
出队
链式队列 - 用链表实现
静态队列 - 用数组实现
静态队列通常都必须是循环队列
为什么是循环队列?
传统的数组增减之后,内存空余且不能使用
需要几个参数?各参数的含义?
2个参数不同场合有不同的含义
1)队列初始化【front和rear的值都为零】
2)队列非空【front代表队列的第一个元素,rear代表队列最后一个有效元素的下一个元素】
3)队列空【front和rear值相等,但不一定是零】
入队、出队伪算法讲解
入队:
两步完成:1.将值存入r所代表的位置
2.错误的写法r = r + 1;
正确的写法是:r = (r + 1) % 数组的长度
出队:
一步完成:1. f = (f + 1) % 数组的长度
循环队列判断为空、已满
为空:front和rear值相等
已满:
预备知识:
front与rear的值大小不定,可大可小可相等。
两种方式:
1、多增加一个表标识参数
2、少用一个元素【通常使用的方式】
如果front与rear紧挨着,则队列已满
if ((r + 1) % 数组长度 == f)
已满
else
未满
队列的具体应用:
所有和时间有关的操作都有队列的影子。
# include <stdio.h>
# include <malloc.h>
typedef struct Queue
{
int * pBase;
int front;
int rear;
} QUEUE;
void init(QUEUE *); //加*改变实参
bool en_queue(QUEUE *, int); //入队
void traverse_queue(QUEUE *); //遍历
bool full_queue(QUEUE *);
bool empty_queue(QUEUE *);
bool out_queue(QUEUE *, int *); //出队
int main(void)
{
QUEUE Q;
int val;
init(&Q);
en_queue(&Q, 1);
en_queue(&Q, 2);
en_queue(&Q, 3);
en_queue(&Q, 4);
en_queue(&Q, 5);
en_queue(&Q, 6);
traverse_queue(&Q);
if (out_queue(&Q, &val))
printf("succeed, 出队元素是:%d\n", val);
else
printf("failed");
traverse_queue(&Q);
return 0;
}
void init(QUEUE * pQ)
{
pQ->pBase = (int *)malloc(sizeof(int) * 6);
pQ->front = 0;
pQ->rear = 0;
}
bool full_queue(QUEUE * pQ)
{
if ((pQ->rear + 1) % 6 == pQ->front)
return true;
else
return false;
}
bool en_queue(QUEUE * pQ, int val)
{
if (full_queue(pQ))
{
return false;
}
else
{
pQ->pBase[pQ->rear] =val;
pQ->rear = (pQ->rear + 1) % 6;
return true;
}
}
void traverse_queue(QUEUE * pQ)
{
int i = pQ->front;
while (i != pQ->rear)
{
printf("%d ", pQ->pBase[i]);
i = (i + 1) % 6;
}
printf("\n");
return;
}
bool empty_queue(QUEUE * pQ)
{
if (pQ->front == pQ->rear)
return true;
else
return false;
}
bool out_queue(QUEUE * pQ, int * pVal)
{
if (empty_queue(pQ))
return false;
else
{
*pVal = pQ->pBase[pQ->front];
pQ->front = (pQ->front + 1) % 6;
return true;
}
}
0 0
- 数据结构---队列
- 数据结构--队列
- 数据结构队列
- 数据结构---队列
- 数据结构(队列)
- 数据结构-队列
- 数据结构---->队列
- 数据结构---队列
- 【数据结构】队列
- 数据结构--队列
- 【数据结构】 队列
- 数据结构 -- 队列
- 数据结构--队列
- 数据结构:队列
- 数据结构 队列
- 数据结构----队列
- 数据结构----队列
- 数据结构-队列
- vs2013 常用快捷键
- 数据结构 - 栈
- Ubuntu14.04配置校园网认证(802.1x认证)
- select 1 from ... sql语句中的1代表什么意思?
- iOS 定位当前城市
- 数据结构 - 队列
- iOS实现WebView上图片放大 用法及原理
- VIM编辑器:使用cscope老是出现一些E259: no matches found for csope query 问题;
- 数据结构 - 递归
- leetcode Sort List
- 如何提问才能进阶成为前端大神?(转自张鑫旭的博客)
- 使用Bootstrap时遇到的问题
- zzuli OJ 1092: 素数表(函数专题)
- 数据结构 - 树