C++實現循環隊列

今天實現循環隊列遇到了一個問題,數組裏面有一個位置始終空着,不知道咋把整個數組完全用上...

一下是我的代碼:

#include <iostream>
#include <malloc.h>
#include <cstdlib>
#define MAX_SIZE 5
using namespace std;
typedef int ElmeType;
typedef int status;
//循環隊列定義
typedef struct
{
    ElmeType q[MAX_SIZE];
    ElmeType front;
    ElmeType rear;
} CirQueue;
//初始化循環隊列
status InitCirQueue(CirQueue *Cq)
{
    Cq->front = Cq->rear = 0;
    return 1;
}
//刪除循環隊列
status DeleteCq(CirQueue *Cq)
{
    delete(Cq);
    return 1;
}
//清空循環隊列
status ClearCq(CirQueue *Cq)
{
    Cq->front = Cq->rear = 0;
    return 1;
}
//進隊列
status InCq(CirQueue *Cq, ElmeType e)
{
    if((Cq->rear + 1) % MAX_SIZE == Cq->front)//隊列滿了
        return -1;
    Cq->q[Cq->rear % MAX_SIZE] = e;
    Cq->rear++;
    return 1;
}
//出隊列,並用e返回出隊列元素
status OutCq(CirQueue *Cq, ElmeType *e)
{
    if(Cq->rear == Cq->front)//隊列爲空
        return -1;
    *e = Cq->q[Cq->front % MAX_SIZE];
    Cq->front++;
    return 1;
}
//獲得隊尾元素,用e返回
void LastElme(CirQueue *Cq, ElmeType *e)
{
    *e = Cq->q[(Cq->rear - 1) % MAX_SIZE];
}
//返回隊列是否爲空
status isEmpty(CirQueue *Cq)
{
    if(Cq->front == Cq->rear)
        return 1;
    else
        return -1;
}
int main()
{
    CirQueue Cq;
    ElmeType e;
    status i;
    InitCirQueue(&Cq);
    while(cin >> e)
    {
        i = InCq(&Cq, e);
        if(i == -1)
        {
            cout << "隊列已滿!\n";
            break;
        }
    }
    i = isEmpty(&Cq);
    if(i == 1)
        cout << "隊列爲空!\n";
    else
        cout << "隊列不爲空!\n";
    LastElme(&Cq, &e);
    cout << "隊尾元素:" << e << endl;
    i = OutCq(&Cq, &e);
    while(i != -1)
    {
        cout << "出隊元素:" << e << endl;
        i = OutCq(&Cq, &e);
    }
    i = isEmpty(&Cq);
    if(i == 1)
        cout << "隊列爲空!\n";
    else
        cout << "隊列不爲空!\n";
    DeleteCq(&Cq);
    return 0;
}
好像delete函數並沒什麼用。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章