C ~ 链式队列与循环队列
此处的链式与循环队列可以应用于BFS和树的层序遍历。下面是对其结构和基本操作的程序描述。
1、循环队列
解决循环队列的队空和队满的方法:
[1].增加一个参数count,用来记录数组中当前元素的个数;
[2].为避免队空和满两状态混淆,少用一个存储空间,也就是数组最后一个存数空间不用,(rear+1)% QSIZE= front 时, 队满;
a)判断是否为空队列:front==rear; b)判断队列是否已满:front=(rear+1)%size;
typedef struct{ //队列结构定义
int front;
int rear;
int count; //队列元素计数
int key[QSIZE];
}BFSQueue;
void InitBFSQueue(BFSQueue *BFSQ) //队列初始化
{
BFSQ->front=; //front指向队列第一个元素
BFSQ->rear=; //rear指向队列中下一个空位
BFSQ->count=;
}
int EmptyBFSQueue(BFSQueue *BFSQ) //空
{
return BFSQ->count==;
}
int FullBFSQueue(BFSQueue *BFSQ) //满
{
return BFSQ->count==QSIZE;
}
void AddBFSQueue(BFSQueue *BFSQ,int num) //插入
{
if(!FullBFSQueue(BFSQ))
{
BFSQ->count++;
BFSQ->key[BFSQ->rear]=num;
BFSQ->rear=(BFSQ->rear+) % QSIZE;
}
}
int DelBFSQueue(BFSQueue *BFSQ) //删除
{
int temp;
if(!EmptyBFSQueue(BFSQ))
{
BFSQ->count--;
temp=BFSQ->key[BFSQ->front];
BFSQ->front=(BFSQ->front+) % QSIZE;
return temp;
}
else
return NULL;
}
/******************************************************************/
2、链式队列
typedef struct QNode{ // 队列元素结构
int key;
struct QNode *next;
}QNode;
typedef struct{ // 队列结构
QNode *front;
QNode *rear;
int count;
}BFSQueue;
void InitBFSQueue(BFSQueue *BFSQ) //队列初始化
{
BFSQ->front=NULL;
BFSQ->rear=NULL;
BFSQ->count=;
}
int EmptyBFSQueue(BFSQueue *BFSQ) //空
{
return BFSQ->count==;
}
void AddBFSQueue(BFSQueue *BFSQ,int num) //插入
{
QNode *np=(QNode *)malloc(sizeof(QNode));
np->key=num;
np->next=NULL;
//BFSQ->count++;
if(!EmptyBFSQueue(BFSQ)) // 队列非空
{
BFSQ->rear->next=np;
BFSQ->rear=np;
}
else // 队列空
{
BFSQ->rear=np;
BFSQ->front=np;
}
BFSQ->count++;
}
int DelBFSQueue(BFSQueue *BFSQ) //删除
{
int temp;
QNode *tp=(QNode *)malloc(sizeof(QNode));
if(!EmptyBFSQueue(BFSQ)) //队列非空
{
//BFSQ->count--; //////注意,必须在队列判定之后增加或减小count的值///////
tp=BFSQ->front;
temp=tp->key;
if(BFSQ->count==) //出队后队列为空
{
BFSQ->rear=NULL;
BFSQ->front=NULL;
}
else //出队后队列非空
{
BFSQ->front=tp->next;
}
BFSQ->count--;
free(tp); //释放暂存指针
return temp;
}
else
return NULL;
}
C ~ 链式队列与循环队列的更多相关文章
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例
1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...
- [从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...
- TypeScript算法与数据结构-队列和循环队列
本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...
- 队列(循环队列)----C语言
线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构 非线性结构:不满足线性结构的数据结构 队列 队列一般分为两类:链式队列和顺序队列 链式队列---链式队列即用链表 ...
- C#用链式方法表达循环嵌套
情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...
- Java数据类型Stack栈、Queue队列、数组队列和循环队列的比较
判断括号是否匹配:调用java本身 import java.util.Stack; public class Solution { public boolean isValid(String s){ ...
- java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
随机推荐
- iphone按home键后,正在运行的程序是否退出了呢?
是否一直有个疑问,当iphone手机正在运行一个APP,如果按Home键后,那么原来正在运行的程序还在运行吗?如果开发过ios程序,可能不是问题,如果没有开发过的,可能会疑惑了,我就简单的说一下.以几 ...
- Linux下Java开发环境搭建—CentOS下Mysql安装教程
本人学习Linux时使用的是CentOs5.5版本,在该环境中,Mysql的安装方法有很多种,下面我只讲我这次成功了的方法,作为一个记录,供大家参考,同时给自己做一个笔记. MySQL下载 1.进入网 ...
- XMPie Tracking 操作
XMPie Tracking 操作 1.1 打开页面 我们随便打开一个页面,这里打开landing.aspx 我们想要跟踪页面,选中DW上面的TrackingàTracking Page Vis ...
- UIButton添加倒计时
最近一个项目有获取手机短信跟邮箱验证码功能, 所以要加一个UIButton倒计时功能 例子代码如下: //获取验证码按钮 - (IBAction)getButtonClick:(UIButton *) ...
- 第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
回到目录 之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转,这给我们的应用程序在耦合度上变得高了,同时可测试性加强了,当然,这些的 ...
- 深入理解CSS绝对定位
× 目录 [1]定义 [2]特性 [3]display[4]clip[5]静态位置[6]overflow 前面的话 前面已经介绍了定位的偏移和层叠,例子中大量的应用了绝对定位.因为相较于相对定位和固定 ...
- Unity 3D制作2D游戏的几种方法
1.使用本身UGUI. 2.把摄像机的投影改为正交投影,不考虑Z轴. 3.使用Untiy自身的2D模式. 4.使用2D TooKit插件.
- JavaScript作用域原理(一)——作用域链
一.作用域的描述 JavaScript权威指南中对作用域有一句很精辟的描述:“JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.” 在JavaScript中,作用域的 ...
- Deep learning:四十九(RNN-RBM简单理解)
前言: 本文主要是bengio的deep learning tutorial教程主页中最后一个sample:rnn-rbm in polyphonic music. 即用RNN-RBM来model复调 ...
- Filter Effects - 使用 CSS3 滤镜处理图片
CSS3 Filter(滤镜)属性提供了提供模糊和改变元素颜色的功能.CSS3 Fitler 常用于调整图像的渲染.背景或边框显示效果.这里给大家分享的这个网站,大家可以体验下 CSS3 对图片的处理 ...