今天實現循環隊列遇到了一個問題,數組裏面有一個位置始終空着,不知道咋把整個數組完全用上...
一下是我的代碼:
#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函數並沒什麼用。。。