#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int QElemType;
//结构代码
typedef struct
{
QElemType *base; //初始化分配存储空间
int front; //头指针(并不是真正的指针)
int rear; //尾指针
}SqQueue;
//以下为循环队列的各种算法
//初始化
int InitQueue(SqQueue &Q)
{
Q.base = new QElemType[MAXSIZE]; //分配空间
if (!Q.base)
return -1; //分配内存失败
Q.front = Q.rear = 0; //将头指针和尾指针指向队头
return 0;
}
//求队列长度
int QueueLength(SqQueue &Q)
{
//因为循环队列会导致队尾在队头的前面
//所以需要用取余的方法考虑到这种情况
return(Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
//入队
int EnQueue(SqQueue &Q, QElemType e)
{
if ((Q.rear + 1) % MAXSIZE == Q.front) //判断是否队满
return -2;
Q.base[Q.rear] = e; //将需要添加的值赋值给队尾
Q.rear = (Q.rear + 1) % MAXSIZE; //rear指针向后移动
return 0;
}
//出队
int DeQueue(SqQueue &Q, QElemType &e)
{
if (Q.rear == Q.front) //判断是否为空队
return -3;
e = Q.base[Q.front]; //将要出队的元素保存到e中
Q.front = (Q.front + 1) % MAXSIZE; //队头指针向后移动
return 0;
}
青岛大学王卓老师数据结构——C++实现顺序队列
最新推荐文章于 2023-05-04 21:48:38 发布