代码拉取完成,页面将自动刷新
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include "Common.h"
// 队列的顺序存储结构(循环队列)
#define MAX_QSIZE 6 // 最大队列长度+1
#define MAX_STRING_SIZE 50 // 最大表达式长度
typedef char* QElemType;
typedef struct
{
QElemType* base; // 初始化的动态分配存储空间
int front; // 头指针,若队列不空,指向队列头元素
int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
} SqQueue;
// 构造一个空队列Q
Status QInit(SqQueue& Q)
{
Q.base = (QElemType*)malloc(MAX_QSIZE * sizeof(QElemType*));
for (int i = 0; i < MAX_QSIZE; i++)
{
Q.base[i] = (QElemType)malloc(MAX_STRING_SIZE * sizeof(QElemType));
}
// 存储分配失败
if (!Q.base) {
return ERROR;
}
Q.front = Q.rear = 0;
return OK;
}
// 销毁队列Q,Q不再存在
void QDestroy(SqQueue& Q)
{
if (Q.base)
free(Q.base);
Q.base = NULL;
Q.front = Q.rear = 0;
}
// 将Q清为空队列
void QClear(SqQueue& Q)
{
Q.front = Q.rear = 0;
}
// 若队列Q为空队列,则返回1;否则返回-1
Status QEmpty(SqQueue& Q)
{
if (Q.front == Q.rear) // 队列空的标志
return OK;
else
return ERROR;
}
// 返回Q的元素个数,即队列的长度
int QLength(SqQueue& Q)
{
return (Q.rear - Q.front + MAX_QSIZE) % MAX_QSIZE;
}
// 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR
int QGetHead(SqQueue Q, QElemType& e)
{
if (Q.front == Q.rear) // 队列空
return ERROR;
strcpy(e, Q.base[Q.front]);
return OK;
}
// 打印队列中的内容
void QPrint(SqQueue& Q)
{
int p = Q.front;
cout << "CALCULATOR HISTORY" << endl;
while (Q.rear != p) {
cout << Q.base[p] << endl;
p = (p + 1) % MAX_QSIZE;
}
cout << "---------------------------------------------------" << endl;
}
// 插入元素e为Q的新的队尾元素
int QPush(SqQueue& Q, QElemType e)
{
if ((Q.rear + 1) % MAX_QSIZE == Q.front) // 队列满
return ERROR;
strcpy(Q.base[Q.rear], e);
Q.rear = (Q.rear + 1) % MAX_QSIZE;
return OK;
}
// 若队列不空,则删除Q的队头元素,用e返回其值,并返回1;否则返回-1
int QPop(SqQueue& Q)
{
if (Q.front == Q.rear) // 队列空
return ERROR;
//e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAX_QSIZE;
return OK;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。