此处的链式与循环队列可以应用于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 ~ 链式队列与循环队列的更多相关文章

  1. javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例

    1 队列的基本概念 队列(Queue):也是运算受限的线性表.是一种先进先出(First In First Out ,简称FIFO)的线性表.只允许在表的一端进行插入,而在另一端进行删除. 队首(fr ...

  2. [从今天开始修炼数据结构]队列、循环队列、PriorityQueue的原理及实现

    [从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...

  3. TypeScript算法与数据结构-队列和循环队列

    本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...

  4. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  5. 数据结构----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  6. 队列(循环队列)----C语言

    线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构 非线性结构:不满足线性结构的数据结构 队列 队列一般分为两类:链式队列和顺序队列 链式队列---链式队列即用链表 ...

  7. C#用链式方法表达循环嵌套

    情节故事得有情节,不喜欢情节的朋友可看第1版代码,然后直接跳至“三.想要链式写法” 一.起缘 故事缘于一位朋友的一道题: 朋友四人玩LOL游戏.第一局,分别选择位置:中单,上单,ADC,辅助:第二局新 ...

  8. Java数据类型Stack栈、Queue队列、数组队列和循环队列的比较

    判断括号是否匹配:调用java本身 import java.util.Stack; public class Solution { public boolean isValid(String s){ ...

  9. java数据结构——队列、循环队列(Queue)

    每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...

随机推荐

  1. onSingleTapUp()和onSingleTapConfirmed()的区别

    onSingleTapUp() - 在按下并抬起时发生,只要符合这个条件就触发该函数,没有任何附加条件. onSingleTapConfirmed() 同上者,但有附加条件,就是Android会确保单 ...

  2. Redis和Memcached的区别详解

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/119.html?1455855360 Redis的作者Salvatore ...

  3. svn:previous operation has not finished

    svn提交遇到一个恶心的问题,cleanup也不行. 错误如下: Previous operation has not finished; run 'cleanup' if it was interr ...

  4. Linux初学 - 解决chkconfig Segmentation fault(core dumped)

    yum install *chkconfig*

  5. iOS-SDWebImage

    我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...

  6. js显示yyyy年mm日dd天 星期几 的格式日期

    js代码: <script type="text/javascript"> var today = new Date(); var week; //存储星期几 var ...

  7. javascript_core_03之数组

    1.数组:连续存储多个数据,一组连续变量的集合: ①创建空数组:var arr=[]:或者var arr=new Array(): ②创建初始化数组:var arr=[值1,值2,……]:或者var ...

  8. cordova添加plugin

    cordova添加plugin #在线安装 cordova create chankoujie com.example.chankoujie ChanKouJie cordova plugin add ...

  9. web工作流

    web工作流之Gulp学习 Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务. Gulp.js 是基于 Node.js 构建的,利用 Node.js 流的威力,你 ...

  10. MemCached add命令的用法详解

    增加: add 往内存增加一条数据 命令格式: add key flag expiretime bytes\r\n data\r\n //跨行所加的一些数据 1)key: 给这个值起一个固定的名字 / ...