C++數(shù)據(jù)結構的隊列詳解
更新時間:2021年11月16日 15:45:59 作者:lxkeepcoding
這篇文章主要為大家介紹了C++數(shù)據(jù)結構的隊列,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
前言
hello,大家好,這期文章我們來分享數(shù)據(jù)結構關于隊列的知識。希望對大家有所幫助,閑言少敘,現(xiàn)在開始。
1. 隊列的概念及結構
隊列:只允許在一端進行插入數(shù)據(jù)操作,在另一端進行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進先出FIFO(First In First Out) 入隊列:進行插入操作的一端稱為隊尾 出隊列:進行刪除操作的一端稱為隊頭
2. 隊列的實現(xiàn)
2.1 queue.h
#include<stdio.h> #include<stdbool.h> #include<assert.h> #include<malloc.h> typedef int QDataType; typedef struct QueueNode { struct QueueNode*next; QDataType data; }QueueNode; typedef struct Queue { QueueNode *head; QueueNode *tail; }Queue; void QueueInit(Queue *pq); void QueueDestory(Queue *pq); void QueuePush(Queue *pq,QDataType x); void QueuePop(Queue *pq); QDataType QueueFront(Queue *pq); QDataType QueueBack(Queue *pq); bool QueueEmpty(Queue *pq); int QueueSize(Queue *pq);
2.2 queue.c
#include"queue.h" void QueueInit(Queue *pq) { assert(pq); pq->head = pq->tail = NULL; } void QueueDestory(Queue *pq) { assert(pq); QueueNode *cur = pq->head; while (cur) { QueueNode *next = cur->next; free(cur); cur = next; } pq->head = pq->tail = NULL; } void QueuePush(Queue *pq, QDataType x) { assert(pq); QueueNode *newnode = (QueueNode*)malloc(sizeof(QueueNode)); if (newnode == NULL) { printf("malloc fail\n"); exit(-1); } newnode->data = x; newnode->next = NULL; if (pq->tail == NULL) { pq->head = pq->tail = newnode; } else { pq->tail->next = newnode; pq->tail = newnode; } } void QueuePop(Queue *pq) { assert(pq); assert(!QueueEmpty(pq)); if (pq->head->next == NULL) { free(pq->head); pq->head = pq->tail = NULL; } else { QueueNode *next = pq->head->next; free(pq->head); pq->head = next; } } QDataType QueueFront(Queue *pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->head->data; } QDataType QueueBack(Queue *pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->tail->data; } bool QueueEmpty(Queue *pq) { assert(pq); return pq->head == NULL; } int QueueSize(Queue *pq) { int size = 0; QueueNode *cur = pq->head; while (cur) { QueueNode *next = cur->next; ++size; cur = cur->next; } return size; }
2.3 test.c
#include"queue.h" void TestOne() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush(&q, 3); QueuePush(&q, 4); while (!QueueEmpty(&q)) { printf("%d ", QueueFront(&q)); QueuePop(&q); } printf("\n"); QueueDestory(&q); } int main() { TestOne(); return 0; }
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
C++?opencv實現(xiàn)在圖片上畫一條線示例代碼
這篇文章主要為大家介紹了C++?opencv實現(xiàn)在圖片上畫一條線的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式
這篇文章主要介紹了ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12