數據結構(python)-------棧和隊列2

目錄

二、隊列

(一)、定義

1. 定義

2. 邏輯結構

3. 存儲結構

4. 運算規則

5. 實現方式

(二)、隊列與一般線性表的區別

一般線性表???????????????????????????????????????????

隊列

(三)、分類

1、順序隊列:隊列的順序表示(用一維數組)

1.1隊列的順序表示--用一維數組base[M]

存在問題

2、循環隊列

2.1 循環隊列初始化

?2.2判斷對空

2.3、循環隊列入隊----環狀位移要取余

2.4、獲取隊首元素

3.鏈式隊列:用單鏈表表示

3.1判斷隊空

3.2、鏈式入隊

?3.3、鏈式隊列出隊

?3.4、獲取隊首元素


二、隊列

(一)、定義

1. 定義

只能在表的一端(隊尾)進行插入,在另一端(隊首或隊頭)進行刪除運算的線性表

2. 邏輯結構

與線性表相同,仍為一對一關系

3. 存儲結構

順序隊列鏈式隊列存儲均可

4. 運算規則

先進先出FIFO

5. 實現方式

關鍵是編寫入隊出隊函數,具體實現依順序隊或鏈隊的不同而不同

(二)、隊列與一般線性表的區別

隊列是一種特殊(操作受限)的線性表

區別:僅在于運算規則不同

一般線性表???????????????????????????????????????????

邏輯結構:一對一????????????????????

存儲結構:順序表、鏈表????????

運算規則:隨機、順序存取

隊列

邏輯結構:一對一????????????????????

存儲結構:順序隊列、鏈式隊列

運算規則:先進先出

(三)、分類

1、順序隊列:隊列的順序表示(用一維數組)

利用一組連續的存儲單元(一維數組) 依次存放從隊首到隊尾的各個元素,稱為順序隊列

順序隊列定義如下:
class SeqQueue:def __init__(self, max):self.max = max 	# 隊列最大容量# 存儲隊列元素的數組self.data = [None for i in range(self.max)]self.front = 0	 # 隊首指針self.rear = 0 	 # 隊尾指針
1.1隊列的順序表示--用一維數組base[M]

入隊和出隊

存在問題

真假溢出

解決辦法-----循環隊列?

2、循環隊列

?

2.1 循環隊列初始化
class CircleQueue(object):def __init__(self,max):# 隊列最大容量self.max = max# 存儲隊列元素的數組self.data = [None for i in range(self.max)]# 隊首指針self.front = 0# 隊尾指針self.rear = 0
?2.2判斷對空
class CircleQueue(object):def __init__(self,max):# 隊列最大容量self.max = max# 存儲隊列元素的數組self.data = [None for i in range(self.max)]# 隊首指針self.front = 0# 隊尾指針self.rear = 0
2.3、循環隊列入隊----環狀位移要取余
def push(self,val):''':Desc  入隊         :param  val:待入隊關鍵字'''# 如果隊列滿了,拋出異常if (self.rear + 1) % self.max == self.front:raise IndexError("隊列為滿")# 在隊尾插入新的關鍵字self.data[self.rear] = val# 修改隊尾指針self.rear = (self.rear + 1) % self.max

2.4循環隊列出隊

def pop(self):''':Desc 將隊首元素出隊'''# 如果隊列為空,拋出異常if self.empty():raise IndexError("隊列為空")# 隊列不為空,獲取隊首元素cur = self.data[self.front]# 修改隊首指針,指向下一個位置self.front = (self.front + 1) % self.max# 返回原隊首元素return cur
2.4、獲取隊首元素
def pop(self):''':Desc 將隊首元素出隊'''# 如果隊列為空,拋出異常if self.empty():raise IndexError("隊列為空")# 隊列不為空,獲取隊首元素cur = self.data[self.front]# 修改隊首指針,指向下一個位置self.front = (self.front + 1) % self.max# 返回原隊首元素return cur

3.鏈式隊列:用單鏈表表示

設立一個隊首指針front ,指向隊首元素。

初始化front=None

入隊:判斷隊列是否為空。如果隊列為空,將隊首指針指向待插入的新節點。若隊列不為空,則遍歷到隊尾元素,將新節點插入到隊尾。

出隊:首先判斷隊列是否為空,若是隊列為空,則拋出異常;否則,刪除隊首節點。

隊列為空front is None

class Node(object):def __init__(self,data):''':Desc   隊列節點存儲結構'''# 數據域self.data = data# 指針域self.next = None
class LinkedQueue(object):def __init__(self):''':Desc   隊列初始化'''# 隊首指針指向空self.front = None
3.1判斷隊空
class LinkedQueue(object):def __init__(self):''':Desc   隊列初始化'''# 隊首指針指向空self.front = None
3.2、鏈式入隊

入隊:判斷隊列是否為空。如果隊列為空,將隊首指針指向待插入的新節點。若隊列不為空,則遍歷到隊尾元素,將新節點插入到隊尾。

def push(self,val):''':Desc 將關鍵字入隊     :param  val: 關鍵字'''# 新節點new = Node(val)# 如果隊列為空if self.front == None:# 將隊首指針指向新節點self.front = new# 如果隊列不為空else:# 聲明cur指針cur = self.front# 通過cur指針遍歷隊列while cur.next != None:cur = cur.next# 在隊尾插入元素cur.next = new

?3.3、鏈式隊列出隊

出隊:首先判斷隊列是否為空,若是隊列為空,則拋出異常;否則,刪除隊首節點

def pop(self):''':Desc  將隊首元素出隊'''# 如果隊列為空,拋出異常if self.empty():raise IndexError("隊列為空")# 如果隊列不為空else:cur = self.front# 將隊首指針指向隊首節點的后繼節點self.front = self.front.next# 返回原本隊首節點return cur

?3.4、獲取隊首元素
peek(self):''':Desc  獲取隊首元素        :return:  返回隊首元素'''# 如果隊列為空,拋出異常if self.empty():raise IndexError("隊列為空")# 如果隊列不為空else:# 返回隊首元素return self.front

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

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

相關文章

基于SpringBoot的“校園招聘網站”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“校園招聘網站”的設計與實現(源碼數據庫文檔PPT) 開發語言:Java 數據庫:MySQL 技術:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系統展示 系統整體功能圖 局部E-R圖 系統首頁界面 系統注冊…

投資日記_道氏理論技術分析

主要用于我自己參考,我感覺我做事情的時候容易上頭,忘掉很多事情。 技術分析有很多方法,但是我個人相信并實踐的還是以道氏理論為根本的方法。方法千千萬萬只有適合自己價值觀,習慣,情緒,性格的方法才是好的…

ceph運維硬件規劃技巧

在規劃Ceph集群的硬件配置時,需要綜合考慮性能、成本、冗余、可擴展性以及特殊場景需求等因素。以下是關于Ceph硬件規劃的關鍵技巧和建議,涵蓋存儲設備、網絡、服務器配置、容量規劃、冗余策略等多個方面: 1. 硬件選型建議 存儲設備 存儲節點…

Windows主機、虛擬機Ubuntu、開發板,三者之間文件互傳

以下內容源于日常學習的整理,歡迎交流。 下圖是Windows主機、虛擬機Ubuntu、開發者三者之間文件互傳的方式示意圖: 注意,下面談及的所有方式,都要求兩者的IP地址處于同一網段,涉及到的軟件資源見felm。 一、Windows主…

Softmax溫度調節與注意力縮放:深度神經網絡中的平滑藝術

Softmax溫度調節與注意力縮放:深度神經網絡中的平滑藝術 在深度學習的精密機械中,有些細微的調整機制往往被視為理所當然,卻實際上蘊含著深刻的數學洞察和巧妙的工程智慧。今天,我們將探討兩個看似獨立卻本質相通的機制&#xff…

RIP路由欺騙攻擊與防御實驗詳解

一、基礎網絡配置 1. 路由器R1配置 interface GigabitEthernet0/0/0ip address 192.1.2.254 255.255.255.0 ! interface GigabitEthernet0/0/1ip address 192.1.3.254 255.255.255.0 ! router rip 1version 2network 192.1.2.0network 192.1.3.0 2. 路由器R2配置 interface…

阿里云平臺Vue項目打包發布

目錄: 1、vue項目打包2、通過ngixn發布vue的打包文件 1、vue項目打包 在你的vue項目下執行npm run build命令進行打包。 2、通過ngixn發布vue的打包文件 直接將打包的dist文件拷貝到nginx目錄下即可。 修改nginx.conf的配置文件的相關配置,如端口或者ro…

《基于Spring Boot+Vue的智慧養老系統的設計與實現》開題報告

個人主頁:@大數據蟒行探索者 一、研究背景及國內外研究現狀 1.研究背景 根據1982年老齡問題世界大會聯合國制定的標準,如果一個國家中超過65歲的老人占全國總人口的7%以上,或者超過60歲的老人占全國總人口的10%以上,那么這個國家將被定義為“老齡化社會”[1]。 隨著國…

SpringCache @Cacheable 在同一個類中調用方法,導致緩存不生效的問題及解決辦法

由于項目需要使用SpringCache來做一點緩存,但自己之前沒有使用過(其實是沒有聽過)SpringCache,于是,必須先學習之。 顯然,就是在同一個類中,MethodA 調用了 MethodB,那么 MethodB 上…

2025-03-20(DS復習):詳細介紹一下Databricks 的Delta Lake

Delta Lake 是 Databricks 推出的一種開源存儲層,它構建在現有數據湖(如 Amazon S3、Azure Data Lake Storage、Google Cloud Storage)之上,為數據湖提供了數據倉庫級別的可靠性、性能和管理功能。Delta Lake 解決了傳統數據湖的許…

在VMware上部署【Ubuntu】

鏡像下載 國內各鏡像站點均可下載Ubuntu鏡像,下面例舉清華網站 清華鏡像站點:清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 具體下載步驟如下: 創建虛擬機 準備:在其他空間大的盤中創建存儲虛擬機的目錄&#xff0c…

初入ARM,點燈,按鍵與中斷相結合

與MCU不同,ARM屬于功能更復雜,更強大的SOC,是可以移植操作系統的,但是在最開始學習arm,需要了解arm的運行方式,所以現在使用的是裸機開發。arm系統有多種工作模式,分別是User,IRQ&am…

Moonlight-16B-A3B: 變革性的高效大語言模型,憑借Muon優化器打破訓練效率極限

近日,由Moonshot AI團隊推出的Moonlight-16B-A3B模型,再次在AI領域引發了廣泛關注。這款全新的Mixture-of-Experts (MoE)架構的大型語言模型,憑借其創新的訓練優化技術,特別是Muon優化器的使用,成功突破了訓練效率的極…

風尚云網|前端|JavaScript性能優化實戰:從瓶頸定位到高效執行

JavaScript性能優化實戰:從瓶頸定位到高效執行 JavaScript性能優化 在移動優先和Web應用日益復雜化的今天,JavaScript性能優化已成為前端工程師的必修課。本文將通過真實場景案例,深入解析從性能瓶頸定位到具體優化策略的完整閉環&#xff…

強大的AI網站推薦(第一集)—— Devv AI

網站:Devv AI 號稱:最懂程序員的新一代 AI 搜索引擎 博主評價:我的大學所有的代碼都是使用它,極大地提升了我的學習和開發效率。 推薦指數:🌟🌟🌟🌟🌟&#x…

使用 .NET Core 的本地 DeepSeek-R1

使用 .NET 在我的 MacBook Pro 上與當地 LLM 聊天的歷程。 如今,只需使用瀏覽器即可輕松使用 ChatGPT 或其他 genAI。作為開發人員,我們可以通過直接集成 OpenAI API 等來做更復雜的事情。如果我們想在自己的機器上運行 LLM,只是為了找人聊天…

將 VOC 格式 XML 轉換為 YOLO 格式 TXT

目錄 1. 導入必要的模塊 2. 定義類別名稱 3. 設置文件路徑 完整代碼 1. 導入必要的模塊 import os import xml.etree.ElementTree as ET os:用于文件和目錄操作,例如創建目錄、遍歷文件等。 xml.etree.ElementTree:用于解析XML文件&#…

Visual Studio調試的技巧

1.什么是bug? bug:程序漏洞,也就是程序中存在的問題。 2.什么是調試? 當我們發現了程序中的問題后就會解決問題,前提是要找到問題,那么進行調試(debug)以此來找到問題。 3.debug…

C++ 各種map對比

文章目錄 特點比較1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map(SGI STL 擴展) C 示例代碼代碼解釋 特點比較 1. std::map 底層實現:基于紅黑樹(一種自平衡的二叉搜索樹&#xff09…

fontTools工具的使用介紹

前言 python工具庫fontTools,我是用來壓縮前端字體的,優化前端請求速度的;使用的過程中,遇到了不少的坑,把這個過程記錄下來,防止再犯。 安裝 # fontTools 4.56.0 pip install fontTools提取子字體集 方…