【数据结构】顺序队列的表示和实现

it2022-05-10  64

#include<iostream> using namespace std; const int MAXSIZE = 10; typedef struct Queue { int data[MAXSIZE]; int front, rear; }Queue; void InitQueue(Queue &Q) { Q.front = Q.rear = 0; } bool QueueEmpty(Queue Q) { if (Q.front == Q.rear) { cout<<"Queue is empty"<<endl; return true; } return false; } bool QueueFull(Queue Q) { if (Q.rear-Q.front< MAXSIZE) return false; cout<<"Queue is full"<<endl; return true; } bool EnQueue(Queue &Q, int data) { if (QueueFull(Q)) { cout<<"Enqueue "<<data<<" failed"<<endl; return false; } if (Q.rear == MAXSIZE && !QueueFull(Q)) { for (int i=0; i<Q.rear-Q.front; i++) Q.data[i]=Q.data[i+Q.front]; Q.rear-=Q.front; Q.front = 0; } Q.data[Q.rear++] = data; return true; } bool DeQueue(Queue &Q, int &data) { if (!QueueEmpty(Q)) { data = Q.data[Q.front++]; return true; } return false; } void GetHead(Queue Q, int &head) { if (!QueueEmpty(Q)) head = Q.data[Q.front]; } void PrintQueue(Queue Q) { if (!QueueEmpty(Q)) for (int i=Q.front; i<Q.rear; i++) cout<<Q.data[i]<<" "; cout<<endl; } int main() { Queue Q; InitQueue(Q); cout<<"Enqueue 10 elements"<<endl; for (int i=0; i<13; 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 0 1 2 3 4 5 6 7 8 9 Queue is full Enqueue 10 failed 0 1 2 3 4 5 6 7 8 9 Queue is full Enqueue 11 failed 0 1 2 3 4 5 6 7 8 9 Queue is full Enqueue 12 failed 0 1 2 3 4 5 6 7 8 9 Dequeue 5 elements After dequeue 0 1 2 3 4 5 6 7 8 9 After dequeue 1 2 3 4 5 6 7 8 9 After dequeue 2 3 4 5 6 7 8 9 After dequeue 3 4 5 6 7 8 9 After dequeue 4 5 6 7 8 9 Enqueue 2 elements 5 6 7 8 9 0 5 6 7 8 9 0 1

 


最新回复(0)