原创 【鏈表】尋找、刪除單向鏈表的倒數第K個節點

通過設置快、慢兩個指針,可以通過一次遍歷得到單向鏈表的倒數第K個節點。 但兩個問題有着較爲明顯的區別: (1)對於尋找倒數第K個節點,慢指針慢於快指針第K-1步前進。 (2)對於刪除倒數第K個節點,爲了保證得到刪除節點父節點的信息

原创 【數組】旋轉數組的搜索問題

旋轉數組是指在原有順序數組基礎上,以某個未知點進行了旋轉。以升序數組爲例,其旋轉後有三種基本形態(見下圖,圖中虛線爲數組中心位置): 情況一:未旋轉 情況二:旋轉點位於中心位置右側 情況三:旋轉點位於中心位置左側。 利用二分法可

原创 【二叉樹】用python實現AVL樹

AVL樹是平衡的二叉搜索樹,其任意節點的平衡因子(左子樹高度-右子樹高度)始終爲-1、0或1。AVL樹的結構能夠解決普通BTS由於有序插入導致的退化爲鏈表的情況。 AVL樹在二叉搜索樹實現的基礎上,主要在添加和刪除節點時更新子樹相

原创 【圖】用python實現有向圖

通過臨界表的方式實現了圖結構 class Vertex(object): """ 節點對象 """ def __init__(self, key): self.key = key

原创 【二叉樹】用python實現二叉樹的遍歷

二叉樹有四種種常見的遍歷方式: 前序遍歷:按照根—>左子樹——>右子樹的遞歸方式進行遍歷 中序遍歷:按照左子樹—>根——>右子樹的遞歸方式進行遍歷 後序遍歷:按照左子樹—>右子樹——>根的遞歸方式進行遍歷 層次遍歷:採用逐層的方式

原创 【二叉堆】實現最小堆和最大堆

最小堆和最大堆採用完全二叉樹的形式來存儲不同數字的序列,在topK問題中有廣泛應用。其滿足中間節點大於左子樹和右子樹上所有節點值的特點,爲保證其存儲、查找和刪除的遍歷,通常採用數組的形式進行構建。 本文實現了最小堆和最大堆的構建、

原创 【二叉樹】用python實現二叉搜索樹

二叉搜索樹(BTS, binary search tree)是滿足左子樹節點小於根節點、右子樹節點大於根節點的二叉樹,是B-樹的特例,也是AVL的基礎。本文實現了BTS的插入、查找、刪除、遍歷、最大/小值節點、前/驅驅查找等基本功

原创 【圖】用python實現有向圖的BFS

寬度優先搜索(BFS)是一種有效的圖遍歷方法,類似於二叉樹的層遍歷,其從初始搜索節點開始,逐層的往外擴散,特別適用於尋找兩個節點間的最短距離等問題。 在BFS過程中,需要引入隊列結構。在探索某節點時,將相鄰節點依次入列;探索完後,

原创 python中的對象與引用

在python中萬物皆爲對象,包括變量、函數、類以及其實例化的對象。 python中所謂的賦值其實傳的是對象指向的引用,也就是說傳的是地址。 1. 可變變量和不可變變量 python中存在兩大類型的對象,不可變對象(如基本類型中的

原创 【排序算法】用python實現常見的排序算法

目前實現了冒泡排序、選擇排序、插入排序、希爾排序、歸併排序和快速排序等常見算法。 1. 冒泡排序 通過兩層循環實現排序,每輪內循環實現外層子序列中最大/最小值的浮出。 def bubbleSort(nums:list):

原创 【鏈表】用python實現單向鏈表

from typing import Any, Optional class Node(object): def __init__(self, value: Any, next: Optional["Node"]=Non

原创 【雙端隊列】用python實現雙端隊列

分別用有序列表和鏈實現了雙端隊列,主要包括首端加入/刪除、末端加入/刪除等功能。 方法一:有序列表的實現 class Deque(object): def __init__(self): self.data

原创 【隊列】用隊列模擬打印機的等待時間

用於打印機任務的仿真:一段時間內,打印任務和打印機狀態的模擬 構造三個對象: (1)打印機:實現了打印機的打印速度、剩餘打印時間、打印任務三個屬性,以及是否閒置、開啓一項新任務和打印三個方法 (2)打印任務:實現了任務的隨機生成、

原创 【棧】用python實現棧

分別採用有序列表、單向鏈和雙向鏈實現棧的推入、彈出等功能。 方法一:有序列表的實現 # 直接利用python內置的list實現 class Stack(object): def __init__(self):

原创 【隊列】用python實現隊列

分別採用有序列表、單鏈表和雙鏈表實現了隊列的基本功能,涵蓋入列、出列等。 方法一:基於有序隊列的實現 class Quene(object): def __init__(self): self.data =