队列的存储结构的实现(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 }
运行结果如下:
- 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 数组属性和方法
- Java也可以像python般range出连续集合
- c# dev控件 gridcontrol 数据跟随鼠标滚轮滚动也可以编辑
- Apollo(阿波罗)配置中心Java客户端使用指南使用指南
- DevExpress.LookUpEdit控件实现自动搜索定位功能 兼使用方法(looUpEdit可编辑)
- dev GridControl直接打印 纵向合并单元格
- Dooring可视化之从零实现动态表单设计器
- 我不是最后一个知道MDC的吧?
- 实战编写 wireshark 插件解析私有协议
- 安卓 APP 三代加壳方案的研究报告
- 将博客主题替换成 Clean Blog
- Go 数据存储篇(一):基于内存存储实现数据增删改查功能
- 创建联系表单页面并通过 Ajax 提交表单请求数据
- Go 数据存储篇(二):通过 JSON 格式存取文本数据
- Go 数据存储篇(三):通过 CSV 格式读写文本数据
- Laravel 8 正式发布,一起来看看有哪些新特性吧