队列的存储结构的实现(C/C++实现)
时间:2022-05-07
本文章向大家介绍队列的存储结构的实现(C/C++实现),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
存档
1 #include "iostream.h"
2 #include "stdlib.h"
3 #define max 20
4 typedef char elemtype;
5 #include "queue.h"
6 void main()
7 {
8 elemtype e;
9 queue q;
10 cout<<"(1)初始化队列q"<<endl;
11 initqueue(q);
12 cout<<"(2)队列为"<<(queueempty(q)?"空":"非空")<<endl;
13 cout<<"(3)依次输入字母序列,以'#'结束:"<<endl;
14 cin>>e;
15 while(e!='#')
16 {
17 enqueue(q,e);
18 cin>>e;
19 }
20 cout<<"(4)队列为"<<(queueempty(q)?"空":"非空")<<endl;
21 e=dequeue(q);
22 cout<<"(5a)出队一个元素dequeue()为:"<<e<<endl;
23 if(dequeue1(q,e))
24 cout<<"(5b)出队一个元素dequeue1()为:"<<e<<endl;
25 cout<<"(6)队列q的元素个数:"<<queuelength(q)<<endl;
26 cout<<"(7)清空队列"<<endl;
27 clearqueue(q);
28 cout<<"(8)队列q的元素个数:"<<queuelength(q)<<endl;
29 cout<<"(9)字符abc依次入队列"<<endl;
30 enqueue(q,'a');
31 enqueue(q,'b');
32 enqueue(q,'c');
33 e=gethead(q);
34 cout<<"(10a)队头元素gethead()为:"<<e<<endl;
35 if (gethead1(q,e))
36 cout<<"(10b)队头元素gethead1()为:"<<e<<endl;
37 cout<<"(11)队列的元素个数:"<<queuelength(q)<<endl;
38 cout<<"(12)所有元素出队列:";
39 while(!queueempty(q))
40 cout<<dequeue(q)<<" ";
41 cout<<endl;
42 cout<<"(13)队列q的元素个数:"<<queuelength(q)<<endl;
43 cout<<"(14)释放队列"<<endl;
44 destoryqueue(q);
45 }
1 typedef struct
2 {
3 elemtype *base;//动态分配存储空间
4 int front;//头指针,若队列不空指向队列队头元素
5 int rear;//尾指针,若队列不空指向队列队尾元素的下一个位置
6 }queue;
7 void initqueue(queue &q)
8 {
9 //初始化队列
10 q.base=new elemtype[max];//分配存储空间
11 if(!q.base)
12 {
13 cout<<"队列分配失败n";
14 exit(-2);
15 }
16 else
17 q.front=q.rear=0;//初始状态,front和rear都为0
18 }
19 void clearqueue(queue &q)
20 {
21 //清空队列,但不销毁
22 q.front=0;//清空函数,恢复到初始状态
23 q.rear=0;
24 }
25 int queueempty(queue q)
26 {
27 //判断队列是否为空
28 if(q.front==q.rear)//空队列,返回1,否则返回0
29 return 1;
30 else
31 return 0;
32 }
33 int queuelength(queue q)
34 {
35 //求队列中元素个数
36 return (q.rear-q.front+max)%max;//计算队列当前存储的元素数目
37 }
38 void enqueue(queue &q,elemtype e)
39 {
40 //入队列操作
41 if((q.rear+1)%max==q.front)//队满的操作
42 {
43 cout<<"队满,无法插入新元素!"<<endl;
44 exit(-2);
45 }
46 else
47 {
48 q.base[q.rear]=e;//元素e存在当前rear所指位置
49 q.rear=(q.rear+1)%max;//rear指针后移
50 }
51 }
52 elemtype dequeue(queue &q)
53 {
54 //出队列操作
55 if(q.front==q.rear)//空队列不能出队
56 {
57 //队空
58 cout<<"空队列,无法删除头元素!"<<endl;
59 exit(-2);
60 }
61 else
62 {
63 elemtype e=q.base[q.front];//当前的队列头元素作为返回值
64 q.front=(q.front+1)%max;//front指针后移
65 return e;
66 }
67 }
68 int dequeue1(queue &q,elemtype &e)
69 {
70 //出队列操作
71 if(q.front==q.rear)//空队列不能出队
72 {
73 //队空
74 cout<<"空队列,无法删除头元素!"<<endl;
75 return 0;
76 }
77 else
78 {
79 e=q.base[q.front];//当前的队列头元素作为返回值
80 q.front=(q.front+1)%max;//front指针后移
81 return 1;
82 }
83 }
84 elemtype gethead(queue q)
85 {
86 //读队头元素的值,但不删除
87 if(q.front==q.rear)//空队列,无法读
88 {
89 //队空
90 cout<<"空队列,无头元素"<<endl;
91 exit(-2);
92 }
93 else
94 return q.base[q.front];//队列头元素的数组下标即front本身
95 }
96 void destoryqueue(queue &q)
97 {
98 //销毁队列
99 delete q.base;//释放连续的存储空间
100 q.base=NULL;//基地址赋值为空
101 q.front=0;//头指针赋值为0
102 q.rear=0;//尾指针赋值为0
103 }
104 int gethead1(queue q,elemtype &e)
105 {
106 //读队头元素的值,但不删除
107 if(q.front==q.rear)//空队列,无法读
108 {
109 //队空
110 cout<<"空队列,无头元素"<<endl;
111 return 0;
112 }
113 else
114 e=q.base[q.front];//队列头元素的数组下标即front本身
115 return 1;
116 }
运行结果如下:
- 多级复制的数据不同步问题(r7笔记第11天)
- 简单易学的机器学习算法——Logistic回归
- Python 用OPEN读文件报错 ,路径以及r
- Oracle 12c PDB浅析(r9笔记第10天)
- merge语句导致的CPU使用率过高的优化(二) (r7笔记第9天)
- 网页爬虫-R语言实现基本函数
- Python中的random模块用于生成随机数
- 简单易学的机器学习算法——极限学习机(ELM)
- 图片数据集太少?Keras Image Data Augmentation 各参数详解
- 备库归档删除策略失效的问题分析 (r7笔记第6天)
- 优化算法——梯度下降法
- Java基础-26(02)总结网络编程
- 记一次数据同步需求的改进(二) (r7笔记第5天)
- Python信贷数据处理与初步分析(ZIP解压)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信网页扫码登录和公众号网页授权登录的比较
- 【TBase开源版测评】分布式数据库复制表关联查询
- v-decorator的取值与赋值
- fastjson导致spring security oauth2的token序列化错误
- 微信小程序webview,a锚点跳转,回退时一直保留在原页面
- SLURM使用教程
- MIME 类型大全,你值得收藏
- Jetbrains系列---PyCharm, Goland翻译插件推荐Translation
- 熬夜总结了 “HTML5画布” 的知识点(共10条)
- 在PyTorch中使用深度自编码器实现图像重建
- Django+Vue开发生鲜电商平台之9.个人中心功能开发
- Serverless 实战:通过 Component 实现多地域部署容灾
- SQL 行转列+窗口函数的实例
- 回答一下这 10 个最常见的 Javascript 问题
- 千万级数据表选错索引导致的线上慢查询事故