原创 圖的相關概念~DS筆記⑦

圖 前面學到的數據結構都是一對一,一對多的。 一對一比如單鏈表,一對多比如樹。 這次考慮一種更復雜,多對多的,卻也跟我們息息相關的數據結構,圖。 圖(Graph):是由頂點的有窮非空集合和頂點之間的邊的集合組成。通常表示爲:G(V

原创 爲什麼要用循環隊列,及基礎操作代碼(c語言)~DS筆記④

隊列 一種重要的數據結構。它常常和棧放在一起作比較,因爲一個是先進先出,另一個是後進先出。 什麼意思呢?就好比你去排隊買票,那你越早排,也就越早買到票。這就像隊列結構。也就是’‘先進先出’’。 怎麼實現呢?可能你會說做一個數組,一

原创 串的一些基礎操作(c語言)~DS筆記⑤

串 先來看看下面這幾句: 黃山落葉松葉落山黃,上海自來水來自海上,還有小嶽嶽春晚的那句:山西運煤車煤運西山。 諸如此類的句子很多人都聽過,他們有一個共同的特點:順着讀,倒着讀都一樣。他們也有一個共同的名字:迴文。 再看下面的這三

原创 死鎖是什麼?在postgresql中是如何預防死鎖的?

什麼是死鎖? 進程的加鎖請求會被鎖衝突阻塞,從而進入睡眠等待狀態。 而如果出現了多個進程持有、且等待其他進程釋放資源的惡性環,即形成死鎖。 可以簡單地將死鎖理解爲:存在資源爭奪的惡性環。 舉個栗子: 假設有n個人,圍着圓桌坐了一

原创 centos7Linux中的lvm、pv、vg、lv,以及Linux擴容,創建新分區

概念 本着言簡意賅的目的。以下概念會在擴容時用到,需熟知,不然會不理解具體操作在幹什麼。 lvm:邏輯卷管理器(Logical Volume Manager)它使系統管理員可以更方便的爲應用與用戶分配存儲空間。在LVM管理下的存儲

原创 排序算法歸納(c語言) ⑦快速排序

快速排序 Quick Sort,被譽爲20世紀十大算法之一,真正的排序大佬登場! 快速排序可看作冒泡排序的升級,它們同屬於交換排序類。只不過快排增大了記錄的比較和移動距離,從而減少了比較和交換次數。 快速排序的基本思想:通過一趟排

原创 排序算法歸納(c語言) ⑥歸併排序

歸併排序 歸併,顧名思義是歸一,合併的意思。 具體的做法大體是:將兩個有序子段歸併爲一個長段,重複這一過程,最終就能得到一個有序序列了。 所以,縱觀整個對並過程,就像是一顆完全二叉樹。由二叉樹的深度可以得出,整個歸併排序的執行次數

原创 排序算法歸納(c語言) ⑤堆排序

堆排序 HeapSort,這是相當常用的一種排序算法。原因是它的時間複雜度相當穩定,且相當高效。無論是最好情況還是最壞情況,時間複雜度都能較穩定地保持在O(nlogn)。 之所以這麼高效,是因爲它建立在一種特殊的數據結構上,即,堆。

原创 排序算法歸納(c語言) ③插入排序

插入排序 插入排序的關鍵在於:將後來的無序元素,插入到前面的有序之中。 可是我們拿到手的往往是一組純無序的元素啊,哪有什麼“前面的有序元素”呢? 當然有,要知道,任意單一元素是自然有序的。 也就是說我們可以把第一個元素看成前端的有序列

原创 排序算法歸納(c語言) ④希爾排序

希爾排序 ShellSort,排序算法史上的里程碑。 爲什麼這麼說呢?因爲在這之前,人類一直沒法有效突破排序算法時間複雜度,大O長時間停留在n平方。而希爾排序做到了。 它是怎麼實現的?通過一種巧妙的思路:設置增量,逐漸有序。 什麼叫逐

原创 排序算法歸納(c語言)①冒泡排序

冒泡排序 這是最早學到的一個排序算法,它的原理比較簡單。就像它的名字一樣,很形象,讓大數(或小數)“冒出頭”。 本代碼中,待排序的數據放在一個順序表中。 數據存放沒有從0開始,而是選擇從1開始,data[0]則可做他用。 這裏一共列出

原创 排序算法歸納(c語言) ②選擇排序

選擇排序 系列之第二篇,選擇排序。 選擇排序相對於冒泡排序是較少做交換的。因爲它在進行一次外層循環後,只挑選最優的一個元素進行交換。這也就省去了一些交換的時間複雜度。所以,從這個角度講,選擇排序的效率因該會高於冒泡排序。 待排序數據依

原创 二叉樹相關概念及c語言實現~DS筆記⑥

二叉樹 二叉樹(Binary Tree):是n(n>=0)個結點的有限集合,該集合或者爲空集,或者是由一個根節點和兩顆互不相交的、分別爲根節點的子二叉樹組成。 二叉樹的特點:每個結點最多有兩個子樹,且左右有序,不可顛倒。 斜樹:所有節

原创 樹的相關概念~DS筆記⑥

樹 樹(Tree):n(n>=0)個結點的有限集。n爲0時稱爲空樹。在任意一棵非空樹中:①:有且僅有一個特定的稱爲根(Root)的結點;②:當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T1、T2、…、Tm,其中每一個集合本