C/C++ 数据结构循环队列的实现
#include <iostream>
#include <Windows.h>
using namespace std;
#define MAXSIZE 6
typedef int QElemType;
typedef struct {
QElemType* base;//基地址
int rear;//尾指针
int front;//头指针
}LoopQueue;
//初始化循环队列
bool InitList(LoopQueue &queue) {
queue.base = new int[MAXSIZE];
if (!queue.base)return false;
queue.front = queue.rear = 0;
return true;
}
//入队
bool InsertQueue(LoopQueue& queue, QElemType e) {
if ((queue.rear + 1) % MAXSIZE == queue.front) {
cout << "队列已满,无法入队!" << endl;
return false;
}
queue.base[queue.rear] = e;
queue.rear = (queue.rear + 1) % MAXSIZE;
return true;
}
//打印队列
bool PrintQueue(LoopQueue& queue) {
if (queue.front == queue.rear) {
cout << "队列为空,无法打印队列!" << endl;
return false;
}
int i = queue.front;
while (queue.front != queue.rear && (i + MAXSIZE) % MAXSIZE != queue.rear)
{
cout << queue.base[i] << " ";
i++;
}
cout << endl;
return true;
}
//获取头结点
int getHead(LoopQueue& queue) {
return queue.base[queue.front];
}
//获取尾结点
int getBack(LoopQueue& queue) {
return queue.base[queue.rear-1];
}
//获取队列的长度
int getLength(LoopQueue& queue) {
return (queue.rear - queue.front + MAXSIZE) % MAXSIZE;
}
//出队
bool DeleteQueue(LoopQueue& queue, QElemType&e) {
if (queue.front == queue.rear) {
cout << "队列为空,无法出队!" << endl;
return false;
}
e = queue.base[queue.front];
queue.front = (queue.front + 1) % MAXSIZE;
return true;
}
//销毁队列
void DestroyQueue(LoopQueue& queue) {
if (queue.base) {
delete queue.base;
}
queue.base = NULL;
queue.front = queue.rear = 0;
}
//清空队列
void ClearQueue(LoopQueue& queue) {
queue.front = queue.rear = 0;
}
void show_menu() {
cout << "----------------循环队列的基本操作--------------\t" << endl;
cout << "\t\t1.初始化循环队列" << endl;
cout << "\t\t2.入队" << endl;
cout << "\t\t3.获取队列的头结点" << endl;
cout << "\t\t4.获取队列的尾结点" << endl;
cout << "\t\t5.获取队列的长度" << endl;
cout << "\t\t6.出队" << endl;
cout << "\t\t7.打印队列" << endl;
cout << "\t\t8.清空队列" << endl;
cout << "\t\t0.退出系统" << endl;
}
int main() {
LoopQueue queue;
int choose = -1;
bool flag = -1;
int e = 0;
int elem = 0;
show_menu();
while (flag) {
cout << "请选择:";
cin >> choose;
switch (choose)
{
case 1:
if (InitList(queue)) {
cout << "队列初始化成功!" << endl;
break;
}
else {
cout << "队列初始化失败!" << endl;
break;
}
case 2:
cout << "请输入要插入的元素:";
cin >> e;
if (InsertQueue(queue, e)) {
cout << "元素 " << e << " 插入成功!" << endl;
break;
}
else {
cout << "元素 " << e << " 插入失败!" << endl;
break;
}
case 3:
cout << "队列的头结点为:" << getHead(queue) << endl;
break;
case 4:
cout << "队列的尾结点为:" << getBack(queue) << endl;
break;
case 5:
cout << "队列的长度为:" << getLength(queue) << endl;
break;
case 6:
if (DeleteQueue(queue, elem)) {
cout << "元素 " << elem << " 出队成功!" << endl;
break;
}
else {
cout << "元素出队失败!" << endl;
break;
}
case 7:
PrintQueue(queue);//打印队列
break;
case 8:
ClearQueue(queue);
cout << "清空队列元素!" << endl;
break;
default:
flag = 0;
}
}
DestroyQueue(queue);//销毁队列
system("pause");
return 0;
}

C/C++ 数据结构循环队列的实现的更多相关文章
- C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...
- 数据结构-循环队列(Python实现)
今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...
- java数据结构---循环队列
#java学习经验总结------循环队列的实现(数组) package datastructure;/*数组实现循环队列 队列first in first out*/ public class Ci ...
- Java数据结构——循环队列
普通顺序队列存在的问题在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位.出队时,则是头指针front后移一个单位.像这样进行了一定数量的入队和出队操作后, ...
- 数据结构算法C语言实现(十二)--- 3.4循环队列&队列的顺序表示和实现
一.简述 空队列的处理方法:1.另设一个标志位以区别队列是空还是满:2.少用一个元素空间,约定以队列头指针在队尾指针下一位置上作为队列呈满的状态的标志. 二.头文件 //3_4_part1.h /** ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============循环队列 顺序存储结构(queue circular sequence)(十)
循环队列 为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量.存储在其中的队列称为循环队列(Circular Queue). ...
- JavaScript数据结构与算法(四) 循环队列的实现
实现击鼓传花,需要用到上一章所述队列类Queue TypeScript方式实现源码 let hotPotato = (nameList, num) => { let queue = new Qu ...
- 【Java】 大话数据结构(7) 循环队列和链队列
本文根据<大话数据结构>一书,实现了Java版的循环队列.链队列. 队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 1.循环队列 队列的顺序储存结构:用数组存储队列,引入 ...
- TypeScript算法与数据结构-队列和循环队列
本文涉及的源码,均在我的github.有两部分队列和循环队列.有问题的可以提个issue,看到后第一时间回复 1. 队列(Queue) 队列也是一种线性的数据结构, 队列是一种先进先出的数据结构.类似 ...
- java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
随机推荐
- 为什么gdb通过0地址显示偏移会提示地址错误
现象 在gdb中,如果想看一个struct的某个field的偏移量,和C语言一样可以通过对一个0地址变量取地址,然后取成员的偏移量获得.更神奇的地方在于和C语言一样,这里也不会触发内存访问异常. 另外 ...
- Android 内存优化浅析
一:内存占用几大要点 1,Object Cache:Image cache,single instance obj(重量级别,例如数据库连接obj,bitmap ref),Thread过多, 2,Vi ...
- 打卡node day01--基础和fs内置模块
一, 检查 node 版本 node -v 或 node --version 二,检查安装过的node 版本(nvm node 版本管理工具 安装链接 参考百度) nvm ls 三,切换node 版 ...
- socket 客户端发送命令
import socket import sys import os,time reload(sys) sys.setdefaultencoding('utf8') def send_cmd(comm ...
- aspx页面,Page_Load 无人进入,解决
又一次copy放的错误,今天必须记录一下. 当你不需要走后台时候,ready 就有限制了. ready放的位置有问题.下面是错误示范. <script src="../ToExamin ...
- 055_Lightning Lightning 组件基础知识
Lightning框架简介 Lightning框架是Salesforce提供的一套基于用户界面的开发框架,对于开发单页面应用(Single Page Application)有很大的帮助.它和Visu ...
- 数据驱动DDT(Data-Driven Tests):测试数据的参数化
准备第三方库: 首先安装ddt库,其次在脚本中引入ddt 打开官网 https://pypi.org/project/ddt/ from ddt import ddt,data,unpack @ddt ...
- AJAX-动力节点
AJAX(Asynchronous Javascript And Xml) 传统请求及缺点 传统的请求都有哪些? 直接在浏览器地址栏上输入URL. 点击超链接 提交form表单 使用JS代码发送请求 ...
- 数据结构(C语言)_链表
//单链表按序号查找节点的值 LNode* GetElem(LinkList L, int i) { int j = 1; LNode* p = L->next; if (i == 0) ret ...
- Dapper上传图片
<h2>添加商品</h2> <table class="table table-bordered"> <tr> <td> ...