数据结构 顺序循环队列

做一个豁达而努力的自己。

顺序循环队列的存储结构:

typedef struct 
{
    int *base;  //基地址
    int front;  //对头指针
    int rear;   //队尾指针
}SqQueue;

入队:

Status EnQueue(SqQueue &q, int e)
{
    if((q.rear + 1) % MAXSIZE == q.front)
        return ERROR;
    q.base[q.rear] = e;
    q.rear = (q.rear + 1) % MAXSIZE;
    return OK;
}
出队:

Status DeQueue(SqQueue &q, int e)
{
    if(q.rear == q.front)
        return ERROR;
    e = q.base[q.rear];
    q.front = (q.front + 1) % MAXSIZE;
    return OK;
}

代码:

#include <iostream>
using namespace std;
#define MAXSIZE 100

//顺序队列的存储结构
typedef struct
{
    int *base; //初始化的动态分配空间
    int front;  //头指针
    int rear;   //尾指针
}SqQueue;
//顺序队列的初始化
bool InitQueue(SqQueue &q)
{
    q.base = new int[MAXSIZE];
    if(!q.base)
        return false;
    q.front = q.rear = 0;
    return true;
}
//销毁顺序队列
void DestroyQueue(SqQueue &q)
{
    if(q.base)
    {
        delete q.base;
        q.front = q.rear = 0;
    }
}
//顺序队列的当前长度
int QueueLength(SqQueue q)
{
    return (q.rear - q.front + MAXSIZE) % MAXSIZE;
}
//顺序队列的清除
bool ClearQueue(SqQueue &q)
{
    if(q.base)
    {
        q.front = q.rear = 0;
        return true;
    }
    return false;
}
//判断顺序队列是否为空
bool EmptyQueue(SqQueue q)
{
    if(q.front == q.rear)
        return true;
    return false;
}
//入队
bool EnQueue(SqQueue &q, int e)
{
    if((q.rear + 1) % MAXSIZE == q.front)
        return false;
    q.base[q.rear] = e;
    q.rear = (q.rear + 1) % MAXSIZE;
    return true;
}
//出队
bool DeQueue(SqQueue &q, int &e)
{
    if(q.front == q.rear)
        return false;
    e = q.base[q.front];
    q.front = (q.front + 1) % MAXSIZE;
    return true;
}
//打印顺序队列
void PrintQueue(SqQueue q)
{
    while(q.front != q.rear)
    {
        cout << q.rear << '\t';
        q.rear--;
    }
    cout << endl;
}
int main()
{
    SqQueue q;
    InitQueue(q);
    int e;
    cout << "输入5个元素" << endl;
    for(int i = 1; i < 6; i++)
    {
        cin >> e;
        EnQueue(q, e);
    }
    PrintQueue(q);
    cout << "删除两个元素" << endl;;
    for(int i = 1; i < 3; i++)
        DeQueue(q, e);
    PrintQueue(q);
    cout << "销毁队列" << endl;
    DestroyQueue(q);
    cout << "销毁成功" << endl;
    return 0;
}




猜你喜欢

转载自blog.csdn.net/qq_37043100/article/details/79878940