C++实现循环队列:实现旧数据替换

C++实现循环队列:实现旧数据替换

/*  完整代码  */
#include <iostream>

using namespace std;
#define MAX_SIZE 5

typedef struct queue {
    int count;
    int front;
    int rear;
    int data[MAX_SIZE];
}Queue;

void Init(Queue* ptr) { //初始化队列
    ptr->count = 0;
    ptr->front = 0;
    ptr->rear = -1;
}

bool QueueFull(Queue* ptr) {  //判断队列是否满
    return ptr->count >= MAX_SIZE;
}

bool QueueEmpty(Queue* ptr) {   //判断队列是否为空
    return ptr->count <= 0;
}

void Append(Queue* ptr, int item) {    //入队
    if (QueueFull(ptr)) {
        //cout << "队列满了!" << endl;
        //return;
        
        ptr->front = (ptr->front + 1) % MAX_SIZE;
        ptr->rear = (ptr->rear + 1) % MAX_SIZE;
        ptr->data[ptr->rear] = item;
    }
    else {
        ptr->count++;
        ptr->rear = (ptr->rear + 1) % MAX_SIZE;
        ptr->data[ptr->rear] = item;
    }
}

void Pop(Queue* ptr) {  //出队
    if (QueueEmpty(ptr))
    {
        cout << "队列为空!" << endl;
        return;
    }
    else {
        ptr->count--;
        ptr->front = (ptr->front + 1) % MAX_SIZE;
    }
}

int QueueSize(Queue* ptr) {    //返回队列长度
    return ptr->count;
}

void Show(Queue* ptr) { //遍历队列
    if (QueueEmpty(ptr)) {
        cout << "队列为空!" << endl;
        return;
    }
    else {
        cout << "队列遍历: ";
        int i = ptr->front;
        while (i != ptr->rear) {
            cout << ptr->data[i] << " ";
            i++;
            i = i % MAX_SIZE;
        }
        cout << ptr->data[ptr->rear] << " ";
    }
    cout << endl;
}


int main() {
    Queue* dummy = (Queue *)malloc(sizeof(Queue));  //申请结点空间
    Init(dummy);
    
    cout << "入队操作---";
    Append(dummy, 1);
    Append(dummy, 2);
    Append(dummy, 3);
    Append(dummy, 4);
    Append(dummy, 5);
    Show(dummy);

    cout << "删除操作---";
    Pop(dummy);
    Show(dummy);

    cout << "队满状态---";
    Append(dummy, 6);
    Show(dummy);

//满队列进行覆盖操作
    cout << "队列存满后数据替换操作---";
    Append(dummy, 7);
    Append(dummy, 8);
    Show(dummy);

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值