8584 循环队列的基本操作

思路

  1. **初始化队列**:分配初始大小为 `MAXQSIZE` 的内存空间,并将 `front` 和 `rear` 指针初始化为 0。

  2. **入队**:检查队列是否已满,如果未满则将新元素插入队尾,并更新 `rear` 指针。

  3. **出队**:检查队列是否为空,如果不为空则删除队头元素,并更新 `front` 指针。

  4. **获取队头元素**:检查队列是否为空,如果不为空则返回队头元素。

  5. **获取队列的长度**:计算并返回队列的元素个数。

  6. **遍历队列**:从队头到队尾依次输出队列中的每个元素。

伪代码

```

function InitQueue(Q):

Q.base = allocate memory of size MAXQSIZE

Q.front = 0

Q.rear = 0

return OK

function EnQueue(Q, e):

if (Q.rear + 1) % MAXQSIZE == Q.front:

return ERROR

Q.base[Q.rear] = e

Q.rear = (Q.rear + 1) % MAXQSIZE

return OK

function DeQueue(Q, e):

if Q.front == Q.rear:

return ERROR

e = Q.base[Q.front]

Q.front = (Q.front + 1) % MAXQSIZE

return OK

function GetHead(Q, e):

if Q.front == Q.rear:

return ERROR

e = Q.base[Q.front]

return OK

function QueueLength(Q):

return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE

function QueueTraverse(Q):

if Q.front == Q.rear:

print "The Queue is Empty!"

else:

print "The Queue is: "

i = Q.front

while i != Q.rear:

print Q.base[i]

i = (i + 1) % MAXQSIZE

return OK

```

C++代码

cpp 复制代码
#include <malloc.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int QElemType;
#define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要减1)

typedef struct {
    QElemType *base; // 初始化的动态分配存储空间
    int front; // 头指针,若队列不空,指向队列头元素
    int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
} SqQueue;

Status InitQueue(SqQueue &Q) {
    Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
    if (!Q.base) return ERROR;
    Q.front = 0;
    Q.rear = 0;
    return OK;
}

Status EnQueue(SqQueue &Q, QElemType e) {
    if ((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; // 队列满
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear + 1) % MAXQSIZE;
    return OK;
}

Status DeQueue(SqQueue &Q, QElemType &e) {
    if (Q.front == Q.rear) return ERROR; // 队列空
    e = Q.base[Q.front];
    Q.front = (Q.front + 1) % MAXQSIZE;
    return OK;
}

Status GetHead(SqQueue Q, QElemType &e) {
    if (Q.front == Q.rear) return ERROR; // 队列空
    e = Q.base[Q.front];
    return OK;
}

int QueueLength(SqQueue Q) {
    return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}

Status QueueTraverse(SqQueue Q) {
    int i = Q.front;
    if (Q.front == Q.rear) {
        printf("The Queue is Empty!\n");
    } else {
        printf("The Queue is: ");
        while (i != Q.rear) {
            printf("%d ", Q.base[i]);
            i = (i + 1) % MAXQSIZE;
        }
        printf("\n");
    }
    return OK;
}

int main() {
    int a;
    SqQueue S;
    QElemType x, e;
    if (InitQueue(S) == OK) {
        printf("A Queue Has Created.\n");
    }
    while (1) {
        printf("1:Enter \n2:Delete \n3:Get the Front \n4:Return the Length of the Queue\n5:Load the Queue\n0:Exit\nPlease choose:\n");
        scanf("%d", &a);
        switch (a) {
            case 1:
                scanf("%d", &x);
                if (EnQueue(S, x) == ERROR) printf("Enter Error!\n");
                else printf("The Element %d is Successfully Entered!\n", x);
                break;
            case 2:
                if (DeQueue(S, e) == ERROR) printf("Delete Error!\n");
                else printf("The Element %d is Successfully Deleted!\n", e);
                break;
            case 3:
                if (GetHead(S, e) == ERROR) printf("Get Head Error!\n");
                else printf("The Head of the Queue is %d!\n", e);
                break;
            case 4:
                printf("The Length of the Queue is %d!\n", QueueLength(S));
                break;
            case 5:
                QueueTraverse(S);
                break;
            case 0:
                return 1;
        }
    }
}
相关推荐
lu_rong_qq14 分钟前
决策树 DecisionTreeClassifier() 模型参数介绍
算法·决策树·机器学习
Heisenberg~16 分钟前
详解八大排序(五)------(计数排序,时间复杂度)
c语言·数据结构·排序算法
南东山人5 小时前
一文说清:C和C++混合编程
c语言·c++
LNTON羚通6 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
哭泣的眼泪4088 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Ysjt | 深8 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++
ephemerals__8 小时前
【c++丨STL】list模拟实现(附源码)
开发语言·c++·list
IT古董8 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
Microsoft Word8 小时前
c++基础语法
开发语言·c++·算法