队列的存储结构的实现(C/C++实现)
存档
#include "iostream.h"
#include "stdlib.h"
#define max 20
typedef char elemtype;
#include "queue.h"
void main()
{
elemtype e;
queue q;
cout<<"(1)初始化队列q"<<endl;
initqueue(q);
cout<<"(2)队列为"<<(queueempty(q)?"空":"非空")<<endl;
cout<<"(3)依次输入字母序列,以'#'结束:"<<endl;
cin>>e;
while(e!='#')
{
enqueue(q,e);
cin>>e;
}
cout<<"(4)队列为"<<(queueempty(q)?"空":"非空")<<endl;
e=dequeue(q);
cout<<"(5a)出队一个元素dequeue()为:"<<e<<endl;
if(dequeue1(q,e))
cout<<"(5b)出队一个元素dequeue1()为:"<<e<<endl;
cout<<"(6)队列q的元素个数:"<<queuelength(q)<<endl;
cout<<"(7)清空队列"<<endl;
clearqueue(q);
cout<<"(8)队列q的元素个数:"<<queuelength(q)<<endl;
cout<<"(9)字符abc依次入队列"<<endl;
enqueue(q,'a');
enqueue(q,'b');
enqueue(q,'c');
e=gethead(q);
cout<<"(10a)队头元素gethead()为:"<<e<<endl;
if (gethead1(q,e))
cout<<"(10b)队头元素gethead1()为:"<<e<<endl;
cout<<"(11)队列的元素个数:"<<queuelength(q)<<endl;
cout<<"(12)所有元素出队列:";
while(!queueempty(q))
cout<<dequeue(q)<<" ";
cout<<endl;
cout<<"(13)队列q的元素个数:"<<queuelength(q)<<endl;
cout<<"(14)释放队列"<<endl;
destoryqueue(q);
}
typedef struct
{
elemtype *base;//动态分配存储空间
int front;//头指针,若队列不空指向队列队头元素
int rear;//尾指针,若队列不空指向队列队尾元素的下一个位置
}queue;
void initqueue(queue &q)
{
//初始化队列
q.base=new elemtype[max];//分配存储空间
if(!q.base)
{
cout<<"队列分配失败\n";
exit(-);
}
else
q.front=q.rear=;//初始状态,front和rear都为0
}
void clearqueue(queue &q)
{
//清空队列,但不销毁
q.front=;//清空函数,恢复到初始状态
q.rear=;
}
int queueempty(queue q)
{
//判断队列是否为空
if(q.front==q.rear)//空队列,返回1,否则返回0
return ;
else
return ;
}
int queuelength(queue q)
{
//求队列中元素个数
return (q.rear-q.front+max)%max;//计算队列当前存储的元素数目
}
void enqueue(queue &q,elemtype e)
{
//入队列操作
if((q.rear+)%max==q.front)//队满的操作
{
cout<<"队满,无法插入新元素!"<<endl;
exit(-);
}
else
{
q.base[q.rear]=e;//元素e存在当前rear所指位置
q.rear=(q.rear+)%max;//rear指针后移
}
}
elemtype dequeue(queue &q)
{
//出队列操作
if(q.front==q.rear)//空队列不能出队
{
//队空
cout<<"空队列,无法删除头元素!"<<endl;
exit(-);
}
else
{
elemtype e=q.base[q.front];//当前的队列头元素作为返回值
q.front=(q.front+)%max;//front指针后移
return e;
}
}
int dequeue1(queue &q,elemtype &e)
{
//出队列操作
if(q.front==q.rear)//空队列不能出队
{
//队空
cout<<"空队列,无法删除头元素!"<<endl;
return ;
}
else
{
e=q.base[q.front];//当前的队列头元素作为返回值
q.front=(q.front+)%max;//front指针后移
return ;
}
}
elemtype gethead(queue q)
{
//读队头元素的值,但不删除
if(q.front==q.rear)//空队列,无法读
{
//队空
cout<<"空队列,无头元素"<<endl;
exit(-);
}
else
return q.base[q.front];//队列头元素的数组下标即front本身
}
void destoryqueue(queue &q)
{
//销毁队列
delete q.base;//释放连续的存储空间
q.base=NULL;//基地址赋值为空
q.front=;//头指针赋值为0
q.rear=;//尾指针赋值为0
}
int gethead1(queue q,elemtype &e)
{
//读队头元素的值,但不删除
if(q.front==q.rear)//空队列,无法读
{
//队空
cout<<"空队列,无头元素"<<endl;
return ;
}
else
e=q.base[q.front];//队列头元素的数组下标即front本身
return ;
}
运行结果如下:

队列的存储结构的实现(C/C++实现)的更多相关文章
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
- C++编程练习(6)----“实现简单的队列的链式存储结构“
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...
- LinkedList实现队列存储结构
package com.tercher.demo; import java.util.LinkedList; public class Queue { //用LinkedList 实现队列的数据存储结 ...
- Java队列存储结构及实现
一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队 ...
- C#创建安全的栈(Stack)存储结构
在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...
- js数据结构与算法存储结构
数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
- 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...
随机推荐
- MVC系列——一个异常消息传递引发的思考
前言:最近在某个项目里面遇到一个有点纠结的小问题,经过半天时间的思索和尝试,问题得到解决.在此记录一下解决的过程,以及解决问题的过程中对.net里面MVC异常处理的思考.都是些老生常谈的问题,不多说, ...
- Java之数据类型,变量赋值
Java中的基础数据类型(四类八种): 1.整数型 byte----使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值.byte型是整型中所分配的内存空间是最 ...
- button的用法
C# 如何去掉button按钮的边框线? 设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0.
- S7-200和S7-300profibus-DP通信
一.S7-200CN的cup可以通过EM277接入DP网络 二.CPU315-2DP做主站,S7-200CUP做从站 三. 通信题目 四.硬件组态 1.主站的DP组态,地址为2 2.EM277作为从站 ...
- 后缀数组之hihocoder 重复旋律1-4
蒟蒻知道今天才会打后缀数组,而且还是nlogn^2的...但基本上还是跑得过的: 重复旋律1: 二分答案,把height划分集合,height<mid就重新划分,这样保证了每个集合中的LCP&g ...
- ElasticSearch 学习记录之如任何设计可扩容的索引结构
扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...
- c#全宇宙最牛的编程软件
c#走的道路!PC,PD,电脑一体,一个账户就可以三合一,可以跨平台的编程,在未来的道路如果微软能一直走下去,那么c#将成为宇宙最牛B的编程软件.
- Java IO详解(四)------字符输入输出流
File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...
- JavaScript Array 对象方法 以及 如何区分javascript中的toString()、toLocaleString()、valueOf()方法
1.concat() 2.join() 3.pop() 4.push() 5.reverse() 6.shift() 7.unshift() 8.slice() 9.sort() 10.splice( ...
- sql sever模糊查询和聚合函数
使用is null 的时候 要确保 查询的列 可以为空! null: 01.标识 空值 02.不是0,也不是空串"" 03.只能出现在定义 允许为null的字段 04.只 ...