數據結構-隊列的實現(C語言版)

前言

? ? ? ? 隊列是一種特殊的線性表,它只允許在一端對數據進行插入操作,在另一端對數據進行刪除操作的特殊線性表,隊列具有先進先出的(FIFO)的?特性,進行插入操作的一端稱為隊尾,進行刪除操作的一端稱為隊頭。

1.隊列的特性

? ? ? ? 隊尾:元素在隊尾入隊。插入操作。

? ? ? ? 隊頭:元素在隊頭出對。刪除操作。

如圖:

2.隊列的實現

?????????隊列可以用 數組和鏈表的結構實現,使用鏈表的結構實現更優一些,因為如果使用數組的結構,出隊列在數組頭上出數據,效率會比較低,需要挪動數據,因此這里采用鏈表的方式來進行隊列的實現。

//queue.h

#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
#include<stdbool.h>
typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* _next;QDataType _data;
}QueueNode;
typedef struct  Queue//隊列的結構
{QueueNode* _head;//頭指針QueueNode* _tail;//尾指針
}Queue;void QueueInit(Queue* qu);//初始化棧void QueueDestory(Queue* qu);//摧毀棧void QueuePush(Queue* qu,QDataType data);//入隊void QueuePop(Queue* qu);//出隊QDataType QueueFront(Queue* qu);//返回隊頭元素
QDataType QueueBack(Queue* qu);//返回隊尾元素size_t QueueSize(Queue* qu);//隊列長度bool QueueEmpty(Queue* qu);//判斷隊列是否為空

//queue.c

void QueueInit(Queue* qu)//初始化棧
{qu->_head = qu->_tail = NULL;
}
void QueueDestory(Queue* qu)//摧毀棧
{//確保指針有效assert(qu);QueueNode* cur = qu->_head;while (cur){QueueNode* next = cur->_next;free(cur);}
}
void QueuePush(Queue* qu,QDataType data)//入隊
{if (qu->_head == NULL){qu->_head = (QueueNode*)malloc(sizeof(QueueNode));qu->_tail = qu->_head;qu->_head->_next = NULL;qu->_head->_data = data;}else{//尾部入數據QueueNode* cur = qu->_tail;QueueNode* newNode = (QueueNode*)malloc(sizeof(QueueNode));cur->_next = newNode;newNode->_next = NULL;qu->_tail = newNode;newNode->_data = data;}
}
void QueuePop(Queue* qu)//出隊
{//隊頭出數據QueueNode* head = qu->_head;qu->_head = head->_next;free(head);
}
QDataType QueueFront(Queue* qu)//返回隊頭元素
{return qu->_head->_data;
}
QDataType QueueBack(Queue* qu)//返回隊尾元素
{return qu->_tail->_data;
}
size_t QueueSize(Queue* qu)//隊列長度
{assert(qu);//確保指針存在QueueNode* cur = qu->_head;size_t size = 0;while (cur){++size;cur = cur->_next;}return size;
}
bool QueueEmpty(Queue* qu)//判斷隊列是否為空
{return !qu->_head;
}

?

3.測試部分

????????

void TestQueue()
{Queue qu;QueueInit(&qu);QueuePush(&qu, 1);QueuePush(&qu, 2);QueuePush(&qu, 3);QueuePush(&qu, 4);QueuePush(&qu, 5);QueuePush(&qu, 6);QueuePush(&qu, 7);QueuePush(&qu, 8);while (!QueueEmpty(&qu)){printf("%d ", QueueFront(&qu));QueuePop(&qu);}QueueDestory(&qu);
}

?

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

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

相關文章

JZ37序列化二叉樹

題目地址&#xff1a;序列化二叉樹_牛客題霸_牛客網 題目回顧&#xff1a; 解題思路&#xff1a; 首先&#xff0c;序列化就是將二叉樹的節點值放入一個字符串中&#xff0c;這里可以按照前序遍歷的思路來進行操作&#xff0c;謙虛遍歷是&#xff1a;根左右的情況&#xff0c;…

什么是React?React與VU的優缺點有哪些?

什么是React&#xff1f;什么是VUE&#xff1f; 維基百科上的概念解釋&#xff0c;Vue.js是一個用于創建用戶界面的開源MVVM前端JavaScript框架&#xff0c;也是一個創建單頁應用的Web應用框架。Vue.js由尤雨溪&#xff08;Evan You&#xff09;創建&#xff0c;由他和其他活躍…

Cmd部署HexoGithub443問題

git config --global http.proxy “localhost:7890” 配置下代理即可 本文由 mdnice 多平臺發布

微信小程序 地圖map(電子圍欄圓形和多邊形)

正常情況下是沒有手機上畫電子圍欄的&#xff0c;公共平臺上我也沒找到&#xff0c;所以走了一個歪點子&#xff0c;就是給地圖添加點擊事件&#xff0c;記錄點的位置&#xff0c;在畫到電子圍欄上就是添加電子圍欄了&#xff0c;如果只是顯示電子圍欄就簡單了 一、多邊形電子…

2023.8.12號論文閱讀

文章目錄 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法實驗結果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法實驗結果 TriFormer: A Multi-mod…

macos搭建python3虛擬環境

我們知道macos自帶的python版本是Python2.7, 這個版本比較老而且往往和我們的工程不兼容&#xff0c;所以就得需要我們升級Python版本&#xff0c; 我們不建議直接升級macos自帶的本地Python2.7, 因為macos有一些基礎軟件是依賴于Python2.7的&#xff0c;如果動了遇到問題想再…

日志框架及其使用方法

log4j和logBack,同一個人寫的&#xff0c;logBack為log4j的升級版&#xff0c;SpringBoot中默認集成logBack 作用&#xff1a;記錄軟件發布后的一些bug,以及數據是怎樣被操作的 傳統開發弊端&#xff1a; 1.日志直接輸出在控制臺&#xff0c;關閉控制臺后&#xff0c;日志消…

Netty:在一個ByteBuf中尋找另外一個ByteBuf出現的位置

說明 利用ByteBufUtil的indexOf(ByteBuf needle, ByteBuf haystack)函數可以在haystack中尋找needle出現的位置。如果沒有找到&#xff0c;返回-1。 示例 在一個ByteBuf 中找到了另外一個ByteBuf package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.…

Linux: network: tools: tcpdump,抓取vlan包需要注意的事情;不然會出現LLC協議

https://bugzilla.redhat.com/show_bug.cgi?id498981#c4 https://serverfault.com/questions/544651/vlan-tags-not-shown-in-packet-capture-linux-via-tcpdump 如果不加-e參數&#xff0c;抓取不到 vlan信息&#xff0c;會導致wireshark解析出現問題。因為&#xff0c;抓到…

AirServer是什么軟件,手機屏幕投屏電腦神器

什么是 AirServer&#xff1f; AirServer 是適用于 Mac 和 PC 的先進的屏幕鏡像接收器。 它允許您接收 AirPlay 和 Google Cast 流&#xff0c;類似于 Apple TV 或 Chromecast 設備。AirServer 可以將一個簡單的大屏幕或投影儀變成一個通用的屏幕鏡像接收器 &#xff0c;是一款…

PDF Expert 3.3 for mac

PDF Expert是一款專業的PDF編輯和閱讀工具。它可以幫助用戶在Mac、iPad和iPhone等設備上查看、注釋、編輯、填寫和簽署PDF文檔。 以下是PDF Expert的特點&#xff1a; PDF編輯&#xff1a;PDF Expert提供了豐富的PDF編輯功能&#xff0c;包括添加、刪除、移動、旋轉、縮放、裁…

《貧窮的本質》閱讀筆記

《貧窮的本質》閱讀筆記 2023年8月11日在杭州小屋讀完&#xff0c;對于窮&#xff0c;我可有太多想說的了。可以說自己活這么大以來&#xff0c;一直在擺脫貧窮&#xff0c;也將會窮盡一生去避免貧窮。作為一個窮人該如何去擺脫貧窮&#xff0c;我覺得沒有一個確切的答案&#…

windows 安裝免費3用戶ccproxy ubuntu 代理上網

Windows 上進行安裝 ubuntu 上進行設置 方法一 (臨時的手段) 如果僅僅是暫時需要通過http代理使用apt-get&#xff0c;您可以使用這種方式。 在使用apt-get之前&#xff0c;在終端中輸入以下命令&#xff08;根據您的實際情況替換yourproxyaddress和proxyport&#xff09;。 終…

Linux防火墻firewalldiptables(2)iptables開放指定端口開放指定端口

一、CentOs6 iptables基本操作 # chkconfig --list | grep iptables 查看防火墻的服務 # chkconfig iptables off 永久關閉防火墻 #chkconfig iptables on 永久開啟防火墻# service status iptables 查看防火墻狀態 # service start iptables 啟動防火墻 # service stop ipta…

HCIA---路由器--靜態路由

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 目錄 前言 一.路由器簡介 二.路由器轉發原理 三.骨干鏈路 四.路由分類 五.靜態路由 六.靜態路由拓展配置 一.負載均衡 二.環回接口 三.手工匯總 四.路由黑洞 五.缺…

【分布式存儲】數據存儲和檢索~B+樹

為什么數據存儲結構重要 在存儲系統中&#xff0c;其實不管數據是什么樣的&#xff0c;歸根結底其實都還是取決于數據的底層存儲結構&#xff0c;而主要常見的就是數據庫索引結構&#xff0c;B樹、Redis中跳表、以及LSM、搜索引擎中的倒排索引。本質都是如何利用不用的數據結構…

軟件設計師(七)面向對象技術

面向對象&#xff1a; Object-Oriented&#xff0c; 是一種以客觀世界中的對象為中心的開發方法。 面向對象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模語言UML。 面向對象方法包括面向對象分析、面向對象設計和面向對象實現。 一、面向對象基礎 1、面向對象的基本…

7. 延遲隊列

延遲隊列 7.1. 延遲隊列概念 延時隊列,隊列內部是有序的&#xff0c;最重要的特性就體現在它的延時屬性上&#xff0c;延時隊列中的元素是希望 在指定時間到了以后或之前取出和處理&#xff0c;簡單來說&#xff0c;延時隊列就是用來存放需要在指定時間被處理的 元素的隊列。 7…

【Spring Boot】構建RESTful服務 — 使用Swagger生成Web API文檔

使用Swagger生成Web API文檔 高質量的API文檔在系統開發的過程中非常重要。本節介紹什么是Swagger&#xff0c;如何在Spring Boot項目中集成Swagger構建RESTful API文檔&#xff0c;以及為Swagger配置Token等通用參數。 1.什么是Swagger Swagger是一個規范和完整的框架&…

QT創建項目

可選擇CMake或qmake