1.定義算法
能夠實現「先進先出」的存儲結構數組
2. 分類post
鏈式隊列 ——用鏈表實現spa
只容許在鏈表的頭部刪除,鏈表的尾部增長,就是隊列指針
靜態隊列(數組隊列) ——用數組實現blog
靜態隊列一般都必須是循環隊列隊列
循環隊列的講解:it
1.靜態隊列爲何必須是循環隊列io
2.循環隊列須要幾個參數來肯定循環
須要2個參數來肯定
front
rear
3.循環隊列各個參數的含義
2個參數不一樣場合有不一樣的含義
1)隊列初始化
front和rear的值都是零
2)隊列非空
front表明隊列的第一個元素
rear表明的隊列的最後一個有效元素的下一個元素
3)隊列空
front和rear的值相等,可是不必定是零(front++,front=rear,隊列爲空)
4.循環隊列入隊僞算法講解
r移動
1) 將值存入r所表明的位置
2) 對於r
錯誤寫法 r = r + 1
正確寫法 r = (r+1)%數組長度,解決了當r=5的時候的循環問題
5.循環隊列出隊僞算法講解
f移動
f = (f + 1)%數組長度 (數組長度對於下表的話爲6)
6.如何判斷循環隊列是否爲空
若是front與rear的值相等,則該隊列必定爲空
7.如何判斷循環隊列是否已滿
兩種方式
1)多增長一個標誌參數
2)若是r和f緊挨着,則隊列已滿(至關於浪費一個元素的位置)
至關於當4的位置上填入s以後,r移動到5的位置,5的位置不填值,已滿
if ((r+1)%數組長度 == f)
已滿
else
不滿
//原則:通常來講無論是鏈表仍是隊列,頭指向頭個有實質意義結點,則尾部爲尾部結點指向的下一個結點,反之相同
3.
當要刪除中的時候,指針front直接循環回去,不指向「中」,rear指針向下移動一位便可
3.隊列的基本應用
全部和時間相關的操做都與隊列有關
代碼實現:
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <stdbool.h>typedef struct Queue{ int * pBase; int front; int rear;}QUEUE;void init(QUEUE *);bool en_queue(QUEUE *, int val);void traverse_queue(QUEUE *);bool full_queue(QUEUE *);bool out_queue(QUEUE *, int * );bool empty_queue(QUEUE * );int main(){ QUEUE Q; int val; init(&Q); en_queue(&Q, 1);https://i.cnblogs.com/posts en_queue(&Q, 2); en_queue(&Q, 3); en_queue(&Q, 4); en_queue(&Q, 5); en_queue(&Q, 6); traverse_queue(&Q); if (out_queue(&Q, &val)) { printf("出隊成功,出隊成功的元素是:%d\n", val); } else { printf("出隊失敗\n"); } traverse_queue(&Q); return 0;}void init(QUEUE *pQ){ pQ->pBase = (int *)malloc(sizeof(int) * 6); pQ->front = 0; pQ->rear = 0;}bool full_queue(QUEUE *pQ){ if ((pQ->rear + 1) % 6 == pQ->front) { return true; } else { return false; }}bool en_queue(QUEUE *pQ, int val){ if (full_queue(pQ)) { return false; } else { pQ->pBase[pQ->rear] = val; pQ->rear = (pQ->rear+1) % 6; return true; }}void traverse_queue(QUEUE * pQ){ int i = pQ->front; while(i != pQ->rear) { printf("%d ", pQ->pBase[i]); i = (i+1) % 6; } return;}bool empty_queue(QUEUE * pQ){ if (pQ->front == pQ->rear) { return true; } else { return false; }}bool out_queue(QUEUE *pQ, int * pVal){ if (empty_queue(pQ)) { return false; } else { *pVal = pQ->pBase[pQ->front]; pQ->front = (pQ->front + 1) % 6; return true; }}