隊列(靜態方式)

隊列是一種只允許在隊尾插入元素,在隊頭插入元素的一種數據結構。就比如我們生活中的排隊。隊列最主要的是判斷隊空或者隊滿。隊列的靜態方式實現,利用數組設置一個循環的隊列。代碼如下:

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章