数据结构之【队列】的基本操作C语言实现
直接上图:
循环队列的声明:
0、循环队列的声明
循环队列的基本操作:
1、InitQueue(&Q)(构造一个空队列)
2、DestroyQueue(&Q)(销毁队列Q)
3、ClearQueue(&Q)(清空队列Q)
4、QueueEmpty(Q)(判断队列是否为空)
5、QueueLength(Q)(求队列的长度)
6、GetHead(Q,&e)(获取对头元素)
7、EnQueue(&Q,e)(入队列)
8、DeQueue(&Q,&e)(出队列)
9、QueueTraverse(Q)(从对头到队尾依次访问队列元素)
循环队列
------- 队列的顺序存储表示 -------回顶部
//关键字宏定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define MAXQSIZE 100//循环队列的最大队列长度
//关键字的类型说明
typedef char QElemType;
typedef int Status;
//数据元素(循环队列)的类型说明
typedef struct{QElemType *base; //初始化的动态分配存储空间 int front; //头指针 (若队列不空,指向队列头元素) int rear; //尾指针 (若队列不空,指向队列尾元素的下一个位置)
}SqQueue;
------- 循环队列的基本操作 -------
1、InitQueue(&Q)(构造一个空队列) ----回顶部
//给队列分配空间,让头指针和尾指针都为0
Status InitQueue(SqQueue &Q){ //构造一个空队列Q Q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType)); if(!Q.base)exit(0);Q.front = Q.rear = 0;return OK;
}
2、DestroyQueue(&Q)(销毁队列Q) ----回顶部
Status DestroyQueue(SqQueue &Q){//销毁栈Q if(Q.base)free(Q.base);Q.base = NULL;Q.front = Q.rear = 0;return OK;
}
3、ClearQueue(&Q)(清空队列Q) ----回顶部
Status ClearQueue(SqQueue &Q){//清空栈Q Q.front = Q.rear = 0;return OK;
}
4、QueueEmpty(Q)(判断队列是否为空) ----回顶部
//若头指针和尾指针相等,则队空
Status QueueEmpty(SqQueue Q){ //若队列Q为空,则返回TRUE,否则返回FALSE if(Q.front == Q.rear) //队列空 return TRUE;return FALSE;
}
5、QueueLength(Q)(求队列的长度) ----回顶部
//获取队列长度
int QueueLength(SqQueue Q){ //返回Q的元素个数,即队列的长度 return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
6、GetHead(Q,&e)(获取对头元素) ----回顶部
//获取对列的头元素
Status GetHead(SqQueue Q, QElemType &e){ //若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR if(QueueEmpty(Q)) return ERROR;e = Q.base[Q.front];return OK;
}
7、EnQueue(&Q,e)(入队列) ----回顶部
//入队列,当队列不满,则在队尾插入元素
Status EnQueue(SqQueue &Q,QElemType e){ //插入元素e为Q的新的队尾元素 if((Q.rear + 1) % MAXQSIZE == Q.front) //队列满 return ERROR;Q.base[Q.rear] = e;Q.rear = (Q.rear + 1) % MAXQSIZE; //入队列 return OK;
}
8、DeQueue(&Q,&e)(出队列) ----回顶部
//出队列,当队列不空,则让队列第一个元素出队列
Status DeQueue(SqQueue &Q, QElemType &e){ //若队列不空,则删除Q的对头元素,用e返回其值,并返回OK;否则返回ERROR; if(Q.front == Q.rear) //队列空 return ERROR;e = Q.base[Q.front];Q.front = (Q.front + 1) % MAXQSIZE; //出队列 return OK;
}
9、QueueTraverse(Q)(从对头到队尾依次访问队列元素) ----回顶部
//当队列不空,则从对头开始遍历,直至队尾。
Status QueueTraverse(SqQueue Q){ //若队列为空,则返回ERROR,否则遍历队列 if(QueueEmpty(Q)) return ERROR;int i;for(i=Q.front; i<Q.rear; i++){printf("%c",Q.base[i]);}return OK;
}
参考文献:
[1] 严蔚敏,吴伟民 ,《数据结构(C语言版)》.
[2] 程杰,《大话数据结构》,清华大学出版社,2011出版年.
[2] 明日科技,《C语言 从入门到精通》,清华大学出版社,2019年版
相关文章:

在python3环境安装builtwith模块
1、安装命令: pip install builtwith 如果在命令行提示如下错误: Fatal error in launcher: Unable to create process using " 使用如下命令: python3 -m pip install builtwith 2、导入模块会出现错误提示: 原因࿱…

kettle组件-输出
1:删除连接数据库:新建连接数据库,或者应用转换中已经定义好的数据库。目标模式:指什么现在还不明确,集群模式?子服务器模式?--要写入数据的表的Schema名称。允许表名中包含“.”是很重要的。目…

NGOSS的一点简单概念
NGOSS(Next Generation Operational Support Systems)是由TMF(Tele Management Forum)提出的,他用于电信领域,是构建下一代OSS/BSS系统的框架。TMF提供了技术中立构架(TNA)作为NGOSS…

Windows Mobile 5.0 设备的目录变化
自定义铃声的默认两个存放位置:1. Application Data\Sounds (不是Storage下的Application Data了)。2. 外存储设备的根目录。

第二周期的第一次站立会议
今天:对这一阶段的任务进行了分配,我就自己的任务内容搜集了一些资料,尝试了编程。明天:继续进行编程。遇到的问题:编程方面有些许的困难。转载于:https://www.cnblogs.com/guantianhuan/p/10051436.html

常见的函数式编程模型
1.闭包(Closure) 闭包的概念 可以保留局部变量不被释放的代码块,被称为一个闭包。 闭包的特点:函数嵌套函数、内部函数可以引用外部函数的参数和变量、参数和变量不会被垃圾回收机制收回 // 创建一个闭包 function makeCounter() …

Ubuntu下安装和配置Redis
找到 /ect/redis/redis.conf 文件修改如下:注释掉 127.0.0.1 ,如果不需要远程连接redis则不需要这个操作。使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG。默认情况下,Redis服务器不允许远程访问,只允许本机访问,所以我们需要设置打开远程访问的功能。执行sudo apt-get install redis-server 安装命令。查看 redis 是否启动,重新打开一个窗口。停止/启动/重启redis。

自学笔记——1.Pyhton保留关键字
Python保留关键字python保留的关键字如下python保留的关键字如下 and del from None True as elif global nonlocal try assert else if not while break except import or with class False in pass yield continue finally is raise def for lambda…

人的一生有三件事不能等
人的一生有三件事不能等人的一生有三件事不能等 第一是“贫穷” 贫穷不能等,因为一但时间久了,你将习惯贫穷,到时不但无法突破自我,甚至会抹杀了自己的梦想,而庸庸碌碌的过一辈子。。。。。。 第二是“梦想” 梦想不能…

安装部署中的数据库打包和快捷方式启动浏览器
前一段时间,因为工作的需要,学习了一些.net的部署。在打包的过程中遇到了几个问题:<?XML:NAMESPACE PREFIX O />1、 数据库脚本打包,如何修改Web.config文件中的数据联接2、 数据库脚本中的方法和视图打包时要注意的问题…

Windows下安装和配置Redis
下载版本Redis-x64-5.0.14.1.zip。(可能需要开代理)

python练习册 每天一个小程序 第0004题
1 #-*-coding:utf-8-*- 2 __author__ Deen 3 4 题目描述:任一个英文的纯文本文件,统计其中的单词出现的个数。5 参考学习链接:6 re http://www.cnblogs.com/tina-python/p/5508402.html#undefined7 collections http://blog.csdn.…

xxxxxxx
xxxxxxxxxxxxxxxx转载于:https://www.cnblogs.com/pythonClub/p/10054454.html

自学笔记——2.字符串的切片、遍历、查找字符
一、字符串的切片 字符串的部分片段或者子集称为切片操作,所有字符串的切片操作是通过方括号([ ])实现的,语法:[n : m : s] 会返回一个子字符串,从索引值n到n-1之间,以s为步进,即&a…

【EXLIBRIS】随笔记 011
随 笔 记 <十一> 持这种观点的人一个是Dr. Johnson,另一个是西方文化影响更加根深蒂固的Reverend,似乎英文字母(Indian-European family)那种“抽象的、率意独断”的符号(Wai-lim Yip语)才是最基本的…

Ubuntu搭建Spark运行环境
前言 因为之前研究的方向是分布式系统,重点放在了Hadoop分布式文件系统上。现如今,社会对机器学习的需求势如破竹。为了调整研究方向,而且不抛弃原本的研究成果,研究反向便从分布式系统转为分布式机器学习算法(刚起步&…

hibernate 和 mybatis 的区别
【转载】:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结转载于:https://www.cnblogs.com/virgosnail/p/10054987.html

VC中基于 Windows 的精确定时
方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时 间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来…

VMware虚拟机安装之后,打开时找不到启动Centos的界面
#VMware虚拟机安装之后,打开时找不到启动Centos的界面 只要在VMware中打开查看–自定义–库,之后就看到自己已经创建好的虚拟机系统 我也是因为自己不小心上次关机之前把左边那个窗口关闭了

service iptables status无法执行,报错
1. service iptables status 结果为edirecting to /bin/systemctl stop iptables.service Failed to stop iptables.service: Unit iptables.service not load 3.安装Iptables-services 在root 用户下,执行指令 yum installl iptables-services3.设置开机启动 …

Qt5的cmake文件位置
D:\APICenter\Qt\Qt5.8.0\5.8\msvc2015\lib\cmake\Qt5\Qt5Config.cmake转载于:https://www.cnblogs.com/coolbear/p/7149079.html

2018-12-2
博客第一天,今天申请通过,我以为我上个星期就已经申请通过了。没想到博客还得申请一下,哈哈,今天终于成功了,加油哦转载于:https://www.cnblogs.com/h-wei/p/10056227.html

重载、重写和隐藏
重载、重写和隐藏 重载、重写和隐藏是很容易混淆的类似概念。虽然所有这三种技术都使您得以创建同名的成员,但它们之间有一些重要的差异。 重载的成员用于提供属性或方法的不同版本,这些版本具有相同名称但是接受不同数量的参数或者接受不同数据类型的参…

[整理] - Relational Engine之UMS Internals
SQL Server 6.5使用Windows的调度处理管理多线程,和其它Windows应用程序一样,它使用Windows标准API,没有用到任何隐藏API,这使得 SQL Server的工作线程同其它多线程Windows程序完全一样,没有任何特殊的优先级ÿ…

跟踪workflow instance 状态
场景是这样的: 1.workflowruntime启动了持久化和监听服务 2.workfllowruntime创建多个实例,并启动,一些会长时间延时,一些会中途暂停,会不同的执行状态(业务状态) 3.另有一winform控制台,有个表格,刷新显示每个实例的信息,包括业务状态--比如创建,运行,挂起等 4.通过workflowru…

尝试Java,从入门到Kotlin(上)
之前一直使用C#开发,最近由于眼馋Java生态环境,并借着工作服务化改造的契机,直接将新项目的开发都转到Java上去。积攒些Java开发经验,应该对.NET开发也会有所启发和益处。 从理论上说,Java和C#语言差别不大,…

Centos7状态下查看防火墙状态及修改服务端口
查看当前主机监听哪些服务端口 netstat -telunp查看防火墙firewall开放端口 fiewall-cmd --list-ports增加对外开放的端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent扩充)关闭某个端口 firewall-cmd --permanent --remove-port8080/tcp重启防火墙 firewa…

VMWare中CentOS7 设置固定IP且能够访问外网
最近搭建kubernetes集群环境时遇到一个问题,CentOS7在重启后IP发生变化导致集群中etcd服务无法启动后集群环境变得不可用,针对这种情况,必须要对CentOS7设置固定IP且可以访问外网(下载镜像用)。 首先关闭VMware的DHCP&…
使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件
当后台在进行某些长时间的操作时,如果能在页面上提供一个显示真实进度的进度条,而不是让用户不知情的等待或是从前的那些简单的估计,将是一个非常难得的出彩之处。现在使用ASP.NET Atlas完全有可能做到这些。这篇文章将讨论如何完成这一功能并…

初始化Mysql系统报错,begin failesd--conpilation aborted at scripts........
在编译安装Mysql之后进行初始化,但是出现了报错 初始化mysql scripts/mysql_install_db --basedir/usr/local/mysql --datadir/usr/local/mysql/data --usermysqlBEGIN failed–compilation aborted at scripts/mysql_install_db line 42 从报错的结果中看出Can…