數據結構-3(雙向鏈表、循環鏈表、棧、隊列)

一、思維導圖

二、雙向循環鏈表的判空、尾插、遍歷(反向)、尾刪

class Node:def __init__(self, data):self.data = dataself.next = Noneself.prior = Noneclass circularDoublyLinkedList():def __init__(self):self.head = Noneself.tail = Noneself.size = 0def isEmpty(self):return self.size == 0def add_tail(self, data):node = Node(data)if self.isEmpty():self.head = node  #node.next = node  # 循環鏈表特性node.prior = None  # 雙向鏈表特性(該行可有可無)self.size += 1else:i = 1q = self.headwhile i < self.size:  # 找到最后一個節點q = q.nexti += 1node.prior = q # 雙向鏈表node.next = self.head # 循環鏈表self.head.prior = node # 雙向鏈表q.next = nodeself.size += 1def show(self):if self.isEmpty():print("遍歷西巴")returnelse:q = self.head.priorwhile q != self.head:print(f"{q.data}", end="<--")q = q.priorprint(f"{q.data}", end="<--")  # 此時已經到了尾部,但尾部節點直接跳出了循環沒有打印,這里補上print()def delete_tail(self):if self.isEmpty():print("無需刪除")returnelse:q = self.headi = 1while i < self.size-1:q = q.nexti += 1q.next = self.headself.head.prior = qself.size-=1if __name__ == '__main__':linked_list = circularDoublyLinkedList()linked_list.add_tail(1)linked_list.add_tail(2)linked_list.add_tail(3)linked_list.add_tail(4)linked_list.show()linked_list.delete_tail()linked_list.show()linked_list.delete_tail()linked_list.show()linked_list.delete_tail()linked_list.show()linked_list.delete_tail()linked_list.delete_tail()linked_list.show()

三、順序棧


class Stack:def __init__(self, capacity=10):self.data = [None] * capacityself.size = 0self.capacity = capacity  # 最大容量def isEmpty(self):return self.size == 0def isFull(self):return self.size == self.capacitydef push(self, value):if self.isFull():print("stack is full")return Falseelse:i = self.size - 1while i >= 0:self.data[i + 1] = self.data[i]i -= 1self.data[0] = valueself.size+=1def pop(self):if self.isEmpty():print("stack is empty")return Noneelse:i = 0while i < self.size-1:self.data[i] = self.data[i+1]i+=1self.data[self.size-1] = Noneself.size-=1def expend(self):print("擴容")self.capacity = int(self.capacity * 1.5)  # 定義擴容量print(f"新容量為:{int(self.capacity)}")self.backup_data = self.dataself.data = [None] * int(self.capacity)  # 重置并擴容for i in range(self.size):  # 將備份好的列表逐步加入回重置并擴容后的列表self.data[i] = self.backup_data[i]def show(self):if self.isEmpty():print("數據表為空")returnelse:i = 0while i < self.size:print(self.data[i],end=" ")i+=1print()def first_value(self):return self.data[0]if __name__ == '__main__':stack = Stack()stack.push(1)stack.push(2)stack.push(3)stack.push(4)stack.show()print("first_value is ------>",stack.first_value())stack.pop()stack.show()stack.pop()stack.show()stack.pop()stack.show()stack.pop()stack.pop()stack.show()

四、鏈式棧

class Node():def __init__(self, data):self.data = dataself.next = Noneclass Linked_Stack():def __init__(self):self.size = 0self.head = Nonedef isEmpty(self):return self.size == 0def push(self, data):node = Node(data)if self.isEmpty():self.head = nodeself.size += 1else:node.next = self.headself.head = nodeself.size += 1def pop(self):if self.isEmpty():print("Stack is Empty")else:self.head = self.head.nextself.size -= 1def first_value(self):return self.headdef show(self):if self.isEmpty():returnelse:q = self.headwhile q:print(q.data, end="-->")q = q.nextprint()if __name__ == '__main__':link_stack = Linked_Stack()link_stack.push(1)link_stack.show()link_stack.push(2)link_stack.push(3)link_stack.show()link_stack.pop()link_stack.show()link_stack.pop()link_stack.show()link_stack.pop()link_stack.show()link_stack.pop()link_stack.show()

五、順序隊列

class Queue:def __init__(self, capacity=10):self.data = [None] * capacityself.size = 0self.capacity = capacity# 判空def isEmpty(self):return self.size == 0# 入隊def push(self, data):i = self.size - 1while i >= 0:self.data[i + 1] = self.data[i]i -= 1self.data[0] = dataself.size += 1def pop(self):if self.isEmpty():print("Queue is empty")return Noneelse:self.data[self.size - 1] = Noneself.size -= 1# 遍歷def show(self):if self.isEmpty():print("數據表為空")returnelse:i = 0while i < self.size:print(self.data[i], end=" ")i += 1print()if __name__ == '__main__':queue = Queue()queue.push(1)queue.show()queue.push(2)queue.show()queue.push(3)queue.show()queue.push(4)queue.show()queue.pop()queue.show()queue.pop()queue.show()queue.pop()queue.show()queue.pop()queue.pop()queue.show()

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

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

相關文章

IDEA運行Tomcat一直提示端口被占用(也查不到該端口)

首先查看是否是因為Java程序異常終止&#xff0c;進程沒有完全釋放導致。打開資源管理器&#xff0c;找到所有的java.exe&#xff0c;強制結束任務。如果仍然不行&#xff0c;那就極可能還是開啟了hyper-V虛擬化&#xff0c;查看排除的tcp端口范圍端口號沒被占用卻提示占用&…

AWS Lambda 最佳實踐:構建高效無服務器應用的完整指南

引言 AWS Lambda 作為無服務器計算的核心服務,讓開發者能夠專注于業務邏輯而無需管理服務器。本文將通過實際案例和代碼示例,分享 Lambda 開發中的關鍵最佳實踐。 1. 函數設計原則 單一職責原則 每個 Lambda 函數應該只做一件事,這樣更容易測試、維護和擴展。 # ? 不推…

29、鴻蒙Harmony Next開發:深淺色適配和應用主題換膚

目錄 應用深淺色適配 應用跟隨系統的深淺色模式 應用主動設置深淺色模式 系統默認判斷規則 使用建議與限制 設置應用內主題換膚 概述 自定義主題色 設置應用內組件自定義主題色 設置應用局部頁面自定義主題風格 設置應用頁面局部深淺色 系統缺省token色值 應用深淺…

源鑒SCA4.9︱多模態SCA引擎重磅升級,開源風險深度治理能力再次進階

SCA技術已成為數字供應鏈開源治理的關鍵入口。源鑒SCA深度融合懸鏡原創專利級AI智能代碼疫苗技術&#xff0c;是國內首款集源碼組件成分分析、代碼成分溯源分析、制品成分二進制分析、容器鏡像成分掃描、運行時成分動態追蹤及開源供應鏈安全情報預警分析等六大核心引擎為一體的…

Git語義化提交規范及提交模板設置

Git語義化提交規范&#xff08;Conventional Commits&#xff09; &#x1f4da; 常見的語義化提交類型包括&#xff1a;類型含義說明feat? 新增功能&#xff08;feature&#xff09;fix&#x1f41b; 修復 bugdocs&#x1f4da; 修改文檔&#xff08;如 README&#xff09;st…

用TensorFlow進行邏輯回歸(五)

Softmax分類#List3-50%matplotlib inlineimport numpy as npimport tensorflow as tfimport matplotlib.pyplot as pltx1_label0 np.random.normal(1, 1, (100, 1))x2_label0 np.random.normal(1, 1, (100, 1))x1_label1 np.random.normal(5, 1, (100, 1))x2_label1 np.ran…

基于 Django + 協同過濾算法的電影推薦系統設計與實現

&#x1f3ac; 基于 Django 協同過濾算法的電影推薦系統設計與實現?? 本項目由成都理工大學宜賓校區的三位同學曾銘楊、楊皓麟、陳禧錦共同完成。項目以豆瓣電影數據為基礎&#xff0c;通過協同過濾算法為用戶構建個性化電影推薦服務&#xff0c;是一款集數據爬取、推薦算法…

小白全棧項目部署指南

小白全棧項目部署指南&#xff1a;前端后端數據庫完整攻略 &#x1f4d6; 寫在前面 當你學會了基礎的靜態網站部署后&#xff0c;是不是想挑戰更有趣的項目&#xff1f;比如一個能夠注冊登錄、保存數據的完整應用&#xff1f; 這就需要學習全棧項目部署了&#xff01; 別被&quo…

C# Linq 左關聯查詢詳解與實踐

在 C# 開發中&#xff0c;Linq&#xff08;Language Integrated Query&#xff09;提供了強大的數據查詢能力&#xff0c;尤其是在處理集合間的關聯操作時。本文將詳細解析 C# Linq 中的左關聯查詢&#xff0c;并通過實際案例說明其用法。左關聯查詢基礎左關聯&#xff08;Left…

【機器學習深度學習】LoRA 微調詳解:大模型時代的高效適配利器

目錄 前言 一、LoRA 的核心思想 二、LoRA 為什么高效&#xff1f; ? 1. 參數效率 ? 2. 內存友好 ? 3. 即插即用 三、LoRA 適用場景 四、LoRA 實踐建議 五、LoRA 和全參數微調對比 六、 LoRA的具體定位 &#x1f4cc; 總結 &#x1f517; 延伸閱讀 前言 在大模型…

vue頁面不銷毀的情況下再返回,總是執行created,而不觸發 activated

vue頁面不銷毀的情況下再返回&#xff0c;總是執行created&#xff0c;而不觸發 activated 原因&#xff1a; 沒有進行頁面緩存地址和頁面組件的name沒對上 解決方案: 組件只有在被 包裹時才會觸發 activated 和 deactivated 生命周期 如果沒有被緩存&#xff0c;每次進入路由…

從 C# 到 Python:6 天極速入門(第二天)

作為一名資深 C# 開發者&#xff0c;我們在第一天已經掌握了 Python 的基礎語法框架。今天我們將深入 Python 的特色語法與高級特性&#xff0c;通過實際項目開發場景的代碼對比&#xff0c;理解這些特性在真實業務中的應用價值。一、簡潔語法糖&#xff1a;項目開發中的實戰應…

MyBatis 動態 SQL:讓 SQL 語句隨條件靈活變化

目錄 1. 動態SQL 1.1. if 1.1.1. 持久層接口添加方法 1.1.2. 映射文件添加標簽 1.1.3. 編寫測試方法 1.2. where 1.3. set 1.4. choose、when、otherwise 1.5. foreach 1.5.1. 遍歷數組 1.5.2. 遍歷Collection 1.5.3. 遍歷Map 2. 總結 前言 本文來講解MyBatis的動…

AI 驅動的儀表板:從愿景到 Kibana

作者&#xff1a;來自 Elastic Jeffrey Rengifo 及 Toms Mura 使用 LLM 處理圖像并將其轉換為 Kibana 儀表板。 想獲得 Elastic 認證&#xff1f;了解下一次 Elasticsearch Engineer 培訓的舉辦時間&#xff01; Elasticsearch 擁有眾多新功能&#xff0c;幫助你為你的使用場景…

AI產品經理面試寶典第17天:AI時代敏捷開發與MVP構建面試題與答法

機器學習MVP構建問題怎么答? 面試官:請舉例說明如何將業務問題轉化為機器學習可解的問題? 你的回答:以電商供應商評價為例,傳統方法用人工設定的低維度指標評分,而機器學習能利用大數據構建高維模型。比如通過供應商歷史交易數據、物流時效、售后投訴率等數百個特征,訓…

HBase2.5.4單機模式與偽分布式的安裝與配置(Ubuntu系統)

HBase的安裝也分為三種&#xff0c;單機模式、偽分布式模式、完全分布式模式&#xff1b;我們先來安裝單機版。 一、環境準備 1. 系統要求 Ubuntu 20.04/22.04 LTS Java 8&#xff08;必須&#xff0c;HBase不兼容更高版本&#xff09; Hadoop&#xff08;單機模式不需要&a…

Honeywell霍尼韋爾DV-10 變速器放大器 輸入 15-28 VDC,輸出 +/- 10VDC 060-6881-02

Honeywell霍尼韋爾DV-10 變速器放大器 輸入 15-28 VDC,輸出 /- 10VDC 060-6881-02

騰訊位置商業授權鴻蒙地圖SDK工程配置

工程配置 安裝 DevEco Studio 開發環境 手機HarmonyOS系統&#xff1a;OpenHarmony-5.0.0.71及以上DevEco Studio版本&#xff1a;DevEco Studio NEXT Release(Build Version: 5.0.3.900)及以上 獲取key與生成秘鑰 獲取key 登錄騰訊位置服務控制臺&#xff0c;未注冊過賬號可…

RocketMQ源碼級實現原理-Commitlog刷盤機制

刷盤機制 同步刷盤 代碼實現 寫入線程 寫入線程可能同時有多個&#xff0c;但是刷盤線程至始至終就是一個單線程 刷盤線程&#xff0c;始終是操作雙緩沖區域&#xff0c;一個用來刷盤&#xff0c;另一個用來接收多個寫入線程同時寫入刷盤請求 刷盤線程 通過這種方式&#xff0…

Java與Vue技術搭建的SRM招標采購管理系統,提供源碼,涵蓋招標、投標、評標全流程,助力企業高效規范采購管理

前言&#xff1a;在當今競爭激烈的商業環境中&#xff0c;高效、透明、規范的招標采購流程對于企業的成本控制、供應鏈穩定以及整體運營效率至關重要。SRM招標采購管理系統應運而生&#xff0c;它借助先進的信息技術&#xff0c;整合了招標采購的各個環節&#xff0c;實現了采購…