c++基礎8:常用的數據結構及算法

一.常用數據結構

數組 (Array)

  在程序設計中,爲了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數據元素的集合稱爲數組。在C語言中, 數組屬於構造數據類型。一個數組可以分解爲多個數組元素,這些數組元素可以是基本數據類型或是構造類型。因此按數組元素的類型不同,數組又可分爲數值數組、字符數組、指針數組、結構數組等各種類別。

棧 (Stack)

  是隻能在某一端插入和刪除的特殊線性表。它按照先進後出的原則存儲數據,先進入的數據被壓入棧底,最後的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最後一個數據被第一個讀出來)。

隊列 (Queue)

  一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱爲隊尾,進行刪除操作的端稱爲隊頭。隊列是按照“先進先出”或“後進後出”的原則組織數據的。隊列中沒有元素時,稱爲空隊列。

鏈表 (Linked List)

  是一種物理存儲單元上非連續、非順序的存儲結構,它既可以表示線性結構,也可以用於表示非線性結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。

樹 (Tree)

  是包含n(n>0)個結點的有窮集合K,且在K中定義了一個關係N,N滿足 以下條件:
  (1)有且僅有一個結點 K0,他對於關係N來說沒有前驅,稱K0爲樹的根結點。簡稱爲根(root)。 (2)除K0外,K中的每個結點,對於關係N來說有且僅有一個前驅。
  (3)K中各結點,對關係N來說可以有m個後繼(m>=0)。

圖 (Graph)

  圖是由結點的有窮集合V和邊的集合E組成。其中,爲了與樹形結構加以區別,在圖結構中常常將結點稱爲頂點,邊是頂點的有序偶對,若兩個頂點之間存在一條邊,就表示這兩個頂點具有相鄰關係。

堆 (Heap)

  在計算機科學中,堆是一種特殊的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。

散列表 (Hash)

  若結構中存在關鍵字和K相等的記錄,則必定在f(K)的存儲位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關係f爲散列函數(Hash function),按這個思想建立的表爲散列表

 

二.數據結構的排序算法

穩定的排序算法

  冒泡排序(bubble sort)
  雞尾酒排序 (Cocktail sort, 雙向的冒泡排序)
  插入排序 (insertion sort)
  桶排序 (bucket sort)
  計數排序 (counting sort)
  合併排序 (merge sort)
  原地合併排序
  二叉排序樹排序 (Binary tree sort)
  鴿巢排序 (Pigeonhole sort)
  基數排序 (radix sort)
  Gnome 排序
  圖書館排序

不穩定排序算法

  選擇排序 (selection sort)
  希爾排序 (shell sort)
  組合排序
  堆排序 (heapsort)
  平滑排序
  快速排序 (quicksort)
  內省排序 (Introsort)
  Patience sorting

不實用的排序算法

  Bogo排序
  Stupid sort
  珠排序(Bead sort)
  Pancake sorting
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章