存档

 #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++实现)的更多相关文章

  1. 队列的存储结构和常见操作(c 语言实现)

    一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...

  2. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  3. C++编程练习(6)----“实现简单的队列的链式存储结构“

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...

  4. LinkedList实现队列存储结构

    package com.tercher.demo; import java.util.LinkedList; public class Queue { //用LinkedList 实现队列的数据存储结 ...

  5. Java队列存储结构及实现

    一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队 ...

  6. C#创建安全的栈(Stack)存储结构

    在C#中,用于存储的结构较多,如:DataTable,DataSet,List,Dictionary,Stack等结构,各种结构采用的存储的方式存在差异,效率也必然各有优缺点.现在介绍一种后进先出的数 ...

  7. js数据结构与算法存储结构

    数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  9. 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现

    如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...

随机推荐

  1. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  2. mysql创建新用户及新用户不能本地登陆的问题

    最近在搭建hadoop集群,主节点上面安装的MySQL数据库,对着方面不熟悉,为hive.Ooize等服务统一使用的root账号和密码,为了安全一些库对于某些用户是不可见的,所以需要针对不同的服务设置 ...

  3. JavaUtil_06_DES加解密工具

    一.示例 CommonUtil.java package com.ray.test.des; import java.io.ByteArrayOutputStream; import java.io. ...

  4. VC6.0 突然打不开dsw 工程文件的解决方案

    在vc编程中,经常遇到dsw工程文件无法打开,或者打开后看不到类和变量的问题.特别是把代码从一台电脑上copy到另一台电脑上以后,常常会碰到这种奇怪的问题.有时在编辑状态下也会发生成员变量或函数提示不 ...

  5. C# winFrom窗体设计问题-部分文件打不开窗体设计器 变成类.cs

    https://zhidao.baidu.com/question/1513483178103163220.html C# winform程序设计的时候,出现了问题.默认主窗体form1(改名form ...

  6. TCP协议(二)——TIME_WAIT状态

    当TCP主动关闭套接字时,采用四步握手机制来彻底关闭连接.如图: 客户端主动关闭连接,发送FIN段到服务端.TCP状态由ESTABLISHED(连接状态)转为FIN_WAIT1(表示,发送的FIN需要 ...

  7. kettle-数据源配置化-开发、生产采用不同配置

    数据etl常用工具kettle. 1.说明: kettle-数据源配置化:是指kettle的数据源连接信息全部或者部分从配置文件中读取(如果是数据库的资源库,那么资源库也可以配置化). 2.优点: 1 ...

  8. Vuex 源码学习(二)

    Vue加载后,将Vuex 加载到 Vue对象上后,初始化Store. (一) Store的参数的定义 其中 action 与 mutation 的订阅者 用 数组存储,而其属性都是用对象存储的. 考虑 ...

  9. 执行PHP脚本时遇到 mysql_connect(): Headers and client library minor version mismatch的解决方法

    把服务器从Windows迁移到了centos7.2,配置好PHP运行环境后,项目运行正常. 但在命令行中运行一个PHP脚本时,遇到了标题中显示的错误 使用 php -i | grep Client 得 ...

  10. 《深入理解Java虚拟机:JVM高级属性与最佳实践》读书笔记(更新中)

    第一章:走进Java 概述 Java技术体系 Java发展史 Java虚拟机发展史 1996年 JDK1.0,出现Sun Classic VM HotSpot VM, 它是 Sun JDK 和 Ope ...