C/C++实现队列

能跑,有点小问题

#include <iostream>

using namespace std;

#define QUEUEMAX 5

typedef int dataType;

typedef struct Queue
{
    int queue[QUEUEMAX];
    int front;//队头指针
    int rear;//队尾指针
}SeqQueue;

//初始化
bool initQueue(SeqQueue *sq)
{
    if (!sq) return false;

    sq->front = 0;
    sq->rear = 0;
    return true;
}

//判断队列是否为空
int isEMpty(SeqQueue*sq)
{
    if (!sq) return 0;

    if (sq->front == sq->rear)    return 1;
}

//队列已满
int isfull(SeqQueue* sq)
{
    if (!sq) return 0;

    if (sq->rear == QUEUEMAX)
    {
        cout << sq->rear << endl;
        return 1;
    }
    return 0;
}

//入队
int enterQueue(SeqQueue* sq, int data)
{
    if (!sq) return 0;

    if (isfull(sq))
    {
        cout << "队列已满,无法插入";
        return 0;
    }

    sq->queue[sq->rear] = data;//队尾插入数据
    sq->rear++;

    return 1;
}

//出队,后面元素前移
int DeleteQueue(SeqQueue*sq, int* data)
{
    cout << "data==" << *data << endl;
    if (!sq || !isEMpty(sq))
    {
        cout << "队列为空";
        return 0;
    }
    
    if (!data) return 0;
    
    cout << "出队 sq->front ==" << sq->front << endl;
    *data = sq->queue[sq->front];

    //移动后面的元素
    for (int i = sq->front; i < sq->rear; i++)
    {
        sq->queue[i] = sq->queue[i + 1];
    }
    sq->rear--;
    return 1;
}

//获取队首元素
int getHead(SeqQueue* sq, int* data)
{
    if (!sq || !isEMpty(sq))
    {
        cout << "队列为空";
        return 0;
    }

    return *data = sq->queue[sq->front];
}

//清空队列
void CloseQueue(SeqQueue* sq)
{
    if (!sq) return;

    sq->queue[0] = 0;
    sq->front = 0;
    sq->rear = 0;
    cout << "队列以清空" << endl;
}

//获取队列元素个数
void GetLength(SeqQueue* sq)
{
    if (!sq) return;
    cout <<"队列元素个数:"<< sq->rear - sq->front << endl;
}

//打印
void outinput(SeqQueue* sq)
{
    if (!sq || !isEMpty(sq))
    {
        cout << "没有数据啦";
        return;
    }

    else
    {
        for (int i = 0; i < sq->rear; i++)
        {
            cout << sq->queue[i] << "\t";
        }
        cout << endl;
        cout <<"**********************************" << endl;
    }

    //if (isEMpty(sq) == 1)
    //{
    //    cout << "空值" << endl;
    //    return;
    //}

}

int main(void)
{
    SeqQueue* q = new SeqQueue;
    int data = -1;
    if (initQueue(q))
    {
        cout << "初始化成功" << endl;
        if (!isEMpty(q))
        {
            cout << "队列为空";
        }
        int b = 66;
        for (int i = 0; i < 5; i++)
        {
            enterQueue(q, b);
            b = b + 10;
        }
    }
    cout << "队首元素是:" << getHead(q, &data) << endl;
    GetLength(q);
    outinput(q);
    CloseQueue(q);
    outinput(q);
    for (int i = 0; i < 10; i++)
    {
        if (DeleteQueue(q, &data))     cout << "出队数据是" << data << endl;

        else cout << "出队失败" << endl;
    }
    outinput(q);

    cin.get();

    return 0;
}

 

posted @ 2022-02-12 13:19  乐吴  阅读(71)  评论(0编辑  收藏  举报