【数据结构】循环队列的表示和实现
#include<iostream>
using namespace std;
const int MAXSIZE = 10;
typedef struct Queue {
int data[MAXSIZE];
int front;
int rear;
}Queue;
void InitQueue(Queue &Q) {
Q.rear = Q.front = 0;
}
bool QueueEmpty(Queue Q) {
if (Q.rear == Q.front) {
cout<<"Queue is empty"<<endl;
return true;
}
return false;
}
bool QueueFull(Queue Q) {
if ((Q.rear+1)%MAXSIZE == Q.front) {
cout<<"Queue is full"<<endl;
return true;
}
return false;
}
bool EnQueue(Queue &Q, int data) {
if (QueueFull(Q)) {
cout<<"Enqueue "<<data<<" fail"<<endl;
return false;
}
Q.data[Q.rear] = data;
Q.rear = (Q.rear+1)%MAXSIZE;
return true;
}
bool DeQueue(Queue &Q, int &data) {
if (QueueEmpty(Q))
return false;
data = Q.data[Q.front];
Q.front = (Q.front+1)%MAXSIZE;
return true;
}
void PrintQueue(Queue Q) {
int ptr = Q.front;
while (ptr != Q.rear) {
cout<<Q.data[ptr]<<" ";
ptr = (ptr+1)%MAXSIZE;
}
cout<<endl;
}
int main() {
Queue Q;
InitQueue(Q);
cout<<"Enqueue 10 elements"<<endl;
for (int i=0; i<10; i++)
EnQueue(Q, i), PrintQueue(Q);
cout<<endl<<"Dequeue 5 elements"<<endl;
for (int i=0, e; i<5; i++) {
DeQueue(Q, e);
cout<<"After dequeue "<<e<<endl;
PrintQueue(Q);
}
cout<<endl<<"Enqueue 2 elements"<<endl;
for (int i=0; i<2; i++)
EnQueue(Q, i), PrintQueue(Q);
return 0;
}
// 测试结果
Enqueue 10 elements
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4
0 1 2 3 4 5
0 1 2 3 4 5 6
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7 8
Queue is full
Enqueue 9 fail
0 1 2 3 4 5 6 7 8
Dequeue 5 elements
After dequeue 0
1 2 3 4 5 6 7 8
After dequeue 1
2 3 4 5 6 7 8
After dequeue 2
3 4 5 6 7 8
After dequeue 3
4 5 6 7 8
After dequeue 4
5 6 7 8
Enqueue 2 elements
5 6 7 8 0
5 6 7 8 0 1
还没有评论,来说两句吧...