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数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
随机推荐
- Model模型和Module模块的区别
资料是从网上找的,具体是谁最先写的,不清楚了. Model通常是指模型.这个模型也许是你需求分析出来的, 也许是你算法做出来的. 不过最大可能是MVC的网站,或者是GUI开发模式中的M里的那个模型. ...
- 我的ef连接mysql之旅
摘要: install-package ef6,mysql.data:增加provider invariantName="MySql.Data.MySqlClient" typ ...
- struts2学习笔记之八:Action中方法的动态调用
方法一:action名称+!+方法名称+后缀 Action类中增加addUser()和delUser()方法, package com.djoker.struts2; import org.apach ...
- linux 学习 设置固定网Ip
本人使用CentOs6.5 最近在学习linux操作系统,单在使用shell连接前都要使用ifconfig eth0 设置一个临时IP让我不胜其烦.决定学习设置一个固定IP 步骤: 1.登录计算机后使 ...
- CMD复制文件夹
CMD复制文件夹 xcopy /E/I/Y "D:\GitHub\WIP\app" "D:\GitHub\WIP_server\html\webshell"
- stackView的隐藏与显示注意事项
1.想要通过变换stackView的y值来让stackView显现/隐藏,同时让其中的button能点击响应,得用topCons 2.导航栏的tinBar要设置为非透明状态
- CSS3新技能学习笔记
说来惭愧自认为对css了解,但在项目中却很少有正确的使用css,如果面向对象的css吧,其实也不是不想用而是css天生就是面向对象的,高度可重用,但是如果把每个都单独提取,难免会有过多的class以及 ...
- 因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 。。。
因为相同类型的其他实体已具有相同的主键值.在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified&quo ...
- ASP.NET MVC图片管理(上传,预览与显示)
先看看效果(下面gif动画制作有点大,5.71MB): 题外话:上面选择图片来源于Insus.NET的新浪微博:http://weibo.com/104325017 也是昨晚(2015-07-03)I ...
- Hadoop学习笔记—MapReduce的理解
我不喜欢照搬书上的东西,我觉得那样写个blog没多大意义,不如直接把那本书那一页告诉大家,来得省事.我喜欢将我自己的理解.所以我会说说我对于Hadoop对大量数据进行处理的理解.如果有理解不对欢迎批评 ...