//使用数组实现队列
#include <iostream>
#include <Windows.h>
using namespace std;
#define MAXSIZE 5 //队列的最大容量

typedef int DataType; //队列中的元素类型

typedef struct Queue {
    DataType queue[MAXSIZE];
    int front; //队头指针
    int rear; //队尾指针
}SeqQueue;
//队列初始化
void InitQueue(SeqQueue *SQ) {
    if (!SQ) return ;
    SQ->front = SQ->rear = 0; //把队头和队尾指针同时置0
}
//判断队列为空
bool IsEmpty(SeqQueue* SQ) {
    if (!SQ) return false;
    if (SQ->front == SQ->rear) {
        return true;
    }
    return false;
}
//判断队列是否为满
bool IsFull(SeqQueue* SQ) {
    if (!SQ) return false;
    if (SQ->rear == MAXSIZE) {
        return true;
    }
    return false;
}
//入队,将元素data插入到队列SQ中
bool EnterQueue(SeqQueue* SQ, DataType data) {
    if (!SQ)return false;
    if (IsFull(SQ)) {
        cout << "无法插入元素" << data << ",队列已满!" << endl;
        return false;
    }
    SQ->queue[SQ->rear] = data; //在队尾插入元素data
    SQ->rear++;//队尾指针后移一位
    return true;
}
//出队方法一,将队列中队头的元素data出队,后面的元素向前移动
bool DeleteQueue(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
        return false;
    }
    if (!data)return false;
    *data = SQ->queue[SQ->front];
    for (int i = SQ->front + 1; i < SQ->rear; i++) {
        SQ->queue[i - 1] = SQ->queue[i];
    }
    SQ->rear--;//队尾指针前移一位
    return true;
}
//出队方法二,将队列中队头的元素data出队,出队后队头指针front后移一位
bool DeleteQueue2(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
        return false;
    }
    if (SQ->front >= MAXSIZE) {
        cout << "队列已到尽头!" << endl;
        return false;
    }
    *data = SQ->queue[SQ->front];
    SQ->front = (SQ->front) + 1;//队首指针后移一位
    return true;
}
void PrintQueue(SeqQueue* SQ) {
    if (!SQ)return;
    int i = SQ->front;
    while (i < SQ->rear) {
        cout << SQ->queue[i] << " ";
        i++;
    }
    cout << endl;
}
//获取队首元素,不出队
int getHead(SeqQueue* SQ, DataType* data) {
    if (!SQ || IsEmpty(SQ)) {
        cout << "队列为空!" << endl;
    }
    return *data = SQ->queue[SQ->front];
}
//清空队列
void ClearQueue(SeqQueue* SQ) {
    if (!SQ) return;
    SQ->front = SQ->rear = 0;
}
//获取队列中元素的个数
int getLength(SeqQueue* SQ) {
    if (!SQ)return 0;
    return SQ->rear - SQ->front;
}
int main() {
    SeqQueue* SQ = new SeqQueue;
    DataType data = -1;
    //初始化队列
    InitQueue(SQ);
    //入队
    for (int i = 0; i < 7; i++) {
        EnterQueue(SQ, i);
    }
    //打印队列中的元素
    printf("队列中的元素(总共%d 个):", getLength(SQ));
    PrintQueue(SQ);
    cout << endl;
    //出队
    //for(int i=0; i<10; i++){
    if (DeleteQueue2(SQ, &data)) {
        cout << "出队的元素是:" << data << endl;
    }
    else {
        cout << "出队失败!" << endl;
    }
    //}
    //打印队列中的元素
    printf("出队一个元素后,队列中剩下的元素:");
    PrintQueue(SQ);
    cout << endl;

    system("pause");
    return 0;
}

posted on 2023-03-03 13:31  wshidaboss  阅读(146)  评论(0编辑  收藏  举报