C ~ 链式队列与循环队列

      此处的链式与循环队列可以应用于BFS和树的层序遍历。下面是对其结构和基本操作的程序描述。

1、循环队列

    解决循环队列的队空和队满的方法:

    [1].增加一个参数count,用来记录数组中当前元素的个数;

    [2].为避免队空和满两状态混淆,少用一个存储空间,也就是数组最后一个存数空间不用,(rear+1)% QSIZE= front 时, 队满;

       a)判断是否为空队列:front==rearb)判断队列是否已满:front=(rear+1)%size 

 1 typedef struct{      //队列结构定义
 2     int front;
 3     int rear;
 4     int count;  //队列元素计数
 5     int key[QSIZE];
 6 }BFSQueue;
 7 
 8 void InitBFSQueue(BFSQueue *BFSQ)  //队列初始化
 9 {
10     BFSQ->front=0;  //front指向队列第一个元素
11     BFSQ->rear=0;   //rear指向队列中下一个空位
12     BFSQ->count=0;
13 }
14 int EmptyBFSQueue(BFSQueue *BFSQ) //
15 {
16     return BFSQ->count==0;
17 }
18 int FullBFSQueue(BFSQueue *BFSQ)  //
19 {
20     return BFSQ->count==QSIZE;
21 }
22 
23 void AddBFSQueue(BFSQueue *BFSQ,int num)  //插入
24 {
25     if(!FullBFSQueue(BFSQ))
26     {
27         BFSQ->count++;
28         BFSQ->key[BFSQ->rear]=num;
29         BFSQ->rear=(BFSQ->rear+1) % QSIZE;
30     }
31 }
32 
33 int DelBFSQueue(BFSQueue *BFSQ)  //删除
34 {
35     int temp;
36     if(!EmptyBFSQueue(BFSQ))
37     {
38         BFSQ->count--;
39         temp=BFSQ->key[BFSQ->front];
40         BFSQ->front=(BFSQ->front+1) % QSIZE;
41         return temp;
42     }
43     else
44         return NULL;
45 }
46 /******************************************************************/

2、链式队列

 1 typedef struct QNode{  // 队列元素结构  
 2     int key;
 3     struct QNode *next;
 4 }QNode;
 5 typedef struct{  // 队列结构 
 6     QNode *front;
 7     QNode *rear;
 8     int count;
 9 }BFSQueue;
10 
11 void InitBFSQueue(BFSQueue *BFSQ)  //队列初始化
12 {
13     BFSQ->front=NULL;  
14     BFSQ->rear=NULL; 
15     BFSQ->count=0;
16 }
17 int EmptyBFSQueue(BFSQueue *BFSQ) //
18 {
19     return BFSQ->count==0;
20 }
21 
22 void AddBFSQueue(BFSQueue *BFSQ,int num)  //插入
23 {
24     QNode *np=(QNode *)malloc(sizeof(QNode));
25     np->key=num;
26     np->next=NULL;
27       //BFSQ->count++;
28 
29     if(!EmptyBFSQueue(BFSQ))  // 队列非空
30     {        
31         BFSQ->rear->next=np;
32         BFSQ->rear=np;
33     }
34     else                      // 队列空
35     {
36         BFSQ->rear=np;
37         BFSQ->front=np;
38     }
39     BFSQ->count++;
40 }
41 int DelBFSQueue(BFSQueue *BFSQ)  //删除
42 {
43     int temp;
44     QNode *tp=(QNode *)malloc(sizeof(QNode));
45     if(!EmptyBFSQueue(BFSQ)) //队列非空
46     {
47           //BFSQ->count--;  //注意,必须在队列判定之后增加或减小count的值///
48         tp=BFSQ->front;
49         temp=tp->key;
50         if(BFSQ->count==1)  //出队后队列为空
51         {
52             BFSQ->rear=NULL;
53             BFSQ->front=NULL;
54         }
55         else  //出队后队列非空
56         {
57             BFSQ->front=tp->next;
58         }        
59         BFSQ->count--;
60         free(tp);  //释放暂存指针
61 
62         return temp;
63     }
64     else
65         return NULL;
66 }

转载于:https://www.cnblogs.com/wjcx-sqh/p/5929927.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hexo之部署github

最近开始学NodeJs,准备也在github上弄个一个Hexo博客练练过程中遇到一些问题总结一下。希望对遇到同样问题的同学能有个帮助少走一些弯路。 - 其实用windows或mac客户端直接去同步很顺利没遇到什么问题。主要是在使用Hexo deploy命令的时候。 我的配置文件deploy部分…

You have unstaged changes.

执行git rebase出错 原因:有未提交的修改 解决:执行git stash暂时保存修改,rebase后,执行git stash pop

[bootstrap] 打造一个简单的系统模板(1) 左侧折叠菜单

1. 前言 最近需要做一个后台管理系统,我打算使用bootstrap弄一个好看的后台模板。网上的好多模板我觉的css和js有点重。 于是就打算完全依靠bootstrap搭建一个属于自己的模板。 首先从左侧的折叠菜单开始。看图。 2. CSS 代码 以下是自定义的css代码,由于…

将gcc/g++链接到指定版本

安装指定版本: sudo apt-get install gcc-4.8 sudo apt-get install g-4.8以上命令默认安装的为4.8.5版本,支持c11 建立软连接 cd /usr/bin如果已经装有gcc或者g,需要先移除原先的软连接sudo rm gcc sudo rm g建立新的软连接 sudo ln -s g…

23种设计模式的优点与缺点概况

设计模式 标签(空格分隔): 设计模式优点 应用场景 整理自《设计模式之禅》 单例模式 优点: 只有一个实例,减少了内存开支;可以避免对系统资源的多重占用;可以在系统中设置全局的访问点&#xff…

How Many Shortest Path

zoj2760:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode2760 题意:给你一张有向带权图,然后问你最短路径有多少条。 题解:这一题用到了网络流,一开始,我想到用找到一条最短路,然后删除这条…

pat00-自测5. Shuffling Machine (20)

00-自测5. Shuffling Machine (20) 时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者CHEN, YueShuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid …

E488: Trailing characters:

情景: 对vim进行配置,配置完成后进行保存,配置完成后打开其他文件时报错。原因: vim 配置文件中保存不合乎语法的语句,报错时如下: #显示行号 set number#字符导致的错误,改成"即可。 vi…

移动web开发总结

1、-webkit-tap-highlight-color:rgba(255,255,255,0)可以同时屏蔽ios和android下点击元素时出现的阴影。 备注:transparent的属性值在android下无效。2、-webkit-appearance:none可以同时屏蔽输入框怪异的内阴影。3,/*去除android浏览器下a/input等元素获得焦点时高…

人物角色群体攻击判定二(叉乘来判断敌人的位置)

建议阅读: 判断敌人在玩家的某一个区域: http://www.cnblogs.com/plateFace/p/4716799.html 我们可以根据玩家和敌人的坐标, 进行叉乘来获取一个向量可以用它来判断敌人的位置, 敌人是否在攻击范围内. 下面我简单实现下对单体敌人是否攻击做判定 这种方式有一种重大的BUG, 假设…

更改linux子系统软件源为国内镜像

cd /etc/apt/sudo cp sources.list sources.list.back20190831sudo vim sources.list执行vim替换命令 :%s/archive.ubuntu/mirrors.aliyun/g:%s/security.ubuntu/mirrors.aliyun/g执行sudo apt update即可。

[Z] Linux下进程的文件访问权限

原文链接:http://blog.csdn.net/chosen0ne/article/details/10581883对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组),二是确定对应的角色是否具有该操作的权限。 首先看第一部分。默认情…

HDU 5371 Manacher Hotaru's problem

求出一个连续子序列,这个子序列由三部分ABC构成,其中AB是回文串,A和C相同,也就是BC也是回文串。 求这样一个最长的子序列。 Manacher算法是在所有两个相邻数字之间插入一个特殊的数字,比如-1, Manacher算法…

MySQL CURDATE() 函数

定义和用法 CURDATE() 函数返回当前的日期。 语法 CURDATE() 实例 例子 1 下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果类似: NOW()CURDATE()CURTIME()2008-12-29 16:25:462008-12-2916:25:46例子 2 下面的 SQL 创建带有日期时间列 (Orde…

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

最近园子里网络爬虫很火爆,从 PHP 到 Python,从 windows服务 到 winform 程序,各路大神各显神通。小弟也献下丑,从平庸流出发,简述下 WebApi AngularJS 方式实现网络爬虫。 一、技术框架 1.1 前端: Angular…

linker `cc` not found

运行rustc hello_world.rs时出错。原因: 我的 gcc 是安装的指定版本 gcc-4.8,安装指定版本 gcc 可参考我的另一篇博文,这里找不到 cc 的原因是在移除原来软链的时候,cc 的软链也移除了。重新建立软链即可。 sudo ln -s gcc cc还有…

C# 通过服务启动窗体(把窗体添加到服务里)实现用户交互的windows服务[转发]...

由于个人需要,想找一个键盘记录的程序,从网上下载了很多,多数都是需要注册的,另外也多被杀软查杀。于是决定自己写一个,如果作为一个windows应用程序,可以实现抓取键盘的记录。想要实现随系统启动的话&…

error: default argument given for parameter 4

原因&#xff1a;定义函数的时候参数部分有默认值&#xff0c;如下&#xff1a; int classA::print(int a 0) {std::cout << a << std::endl; }分析&#xff1a;声明函数时参数可以有默认值&#xff0c;定义时不能。

python2.7虚拟环境virtualenv安装及使用

一 、虚拟环境virtualenv安装 1. 安装virtualenv 将Python的目录添加到系统环境变量后&#xff0c;在命令行输入&#xff1a; pip install virtualenv C:\Users\heroicai\Desktop>pip install virtualenv2. 建立虚拟环境 在桌面上建立建立一个虚拟环境myenv,输入:virtualenv…

Io 异常: The Network Adapter could not establish the connection

Io 异常: The Network Adapter could not establish the connection 这个异常的出现一般与数据库和你的PC的设置有关 这种异常的出现大致上有下面几种&#xff1a; 1。IP错误。 在设置URL时错误&#xff0c;例如&#xff1a;jdbc:oracle:thin:192.168.0.36:1521:sharp 数据库服…