資料結構(十一)迴圈佇列的基本操作----6個基本操作
阿新 • • 發佈:2019-01-10
//順序佇列存在一個問題 ---假溢位現象,為了解決這個問題,提出了迴圈佇列 //迴圈佇列中存在隊空和隊滿條件一樣的情況,因此提出了犧牲一個空間的方法 //迴圈佇列的基本操作 #include <iostream> using namespace std; #define MAXSIZE 5 //佇列的結構體 struct Node { int *base; int front; int rear; }; //佇列的初始化操作 void initQueue(struct Node &Q) { Q.base = new int[MAXSIZE]; if(Q.base == NULL) { cout<<"地址分配失敗\n"; exit(1); } Q.front = Q.rear=0; } //隊空的判斷 int isEmpty(struct Node Q) { if(Q.front == Q.rear) { return 1; } else { return 0; } } //隊滿的判斷 int isFull(struct Node Q) { if((Q.rear+1)%MAXSIZE==Q.front) { return 1; } else { return 0; } } //入佇列操作 void Enqueue(struct Node &Q) { int e; cout<<"請輸入你要入隊的資料:\n"; cin>>e; Q.base[Q.rear] = e; Q.rear=(Q.rear+1)%MAXSIZE; } //出佇列的操作 void inQueue(struct Node &Q,int &e) { e = Q.base[Q.front]; Q.front = (Q.front +1)%MAXSIZE; } //佇列的實際長度 int length(struct Node Q) { int len; len = (Q.rear-Q.front+MAXSIZE)%MAXSIZE; return len; } int main() { struct Node Q; initQueue(Q); for(int i=0;i<4;i++) { if(isFull(Q)) { cout<<"佇列已經滿了\n"; break; } Enqueue(Q); } int e; for(int i=0;i<4;i++) { inQueue(Q,e); cout<<e<<" "; } if(isEmpty(Q)) { cout<<"佇列為空\n"; exit(1); } return 0; }