隊列是一種只容許在隊尾插入元素,在隊頭插入元素的一種數據結構。就好比咱們生活中的排隊。隊列最主要的是判斷隊空或者隊滿。隊列的靜態方式實現,利用數組設置一個循環的隊列。代碼以下:ios
#include <iostream> #include <stdio.h> #include <stdlib.h> #define MaxSize 10 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ /* 判斷隊列空滿: 方案一:代碼(浪費一個存儲空間,用來判斷隊滿和隊空) 方案二:增長一個變量表示隊列長度(初始化爲0),每增長一個元素長度加一,每刪除一個元素 減一。最後長度爲MaxSize的隊滿,長度爲0的隊空(不浪費) 方案三:增長一個判斷型變量表示最近一次插入(0)或者刪除的操做 (1),每次增長元素都使 變量置爲0,刪除元素都使變量置爲1。這樣結合隊頭和隊尾指針指向同一個地方就能夠判斷(不浪費) */ //靜態方式定義隊列 typedef struct { int data[MaxSize];//用靜態數組存放元素 int front,rear;//隊頭指針和隊尾指針 }SqQueue; //靜態方式初始化隊列(隊頭隊尾都指向0) void InitQueue(SqQueue &Q){ Q.front = 0; Q.rear = 0; } //靜態方式判斷是否爲空隊列 bool isEmpty(SqQueue Q){ if(Q.front==Q.rear){ return true; }else{ return false; } } //靜態方式入隊 bool EnQueue(SqQueue &Q,int x){ if((Q.rear+1)%MaxSize==Q.front){//隊滿報錯 return false; } Q.data[Q.rear] = x; Q.rear = (Q.rear+1)%MaxSize;//隊尾+1取模(造成循環結構隊列) return true; } //靜態方式入隊 bool DeQueue(SqQueue &Q,int &x){ if(Q.front==Q.rear){//隊空報錯 return false; } x = Q.data[Q.rear]; Q.front = (Q.front+1)%MaxSize;//隊頭+1取模(造成循環結構隊列) return true; } //靜態方式得到隊頭元素 bool GetQueue(SqQueue &Q,int &x){ if(Q.front==Q.rear){//隊空報錯 return false; } x = Q.data[Q.rear]; return true; } //隊列元素個數計算((rear+MaxSize-front)%MaxSize) int main(int argc, char** argv) { SqQueue Q; InitQueue(Q); return 0; }