資料結構思想

2021-09-29 11:34:00 字數 2020 閱讀 6474

程式的好壞一般來說有2個標準,乙個是時間複雜度,乙個是空間複雜度。時間複雜度說的是程式執行的時間;空間複雜度說的是程式的記憶體占用的多少。

而資料結構就是為了解決時間複雜度的,或者說乙個好的資料結構(演算法)可以節省程式執行的時間。

顧名思義,線性表是一條線的。首先要稍稍提一下,資料結構的儲存只有陣列(array)和鍊錶(linklist)2種方式來實現。任何的資料結構都會涉及到建立,插入,刪除這幾個操作

所以線性表同樣的,可以由陣列和鍊錶來實現。其中線性表又分為2種形式一種叫堆疊(stack),一種叫佇列(queue)。

堆疊的特點是先進後出,後進先出。它的實現就是普通的陣列和單向鍊錶。

佇列的特點是先進先出,後進後出。就像排隊一樣。實現方法也是普通的陣列和單向鍊錶。只是思路變換了,不是什麼大難題。

接下來才是我想特別寫的樹(tree)

二分查詢的前提條件是這一堆資料必須是順序儲存,公升序降序都可以,但是必須要順序。然後每次都拿中間項與查詢項比較。

二分查詢的優勢在於,它100%能排除到一半的資料,所以相比於堆疊和佇列的查詢方式會快很多。 那麼通過二分查詢來引出我們的

通過二分查詢你有沒有發現,不管查詢了多少次,查詢的方向是左還是右,都是按照一定的規律進行的。我們來畫乙個圖就看看

我們查詢2和5就一定會在第2次找到,我們要找1,4,6就一定會在第3次找到。也就是說在二分查詢中,某個資料被查詢的次數是固定的。而這樣乙個圖是不是很像乙個樹呢?其實這就是樹。

每乙個元素都稱為結點(node)(後面改了,下面的節點全部當成結點對待o(∩_∩)o)

樹和子樹

根:根是乙個相對概念,比如對2節點和5節點來說他們的根就是3節點。1節點的根就是2節點。4節點和6節點的根是5節點。

邊:就是上面的藍色箭頭。乙個擁有n個節點的樹有n-1條邊。 

結點的層次:根結點的層次為1,其餘結點的層次為父結點層次+1 。

子樹:子樹同樣也是一棵樹,所以他們也擁有自己的根。每個子樹是互不相交的,如果子樹之間相交則不能稱之為樹。除了根節點以外,每個節點只有乙個父節點。

節點的度:乙個節點的子樹個數。

樹的度:一棵樹中最大的節點的度作為樹的度。例如上面,3節點的度是2。2節點的度是1。5節點的度是2 。所以這棵樹的度是2 

葉節點:度為0的節點。用人話來說就是層次最低的節點。->1,4,6這幾個就是葉節點。 

父子節點:這是乙個相對概念,需要注意的是父子關係只存在於相鄰的上下層次間。比如3是5的父節點,而不是4or6的父節點。

兄弟節點:在同一層次的節點稱為兄弟節點。

路徑和路徑的長度:就是某乙個節點沿著層層父節點往上走的軌跡。經過的箭頭就是該路徑的長度。

祖先節點:與父子節點類似,沿著一條向上的路徑,該路徑上所以的節點都是出發點的祖先節點。

子孫節點:沿著一條向下的路徑,該路徑所以的節點都是出發點的子孫節點。

樹的深度:樹的所有結點中最大的層次。

二叉樹:

簡單來說,乙個node裡含有資料域和指標域(含有1個firstchild指標和1個nextsibling指標)

二叉樹的種類

無序樹,有序樹,完全二叉樹,滿二叉樹。

除了葉結點外,其餘結點的指標域都不是null;

是從完全二叉樹衍生的一種樹,滿二叉樹只能缺少葉結點。

Early Orders 資料結構 思維

early orders 資料結構 思維 題目大意 給你乙個序列,讓你找乙個字典序最小的子串行,要求這子串行是乙個前k個數的全排列。題解 難度不太,冷靜思考。我用的優先佇列寫的,寫起來還是有點噁心,碼量不大,要注意很多細節。include define lson id 1 define rson i...

資料結構 遞迴思想

一 漢諾塔 include stdio.h include stdlib.h void move int n,char x,char y,char z else int main 二 斐波那契數列 include stdio.h define maxsize 40 void iterfib void...

程式架構思想

程式的架構的思想可以問下面此問題 1.目的 為什麼才有此架構?2.效果 使用此架構後,前後的效果會發生什麼變化。3.成本 使用此架構後開發的週期和成本。4.競品 此類產品的競品是什麼,有沒有更好的方案。4.優缺點 如 為什麼使用spring 目的 解耦,模組化,關注業務 效果 程式模組化,由容器管理...