資料結構是指相互之間存在著一種或多種關係的資料元素的集合和該集合中資料元素之間的關係組成。簡單來說,資料結構就是設計資料以何種方式組織並儲存在計算機中。
資料結構按照其邏輯結構可分為線性結構、樹結構、圖結構
棧實際上也是乙個線性表,只不過是一種特殊的線性表。棧是只能在表的一端進行插入和刪除運算的線性表,通常稱插入、刪除這一端為棧頂(top),另一端為 棧底(bottom)。當表中沒有元素時稱為空棧。棧頂元素總是後被插入的元素,從而也是最先被刪除的元素;棧底元素總是最先被插入的元素,從而也是最後才能被刪除的元素。
假設棧s=(a1,a2,a3,……an),則a1稱為棧底元素,an稱為棧頂元素。棧中元素按a1,a2,a3……an的次序進棧,退棧的第乙個元素應該是棧頂元素。即後進先出。
用s(1:m)作為棧的順序儲存空間。m為棧的最大容量。
棧的基本運算有三種:入棧、退棧與讀棧頂元素。佇列是只允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做對頭,允許插入的一端叫做對尾。佇列的修改是先進先出。往隊尾插入乙個元素成為入隊運算。從對頭刪除乙個元素稱為退隊運算。
迴圈佇列,就是將佇列儲存空間的最後乙個位置繞到第乙個位置,形成邏輯上的環狀空間。在迴圈佇列中,,用隊尾指標rear指向佇列中的隊尾元素,用排頭指標front指向排頭元素的前乙個位置。
入隊運算:指在迴圈佇列的隊尾加入乙個新元素,首先rear=rear+1,當rear=m+1時,置rear=1,然後將新元素插入到隊尾指標指向的位置。當s=1,rear=front,說明佇列已滿,不能進行入隊運算,稱為「上溢」;
退隊運算:指在迴圈佇列的排頭位置退出乙個元素並賦給指定的變數。首先front=front+1,並當front=m+1時,置front=1,然後將排頭指標指向的元素賦給指定的變數。當迴圈隊列為空s=0,不能進行退隊運算,這種情況成為「下溢」。
用python實現:用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
# -*- coding:utf-8 -*-
class solution:
def __init__(self):
self.stack1=
self.stack2=
def push(self, node):
# write code here
def pop(self):
# return xx
if self.stack2==:
while self.stack1:
return self.stack2.pop()
return self.stack2.pop()
樹(tree)是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做 「樹」 是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。
二叉樹是樹的特殊一種,具有如下特點:
二叉樹是一種比較有用的折中方案,它新增,刪除元素都很快,並且在查詢方面也有很多的演算法優化,所以,二叉樹既有鍊錶的好處,也有陣列的好處,是兩者的優化方案,在處理大批量的動態資料方面非常有用。
平衡二叉樹:所有子樹的差值不能超過1
完全二叉樹:除最後一層以外,每一層上的結點數均達到最大值;在最後一層上只缺少右邊的若干結點。具有n個結點的完全二叉樹的深度為[log2n]+1
二叉樹的遍歷若二叉樹為空,則空操作返回
陣列是可以在記憶體中連續儲存多個元素的結構,在記憶體中的分配也是連續的,陣列中的元素通過陣列下標進行訪問,陣列下標從0開始。
優點:
1、按照索引查詢元素速度快
2、按照索引遍歷陣列方便
缺點:
1、陣列的大小固定後就無法擴容了
2、陣列只能儲存一種型別的資料
3、新增,刪除的操作慢,因為要移動其他的元素。
適用場景:
頻繁查詢,對儲存空間要求不大,很少增加和刪除的情況。
鍊錶是物理儲存單元上非連續的、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶的指標位址實現,每個元素包含兩個結點,乙個是儲存元素的資料域 (記憶體空間),另乙個是指向下乙個結點位址的指標域。根據指標的指向,鍊錶能形成不同的結構,例如單鏈表,雙向鍊錶,迴圈鍊錶等。
優點:
鍊錶是很常用的一種資料結構,不需要初始化容量,可以任意加減元素;
新增或者刪除元素時只需要改變前後兩個元素結點的指標域指向位址即可,所以新增,刪除很快;
缺點:
因為含有大量的指標域,占用空間較大;
查詢元素需要遍歷鍊錶來查詢,非常耗時,即查詢元素慢。
適用場景:
資料量較小,需要頻繁增加,刪除操作的場景
堆是一種比較特殊的資料結構,可以被看做一棵樹的陣列物件,具有以下的性質:
雜湊表,也叫雜湊表,是根據關鍵碼和值 (key和value) 直接進行訪問的資料結構,通過key和value來對映到集合中的乙個位置,這樣就可以很快找到集合中的對應元素。
參考:
資料結構筆記2 資料結構求解問題的過程
1.集合 元素之間的關係 無 特點 資料元素之間 除了屬於同乙個集合 的關係外,別無其他邏輯關係。是最鬆散的,不受任何制約的關係。2.線性關係 元素之間的關係 一對一 特點 開始元素和終端元素都是唯一的,除此之外,其餘元素都有且僅有乙個前趨元素和乙個後繼元素。3.樹形結構 元素之間的關係 一對多 特...
資料結構筆記
程式效率與組織方式有關 圖書館擺書 二分查詢 程式效率與操作有關 迴圈和遞迴 遞迴雖簡單不過耗費大量空間 程式效率與演算法有關 多項式求和 秦九韶要比普通演算法快乙個數量級 測試兩種演算法的 include include include define max 101 define maxl 1e7...
資料結構筆記
一 鄰接矩陣 鄰接矩陣儲存使用2個陣列儲存圖的資訊 1個以為陣列儲存頂點,乙個二維陣列儲存邊的資訊 1 二維陣列中的對角線為0,以為不存在頂點到自身的邊 2 要知道某個點的出度,就是頂點vi在第i行的元素之和,入度就是該頂點所在列的元素之和 3 頂點vi的所有鄰接點就是吧矩陣中第i行元素掃瞄一遍 4...