队列的存储结构的实现(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 存储结构 要存储一个图,我们知道图既有 ...
随机推荐
- Django实战,小网站实现增删改查
直接上代码 视图: from django.shortcuts import render,render_to_response, redirect from submit import models ...
- 【java设计模式】代理模式
计算类中方法运行时间的几种方案: Client: package com.tn.proxy; public class Client { public static void main(String[ ...
- 最长回文子序列(LPS)
问题描述: 回文是正序与逆序相同的非空字符串,例如"civic"."racecar"都是回文串.任意单个字符的回文是其本身. 求最长回文子序列要求在给定的字符串 ...
- CJOJ 血帆海盗
Description 随着资本的扩大,藏宝海湾贸易亲王在卡利姆多和东部王 国大陆各建立了N/2 个港口.大灾变发生以后,这些港口之间失去了联系,相继脱离了藏宝海湾贸易亲王的管辖,各自为政.利益的驱动 ...
- git stash的用法
使用git stash git stash的使用场景是这样的: 当你正在你的分支下进行开发时,这时候你可能需要切换到你的另一个分支去,你可能要pull新的代码下来,但是你又不想添加无用的commit. ...
- MySQL 单实例编译安装 以及多实例安装简介
这是基本的安装教程,与牛逼的大神无关,或许是牛逼大神不用看就会安装吧. CentOS 6.5 Final x86_64 一.预安装软件包 1.开发包组合安装 yum groupinstall &qu ...
- sudo 做不到的事
本文是经验帖,以后遇到类似的情况会持续更新到这篇文章 普通用户使用sudo会遇到以下情况 1.字符流无法写入到 /var/log/messages /var/log/secure (实际上这些文件一旦 ...
- Linux发行版 CentOS6.5 禁用防火墙步骤
本文地址http://comexchan.cnblogs.com/,尊重知识产权,转载请注明出处,谢谢! 注意:此操作需要使用root权限执行 首先查询防火墙状态: service iptables ...
- Python第二十天 shutil 模块 zipfile tarfile 模块
Python第二十天 shutil 模块 zipfile tarfile 模块 os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供 shutil 模块shut ...
- 脚本全选全不选操作asp.net treeview控件
//树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级 //事件响应函数 var HandleCheckbox = function () { //取得事 ...