首页 > 编程语言 >C/C++ 数据结构使用数组实现队列的基本操作

C/C++ 数据结构使用数组实现队列的基本操作

时间:2023-03-03 13:45:57浏览次数:49  
标签:return 队列 SQ C++ front 基本操作 数据结构 SeqQueue rear

//使用数组实现队列
#include <iostream>
#include <Windows.h>
using namespace std;
#define MAXSIZE 5 //队列的最大容量

typedef int DataType; //队列中的元素类型

typedef struct Queue {
    DataType queue[MAXSIZE];
    int front; //队头指针
    int rear; //队尾指针
}SeqQueue;
//队列初始化
void InitQueue(SeqQueue *SQ) {
    if (!SQ) return ;
    SQ->front = SQ->rear = 0; //把队头和队尾指针同时置0
}
//判断队列为空
bool IsEmpty(SeqQueue* SQ) {
    if (!SQ) return false;
    if (SQ->front == SQ->rear) {
        return true;
    }
    return false;
}
//判断队列是否为满
bool IsFull(SeqQueue* SQ) {
    if (!SQ) return false;
    if (SQ->rear == MAXSIZE) {
        return true;
    }
    return false;
}
//入队,将元素data插入到队列SQ中
bool EnterQueue(SeqQueue* SQ, DataType data) {
    if (!SQ)return false;
    if (IsFull(SQ)) {
        cout << "无法插入元素" << data << ",队列已满!" << endl;
        return false;
    }
    SQ->queue[SQ->rear] = data; //在队尾插入元素data
    SQ->rear++;//队尾指针后移一位
    return true;
}
//出队方法一,将队列中队头的元素data出队,后面的元素向前移动
bool DeleteQueue(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
        return false;
    }
    if (!data)return false;
    *data = SQ->queue[SQ->front];
    for (int i = SQ->front + 1; i < SQ->rear; i++) {
        SQ->queue[i - 1] = SQ->queue[i];
    }
    SQ->rear--;//队尾指针前移一位
    return true;
}
//出队方法二,将队列中队头的元素data出队,出队后队头指针front后移一位
bool DeleteQueue2(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
        return false;
    }
    if (SQ->front >= MAXSIZE) {
        cout << "队列已到尽头!" << endl;
        return false;
    }
    *data = SQ->queue[SQ->front];
    SQ->front = (SQ->front) + 1;//队首指针后移一位
    return true;
}
void PrintQueue(SeqQueue* SQ) {
    if (!SQ)return;
    int i = SQ->front;
    while (i < SQ->rear) {
        cout << SQ->queue[i] << " ";
        i++;
    }
    cout << endl;
}
//获取队首元素,不出队
int getHead(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
    }
    return *data = SQ->queue[SQ->front];
}
//清空队列
void ClearQueue(SeqQueue* SQ) {
    if (!SQ) return;
    SQ->front = SQ->rear = 0;
}
//获取队列中元素的个数
int getLength(SeqQueue* SQ) {
    if (!SQ)return 0;
    return SQ->rear - SQ->front;
}
int main() {
    SeqQueue* SQ = new SeqQueue;
    DataType data = -1;
    //初始化队列
    InitQueue(SQ);
    //入队
    for (int i = 0; i < 7; i++) {
        EnterQueue(SQ, i);
    }
    //打印队列中的元素
    printf("队列中的元素(总共%d 个):", getLength(SQ));
    PrintQueue(SQ);
    cout << endl;
    //出队
    //for(int i=0; i<10; i++){
    if (DeleteQueue2(SQ, &data)) {
        cout << "出队的元素是:" << data << endl;
    }
    else {
        cout << "出队失败!" << endl;
    }
    //}
    //打印队列中的元素
    printf("出队一个元素后,队列中剩下的元素:");
    PrintQueue(SQ);
    cout << endl;

    system("pause");
    return 0;
}

标签:return,队列,SQ,C++,front,基本操作,数据结构,SeqQueue,rear
From: https://www.cnblogs.com/smartlearn/p/17175317.html

相关文章

  • c++注释
    注释分为单行注释和界定符对注释单行注释://界定符对注释:/*      */(用于注释多行)注意:当界定符对注释多行时更规范的做写法是每一行前面都要有个星号  ......
  • c/c++ 随机数
    #include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>#include<string.h>#include<time.h>//头文件#include<iostream>usingnamesp......
  • UEC++学习(1)
    第三章流程控制第一节C++和蓝图循环ForLoop蓝图节点相当于C++中的for循环,ForeLoopWithBreak节点相当于for循环体中加了break语句,当触发某个条件时直接结束。for(){ ......
  • UEC++学习(2)
    第三章断言第一节简单的断言断言让程序的进程中断,方便程序员发现在哪里发生了问题。AGameBase*GameBase=nullptr;check(false);check(GameBase);//断言给false......
  • C++--
            ###################################keyyyyyy          ......
  • 两数之和 II - 输入有序数组(数据结构和算法两种实现方式)
    题目:给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[ind......
  • 数据结构1.1
    一、简述本节介绍一下单调栈以及单调栈的一些应用。二、单调栈所谓单调栈,就是具有存储的元素呈现某种单调性的栈。比如:从栈底元素到栈顶元素是单调递减的,就是一个单调......
  • 数据库和表的基本操作
    1.进入mysql:“mysql-uroot-p123456”2.创建数据库:“createdatabase数据库名称;”3.查看数据库名称:“showdatabase;”4.查看已经创建的数据库信息:“showcreatedat......
  • C++11/std::atomic - 原子变量(不加锁实现线程互斥)
     文章目录1原子操作2C++11原子变量3使用原子变量3.1没有使用线程互斥的数据操作3.2使用互斥量保证线程互斥3.3使用原子量std::atomic保证数据互斥......
  • 3月1日至3月2日——数据结构与算法分析阅读笔记,线性表,AI。
    (开头是一些废话啊,最近感觉学习状态不太好,上高数的时候左耳听进去右耳就出来了,有点跟不上,可能是没吃饭的原因,也可能是最近强度有点大了,下午上完课就给自己休息了一下,结果刷......