首页 > 编程语言 >C/C++ 实现循环队列

C/C++ 实现循环队列

时间:2023-02-03 23:34:46浏览次数:32  
标签:cout QElemType 队列 LoopQueue C++ queue int 循环 front

#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;
}

标签:cout,QElemType,队列,LoopQueue,C++,queue,int,循环,front
From: https://www.cnblogs.com/smartlearn/p/17090701.html

相关文章

  • RabbitMq:简单的生产者代码。(包含QueueDeclare声明队列参数)
    ConnectionFactoryconn=newConnectionFactory();conn.setVirtualHost("/");conn.setPort(5672);......
  • C++ 宏
    目录标识符_与__的含义C++内置宏定义1.标准内置宏定义2.公共内置宏定义2.1查看GCC所有内置宏定义2.2查看G++所有内置宏定义3.系统内置宏定义4.内置操作符宏......
  • c++虚拟内存
    可以通过调用vmemalloc类型对象的括号运算符(len,name)分配大小为len,文件名为name的虚拟内存。返回首地址的迭代器。无需delete,程序结束后会自动清空文件,但是保留文件名#......
  • Jmeter学习:接口测试参数化后循环断言不同内容的方法
    方法一:一:参数化接口测试数据  设置线程组迭代次数实现循环。二:添加配置元件-计数器拼接函数,嵌套变量 这个是jmeter自带的函数,可以用用这个函数进行字符串的......
  • 代码随想录-数组-C++总结
    1.二分查找重点区分左闭右开,左闭右闭两种写法中的差异,理解循环中的不变量,这样在returnr还是l和什么时候l+1r-1什么时候不需要+1-1很重要。35.搜索插入位置-力扣(Leet......
  • Python 异步: 什么是事件循环 ?(6)
    asyncio程序的核心是事件循环。在本节中,我们将花点时间看一下asyncio事件循环。1.什么是Asyncio事件循环事件循环是用于在单个线程中执行协程的环境。事件循环是异......
  • C++ 1398:短信计费
    1398:短信计费【题目描述】用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条......
  • 57-Zookeeper集群和kafka消息队列集群
    MartinFowler发现所有成功的微服务都遵循了通用的模式-MonolithFirst(单体优先):几乎所有成功的微服务故事,都是从一个变得太大而被分解的单体开始的。几乎所有我听说过的从......
  • C++1155:回文三位数
    1155:回文三位数【题目描述】如果一个数从左边读和从右边读都是同一个数,就称为回文数。例如6886就是一个回文数,求出所有的既是回文数又是素数的三位数。【输入】(......
  • for循环语句
    示例1:publicclassDemo05{publicstaticvoidmain(String[]args){//1到100之间的数所有的奇数和,偶数和intaddSum=0;intevenSum=0;......