循環隊列的實現(c語言)

前言????????

? ? ? ? 循環隊列是隊列的一種特殊的結構,在生產者——消費者模型中常常使用它,?它在邏輯上是一個環形的連續的結構。在物理可以使用數組來實現。

目錄

1.循環隊列的邏輯結構

2.空的循環隊列和滿的循環隊列

3.循環隊列插入和刪除?

4.代碼實現?


1.循環隊列的邏輯結構

????????

? ? ? ? ?循環隊列在邏輯上連續的。

2.空的循環隊列和滿的循環隊列

? ? ? ? 因為是采用數組進行隊列的實現的,如果是存儲N個數據的隊列,需要開辟N + 1個空間,當隊頭指針Front等于隊尾指針rear時,隊列為空。當隊尾指針?(rear+1)%(N + 1)+ 1等于隊頭指針時,此時隊列為滿,為什么隊尾指針要對N + 1進行取模運算呢,因為數組是連續的,當循環隊列的尾指針走到數組的末尾時需要從數組下標為零的位置重新開始。不然數組的訪問就會越界,對于頭指針來說也是一樣的。如圖:

3.循環隊列插入和刪除?

? ? ? ? ?循環隊列和隊列一樣,也是在隊頭插入數據,隊尾刪除數據。需要注意的是如果隊頭已經在數組的末尾了這時候刪除掉隊頭的元素,隊頭的指針要更新到數組下標為零的元素,也就是front=(front+1)。那么下一次,隊列刪除的就是數組的第一個元素,如圖:

? ? ? ? ?插入元素也是一樣的,如果rear超過了數組的長度以后要回到開始的位置。

? ? ? ? 為什么給數組開空間的時候要多開一個呢,因為始終要留出一個空位來,不然無法確定隊列滿的條件。?

4.代碼實現?

????????

typedef struct
{int* _array;int _front;int _rear;int _k;
} MyCircularQueue;bool myCircularQueueIsFull(MyCircularQueue* obj);//判斷隊列是否滿了。
bool myCircularQueueIsEmpty(MyCircularQueue* obj);//判斷隊列是否為空MyCircularQueue* myCircularQueueCreate(int _k) {MyCircularQueue* qu = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));qu->_array = (int*)malloc(sizeof(int) * (_k + 1));//多開一個qu->_front = qu->_rear = 0;//初始化指針qu->_k = _k + 1;return qu;
}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)//入數據
{if (obj == NULL)return false;//隊列為空直接返回//如果隊列滿了也就不能插入元素了if (myCircularQueueIsFull(obj)){return false;}else{//隊尾入數據obj->_array[obj->_rear] = value;++(obj->_rear);obj->_rear = obj->_rear % (obj->_k);//確保rear是在合適的位置return true;}
}bool myCircularQueueDeQueue(MyCircularQueue* obj) //隊頭出數據
{if (obj == NULL)return false;if (obj->_front == obj->_rear)//隊列為空時不能出數據return false;++(obj->_front);obj->_front %= (obj->_k);//確保front不會越界return true;
}int myCircularQueueFront(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj))//隊列為空返回-1return -1;return obj->_array[obj->_front];
}
int myCircularQueueRear(MyCircularQueue* obj) {if (myCircularQueueIsEmpty(obj))//隊列為空返回-1return -1;int tail = obj->_rear - 1;if (tail == -1)//如果tail為-1說明這時候rear在數組的開頭,需要出隊尾的元素在數組的末尾tail = obj->_k - 1;return obj->_array[tail];
}bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj->_front == obj->_rear;//rear等于front時,隊列為空
}
bool myCircularQueueIsFull(MyCircularQueue* obj)
{return ((obj->_rear + 1) % obj->_k == obj->_front); //rear + 1等于front說明隊列滿了
}void myCircularQueueFree(MyCircularQueue* obj) {if (obj == NULL)return;//確保指針存在free(obj->_array);//先釋放開辟的數組free(obj);
}

? ? ? ? 原題鏈接循環隊列的實現?,如果大家有興趣的,嘗試一下。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41456.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41456.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談Redis的maxmemory設置以及淘汰策略

推薦閱讀 AI文本 OCR識別最佳實踐 AI Gamma一鍵生成PPT工具直達鏈接 玩轉cloud Studio 在線編碼神器 玩轉 GPU AI繪畫、AI講話、翻譯,GPU點亮AI想象空間 資源分享 「java、python面試題」來自UC網盤app分享,打開手機app,額外獲得1T空間 https://dr…

音視頻實時通話解決方案

1、問題提出 想要實現音視頻通話,對于大部分人可能會覺得很難,但是實際上,有些事情并沒有大家想的那樣困難,只要功夫深,鐵杵磨成針。 機緣巧合下,在業務中,我也遇到了一個業務場景需要實現音視頻通話,我們不可能自己從零開始干,我本次用到的核心是WebRTC。 2、WebRT…

治療偏頭痛等亞疼痛的遠程電神經調控(REN)設備

原文鏈接: NERIVIO CE標志適應癥擴展到青少年和成人偏頭痛的預防和急性治療 (prnewswire.com) 公司官網: Homepage - Theranica APP下載鏈接: Migraine Headache Treatment - Nerivio 使用過程問題: 常見問題 - 無藥物偏頭痛兩…

統計XML標注文件中各標注類別的標簽數量

目標檢測任務重,擔心數據集中各標簽類別不均衡,想統計XML標注文件中各標注類別的標簽數量,可以使用以下腳本: import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…

Flink狀態和狀態管理

1.什么是狀態 官方定義:當前計算流程需要依賴到之前計算的結果,那么之前計算的結果就是狀態。 這句話還是挺好理解的,狀態不只存在于Flink,也存在生活的方方面面,比如看到一個認識的人,如何識別認識呢&am…

神經網絡基礎-神經網絡補充概念-24-隨機初始化

由來 在神經網絡的訓練過程中,權重和偏差的初始值對模型的性能和訓練過程的收斂速度都有影響。隨機初始化是一種常用的權重和偏差初始值設置方法,它有助于打破對稱性,避免網絡陷入局部最優解。 概念 當所有權重和偏差都被設置為相同的初始…

Python Web框架:Django、Flask和FastAPI巔峰對決

今天,我們將深入探討Python Web框架的三巨頭:Django、Flask和FastAPI。無論你是Python小白還是老司機,本文都會為你解惑,帶你領略這三者的魅力。廢話不多說,讓我們開始這場終極對比! Django:百…

web基礎入門和php語言基礎入門 二

web基礎入門和php語言基礎入門 二 MySQL入門-續MySQL之數據查詢操作MySQL其他知識點 php語言基礎入門認識PHPPHP的工作流程安裝PHP環境認識一個PHP程序PHP基礎知識點進入正題 PHP與WEB交互PHP與MySQL交互總結 MySQL入門-續 MySQL之數據查詢操作 WHERE 子句,條件限…

# 快速評估立功科技基于S32K324的TMS方案

文章目錄 1.前言2.立功科技的TMS方案介紹2.1 介紹資料2.2 簡要介紹 3.S32K3_TriMotor評估板測試3.1 環境搭建S32 Design Studio for S32 Platform 3.4安裝RTD 2.0.0安裝Freemaster 3.2 3.2 例程測試3.3 例程適配3.4 雙核燒錄3.5 測試 1.前言 最近和一些做汽車水泵/風機的客戶交…

算法概述-Java常用算法

算法概述-Java常用算法 1、算法概念2、算法相關概念3、算法的性能評價4、算法應用歸納 1、算法概念 廣泛算法定義:算法是模型分析的一組可行性的、確定的和有窮的規則。 經典算法特征:有窮性、確切性、輸入、輸出和可行性。 常用的算法包括遞推、遞歸、窮…

maven如何建立JavaWeb項目并連接數據庫,驗證登錄

這里是建立建立web項目:Maven如何創建Java web項目(純干貨版)!!!_明天更新的博客-CSDN博客 我們主要演示如何連接數據庫驗證登錄。 1.在webapp目錄下創建我們的登錄頁面:index.jsp 還需要再…

Android漏洞之戰——整體加殼原理和脫殼技巧詳解

一、前言 為了幫助更加方便的進行漏洞挖掘工作,前面我們通過了幾篇文章詳解的給大家介紹了動態調試技術、過反調試技術、Hook技術、過反Hook技術、抓包技術等,掌握了這些可以很方便的開展App漏洞挖掘工作,而最后我們還需要掌握一定的脫殼技巧…

opencv基礎:幾個常用窗口方法

開始說了一些opencv中的一些常用方法。 namedWindow方法 在OpenCV中,namedWindow函數用于創建一個窗口,并給它指定一個名字。這個函數的基本語法如下: import cv2cv2.namedWindow(窗口名稱, 標識 )窗口名稱:其實窗口名稱&…

Azure創建自定義VM鏡像

創建一個虛擬機,參考 https://blog.csdn.net/m0_48468018/article/details/132267096,入站端口開啟80,22 進行遠程遠程連接 使用CLI命令部署NGINX,輸入如下命令 sudo su apt-get update -y apt-get install nginx git -y最后的效果 4. 關閉…

非結構化數據庫-MinIO基本集成

是什么 MinIO 是一個高性能的分布式對象存儲服務,適合存儲非結構化數據,如圖片,音頻,視頻,日志等。對象文件最大可以達到5TB。 安裝啟動 mkdir -p /usr/local/minio cd /usr/local/minio# 下載安裝包 wget https:/…

pandas.errors.ParserError: Error tokenizing data. C error: out of memory

目錄 用pandas讀入數據的時候發現數據讀入時出錯了,數據量感覺也不是很大 十萬多條數據。電腦內存是16個G。報錯信息為:“ pandas.errors.ParserError: Error tokenizing data. C error: out of memory” 想想不對啊 昨天都可以順利的讀入,現…

你真的掌握了 Python 的七種參數了嗎?

不知道為什么網上總有人說 Python 的參數類型有 4 種啊,5 種啊,殊不知其實有 7 種。Python 的 7 種參數分別是 默認參數、位置參數、關鍵字參數、可變長位置參數、可變長關鍵字參數、僅位置參數 和 僅關鍵字參數。小白可能沒見過“可變長參數”&#xff…

lvs-dr模式

一,數據包流向: 1,cilent向目標vip發出請求,dir接收,此時ip報頭數據幀頭信息。 2,dir根據負載均衡算法給rs(rip),將rip所在網卡的mac地址作為目標的mac地址,發…

深入解析Spring基本概念和核心思想

文章目錄 基本概念IoCIoc容器IoC理解IoC的步驟Spring中使用ioc的步驟 AopAop的理解Aop的步驟 控制反轉誰控制誰? 控制什么?為何叫反轉(對應于正向)?哪些方面反轉了?為何需要反轉? 依賴什么是依賴(按名稱理解、按動詞理解)? 誰依賴于誰? 為什么需要依賴? 依賴什么東西?…

vscode如何漢化

首先我們到vscode官網下載 鏈接如下: Visual Studio Code - Code Editing. Redefined 根據自己需要的版本下載就好 下載并且安裝完畢之后 運行vscode 然后按快捷鍵 CTRLSHIFTX 打開安裝擴展界面 搜索簡體中文 安裝就可以了 謝謝大家觀看