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数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
随机推荐
- java arraylist的问题
不得不说,我犯了错,很基础的.. 遍历list的时候可以删除数组元素吗? 答案是:简单/增强for循环不可以,list.iterator()这样的方式就可以. 我之前做过类似面试题的,不过忘记了, 不 ...
- ios UIView autoresizingSubview 属性
自动尺寸调整行为 当您改变视图的边框矩形时,其内嵌子视图的位置和尺寸往往也需要改变,以适应原始视图的新尺寸.如果视图的autoresizesSubviews属性声明被设置为YES,则其子视图会根据au ...
- DDD~基础设施层~续
回到目录 在之前写的DDD~基础设施层文章中,提到了UnitOfWork,它里面有一些方法,但经过项目证明,不应该有Save和IsExplicitSubmit,而这个工作单元只起到了数据上下文统一的作 ...
- WPF中关于自定义控件的滚动条鼠标停留在内容上鼠标滚轮滚动无效的问题
问题起因:在一个用户控件里放置了1个TreeView垂直顺序放置. 当用户控件中的内容超过面板大小时,滚动条会自动出现 ,但是只有当鼠标指示在右边滚动条的那一条位置时,才支持鼠标滚轴滚动. 点在控件内 ...
- AngularJS中Directive指令系列 - scope属性的使用
文章是转的,我做下补充.原文地址:https://segmentfault.com/a/1190000002773689 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部 ...
- 理解与模拟一个简单web服务器
先简单说下几个概念,根据自己的理解,不正确请见谅. web服务器 首先要知道什么是web服务器,简单说web服务器就是可以使用HTTP传输协议与客户端进行通信的服务器.最初的web服务器只能用来处理静 ...
- universal image loader自己使用的一些感受
1.全局入口的Application定义初始化: ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Build ...
- CSS 性能
http://boagworld.com/dev/why-you-should-care-about-css-page-performance/ http://css-tricks.com/effic ...
- 对于资源上MissingScript的清理方案讨论
Unity工程随着复杂度的提升,常会有Prefab上的脚本丢失的情况,如下图所示: 首先失去关联的脚本,是没有线索找到原来是什么文件的,那么有没有办法批处理将这些MissingScript进行一下清理 ...
- jsp实现简单的分页
效果如下:<%-- Document : page Created on : 2014-11-18, 8:55:02 Author : HJZ --%> <%@page conten ...