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数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
随机推荐
- [专业名词·硬件] 1、等效串联电阻ESR概述及稳压电路中带有一定量ESR电容的好处
一.等效串联电阻ESR概述 ESR是Equivalent Series Resistance的缩写,即“等效串联电阻”.理想的电容自身不会有任何能量损失,但实际上,因为制造电容的材料有电阻,电 ...
- Java的一个高性能快速深拷贝方法。Cloneable?
本人在设计数据库缓存层的时候,需要对数据进行深拷贝,这样用户操作的数据对象就是不共享的. 这个思路实际上和Erlang类似,就是用数据不共享解决并发问题. 1. 序列化? 原来的做法,是用序列化,我用 ...
- 微软Edge 内嵌的JavaScript 引擎即将开源
微软于今日(2015年12月10日)宣布即将开源Chakra核心控件,并改名为“ChakraCore”,该控件包含所有Edge JavaScript 引擎的所有核心功能.ChakraCore 将于下月 ...
- Oracle数据库面试题【转载】
1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windo ...
- Atitti css transition Animation differ区别
Atitti css transition Animation differ区别 1.1. transition的优点在于简单易用,但是它有几个很大的局限. 1 1.2. Transition ...
- js 事件
事件:一般用于浏览器与用户操作进行交互 js事件的三种模型:内联模型.脚本模型.DOM2模型 内联模型:事件处理函数是HTML标签的属性 <input type="button&quo ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- React(三)组件的生命周期
Component Specs and LifeCycle <div id="app"></div> <script src="bower_ ...
- Script Task 引用 package variable
Script Task 能够使用C#代码进行编程,许多复杂的逻辑都可以使用C# 脚本来实现,不仅灵活,而且强大. 1,能够传递package variable 给 Script Task ,并且Scr ...
- 【WP开发】使用磁倾仪
磁倾仪,也叫倾斜仪,主要用来检测手机设备在各个轴上旋转的角度.注意,磁倾仪与陀螺仪的差异,陀螺仪的关注点是旋转的角速度,它并不关注角度,只注重速度.而磁倾仪的读数就是设备倾斜的角度. 不管是使用重力感 ...