(5)队列
目錄
隊列知識點:
循環隊列:
隊列的操作:
創建隊列:
判斷隊列是否已滿:
入隊:
遍歷隊列:
判斷隊列是否為空:
出隊:
這篇筆記是根據郝斌老師的上課講義整理而得:
隊列知識點:
定義:一種可以實現先進先出的存儲結構,分為鏈式隊列(鏈表實現)和靜態隊列(數組實現)。
循環隊列:
?? ??? ??? ?1. 靜態隊列為什么必須是循環隊列
?? ??? ??? ??? ??? ?front指向隊列第一個元素
?? ??? ??? ??? ??? ?rear指向隊列最后一個元素的下一個元素
?? ??? ??? ?2. 循環隊列需要幾個參數確定
?? ??? ??? ??? ??? ?兩個參數;不同場合有不同的含義?? ?
?? ??? ??? ?3. 循環隊列各個參數的含義
?? ??? ??? ??? ??? ?1) 隊列初始化
?? ??? ??? ??? ??? ??? ??? ?front 和rear 值為零
?? ??? ??? ??? ??? ?2) 隊列非空
?? ??? ??? ??? ??? ??? ??? ?front代表的是隊列的第一個元素
?? ??? ??? ??? ??? ??? ??? ?rear代表隊列最后一個有效元素的下一個元素
?? ??? ??? ??? ??? ?3) 隊列空
?? ??? ??? ??? ??? ??? ??? ?front = rear 但不一定為零
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ?4. 循環隊列入隊偽算法講解
?? ??? ??? ??? ??? ?1. 將要存放的值放入r所在的位置
?? ??? ??? ??? ??? ?2. r = (r+1)%數組的長度
?? ??? ??? ?5. 循環隊列出隊偽算法講解
?? ??? ??? ??? ??? ? ? f = (f+1)%數組的長度
?? ??? ??? ??? ??? ? ??
?? ??? ??? ?6. 如何判斷循環隊列是否為空
?? ??? ??? ??? ??? ?如果front與rear的值相等,則該隊列就一定為空
?? ??? ??? ?7. 如何判斷循環隊列是否已滿
?? ??? ??? ??? ??? ?兩種方式:1.多增加一個標識符參數
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. if((r+1)%數組長度==f)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?已滿
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?未滿
隊列的操作:
#include <stdio.h> #include <stdlib.h> #include <malloc.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 *);創建隊列:
void init(QUEUE *pQ) {pQ->pBase = (int *)malloc(sizeof(int) * 6);//隊列空間大小為6個int元素pQ->front = 0;pQ->rear = 0; }判斷隊列是否已滿:
bool full_queue(QUEUE * pQ) {if ( (pQ->rear + 1) % 6 == pQ->front )return true;elsereturn 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;}printf("\n");return; }判斷隊列是否為空:
bool emput_queue(QUEUE * pQ) {if ( pQ->front == pQ->rear )return true;elsereturn false; }出隊:
bool out_queue(QUEUE * pQ, int * pVal) {if ( emput_queue(pQ) ){return false;}else{*pVal = pQ->pBase[pQ->front];pQ->front = (pQ->front+1) % 6;return true;} }?
總結
- 上一篇: 美国股市大跌,是因为美债收益率的飙升,吓
- 下一篇: 光大信用卡逾期利息怎么算 循环罚息可别小