(5)队列
目錄
隊(duì)列知識(shí)點(diǎn):
循環(huán)隊(duì)列:
隊(duì)列的操作:
創(chuàng)建隊(duì)列:
判斷隊(duì)列是否已滿:
入隊(duì):
遍歷隊(duì)列:
判斷隊(duì)列是否為空:
出隊(duì):
這篇筆記是根據(jù)郝斌老師的上課講義整理而得:
隊(duì)列知識(shí)點(diǎn):
定義:一種可以實(shí)現(xiàn)先進(jìn)先出的存儲(chǔ)結(jié)構(gòu),分為鏈?zhǔn)疥?duì)列(鏈表實(shí)現(xiàn))和靜態(tài)隊(duì)列(數(shù)組實(shí)現(xiàn))。
循環(huán)隊(duì)列:
?? ??? ??? ?1. 靜態(tài)隊(duì)列為什么必須是循環(huán)隊(duì)列
?? ??? ??? ??? ??? ?front指向隊(duì)列第一個(gè)元素
?? ??? ??? ??? ??? ?rear指向隊(duì)列最后一個(gè)元素的下一個(gè)元素
?? ??? ??? ?2. 循環(huán)隊(duì)列需要幾個(gè)參數(shù)確定
?? ??? ??? ??? ??? ?兩個(gè)參數(shù);不同場(chǎng)合有不同的含義?? ?
?? ??? ??? ?3. 循環(huán)隊(duì)列各個(gè)參數(shù)的含義
?? ??? ??? ??? ??? ?1) 隊(duì)列初始化
?? ??? ??? ??? ??? ??? ??? ?front 和rear 值為零
?? ??? ??? ??? ??? ?2) 隊(duì)列非空
?? ??? ??? ??? ??? ??? ??? ?front代表的是隊(duì)列的第一個(gè)元素
?? ??? ??? ??? ??? ??? ??? ?rear代表隊(duì)列最后一個(gè)有效元素的下一個(gè)元素
?? ??? ??? ??? ??? ?3) 隊(duì)列空
?? ??? ??? ??? ??? ??? ??? ?front = rear 但不一定為零
?? ??? ??? ??? ??? ??? ??? ?
?? ??? ??? ?4. 循環(huán)隊(duì)列入隊(duì)偽算法講解
?? ??? ??? ??? ??? ?1. 將要存放的值放入r所在的位置
?? ??? ??? ??? ??? ?2. r = (r+1)%數(shù)組的長(zhǎng)度
?? ??? ??? ?5. 循環(huán)隊(duì)列出隊(duì)偽算法講解
?? ??? ??? ??? ??? ? ? f = (f+1)%數(shù)組的長(zhǎng)度
?? ??? ??? ??? ??? ? ??
?? ??? ??? ?6. 如何判斷循環(huán)隊(duì)列是否為空
?? ??? ??? ??? ??? ?如果front與rear的值相等,則該隊(duì)列就一定為空
?? ??? ??? ?7. 如何判斷循環(huán)隊(duì)列是否已滿
?? ??? ??? ??? ??? ?兩種方式:1.多增加一個(gè)標(biāo)識(shí)符參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2. if((r+1)%數(shù)組長(zhǎng)度==f)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?已滿
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?未滿
隊(duì)列的操作:
#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 *);創(chuàng)建隊(duì)列:
void init(QUEUE *pQ) {pQ->pBase = (int *)malloc(sizeof(int) * 6);//隊(duì)列空間大小為6個(gè)int元素pQ->front = 0;pQ->rear = 0; }判斷隊(duì)列是否已滿:
bool full_queue(QUEUE * pQ) {if ( (pQ->rear + 1) % 6 == pQ->front )return true;elsereturn false; }入隊(duì):
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;} }遍歷隊(duì)列:
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; }判斷隊(duì)列是否為空:
bool emput_queue(QUEUE * pQ) {if ( pQ->front == pQ->rear )return true;elsereturn false; }出隊(duì):
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;} }?
總結(jié)
- 上一篇: 美国股市大跌,是因为美债收益率的飙升,吓
- 下一篇: 从零开始学视觉Transformer(1