首頁 > 後端開發 > C#.Net教程 > c語言中資料結構是什麼?常見資料結構有哪些?

c語言中資料結構是什麼?常見資料結構有哪些?

青灯夜游
發布: 2023-01-06 14:00:46
原創
50932 人瀏覽過

c語言中,資料結構是指相互之間存在一種或多種特定關係的資料元素的集合,它是電腦儲存、組織資料的方式;常見資料結構有:線性資料結構(陣列、鍊錶、堆疊、佇列和線性表)、樹形結構(二元樹、完全二元樹、二元查找樹、堆疊)、圖形結構(有向圖和無向圖)。

c語言中資料結構是什麼?常見資料結構有哪些?

本教學操作環境:windows7系統、c99版本、Dell G3電腦。

什麼是資料結構呢?

資料結構是電腦儲存、組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合

#大部分資料結構的實作都需要藉助C語言中的指標與結構體類型

#下面,進入今天的重點啦O(∩_∩)O幾種常見的資料結構

(1)線性資料結構:元素之間一般存在元素之間存在一對一關係,是最常用的一類資料結構,典型的有:陣列、堆疊、佇列和線性表

(2)樹狀結構:結點間具有層次關係,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為「一對多」關係,常見類型有:樹、堆

(3)圖形結構:在圖形結構中,允許多個結點之間相關,稱為「多對多」關係

下面分別對這幾種資料結構做一個簡單介紹:

1、線性資料結構:典型的有:陣列、堆疊、佇列和線性表

#(1)陣列與鍊錶

a、陣列:存放著一組相同類型的數據,需要預先指定數組的長度,有一維數組、二維數組、多維數組等

b、鍊錶:鍊錶是C語言中一種應用廣泛的結構,它採用動態分配記憶體的形式實現,用一組任意的儲存單元存放資料元素鍊錶的,一般為每個元素增設指標域,用來指向後繼元素

c、數組與鍊錶的差異:

從邏輯結構來看:陣列必須事先定義固定的長度,不能適應資料動態地增減的情況;鍊錶動態地進行儲存分配,可以適應資料動態地增減的情況,且可以方便地插入、刪除資料項(數組中插入、刪除資料項時,需要移動其它資料項)

從記憶體儲存來看:(靜態)數組從堆疊中分配空間(用NEW創建的在堆中), 對於程式設計師方便快速,但是自由度小;鍊錶從堆中分配空間, 自由度大但是申請管理比較麻煩

#從訪問方式來看:數組在內存中是連續存儲的,因此,可以利用下標索引進行隨機訪問;鍊錶是鍊式存儲結構,在訪問元素的時候只能通過線性的方式由前到後順序訪問,所以訪問效率比數組要低

(2)堆疊、佇列和線性表:可採用順序儲存和鍊式儲存的方法進行儲存

順序儲存:借助資料元素在儲存空間中的相對位置來表示元素之間的邏輯關係

鍊式儲存:借助表示資料元素儲存位址的指標表示元素之間的邏輯關係

a、堆疊:只允許在序列末端進行操作,堆疊的操作只能在堆疊頂部進行,一般堆疊又稱為後進先出或先進後出的線性結構

順序堆疊:採用順序儲存結構的堆疊稱為順序棧,即需要用一片位址連續的空間來儲存堆疊的元素,順序堆疊的類型定義如下:

c語言中資料結構是什麼?常見資料結構有哪些?

#連結堆疊:採用鍊式儲存結構的堆疊稱為鏈棧:

c語言中資料結構是什麼?常見資料結構有哪些?

b、佇列:只允許在序列兩端進行操作,一般佇列也稱為先進先出的線性結構
循環佇列:採用順序儲存結構的隊列,需要按隊列可能的最大長度分配儲存空空,其類型定義如下:

c語言中資料結構是什麼?常見資料結構有哪些?

鏈隊列:採用鍊式儲存結構的隊列稱為鏈隊列,一般需要設定頭尾指標只是鍊錶的頭尾結點:

c語言中資料結構是什麼?常見資料結構有哪些?

c、線性表:允許在序列任意位置進行操作,線性表的操作位置不受限制,線性表的操作十分靈活,常用操作包括在任意位置插入和刪除,以及查詢和修改任意位置的元素

順序表:採用順序儲存結構表示的線性表稱為順序表,用一組位址連續的儲存單元一次存放線性表的資料元素,即以儲存位置相鄰表示位序相繼的兩個元素之間的前驅和後繼關係,為了避免移動元素,一般在順序表的介面定義中只考慮在表尾插入和刪除元素,如此實現的順序表也可稱為堆疊表:

c語言中資料結構是什麼?常見資料結構有哪些?

線性表:一般包括單鍊錶、雙向鍊錶、循環鍊錶和雙向循環鍊錶

單鍊錶:

c語言中資料結構是什麼?常見資料結構有哪些?

雙向鍊錶:

c語言中資料結構是什麼?常見資料結構有哪些?

線性表兩種儲存結構的比較:

#順序表:

 優點:在順序表中,邏輯中相鄰的兩個元素在物理位置上也相鄰,查找比較方便,訪問任一元素的時間複雜度都為O(1)

 缺點:不適合在任意位置插入、刪除元素,因為需要移動元素,平均時間複雜度為O(n)

鍊錶:

 優點:在連結的任意位置插入或刪除元素只需修改對應指針,不需要移動元素;按需動態分配,不需要按最大需求預先分配一塊連續空空

 缺點:查找不方便,查找某一元素需要從頭指針出發沿指針域查找,因此平均時間複雜度為O(n)

2、樹狀結構:結點間具有層次關係,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為「一對多」關係,常見類型有:樹、堆

(1)二元樹:二元樹是一種遞歸資料結構,是含有n(n>=0)個結點的有限集合,二元樹具有以下特點:

二元樹可以是空樹;二元樹的每個結點都恰好有兩棵子樹,其中一個或兩個可能為空;二叉樹中每個結點的左、右子樹的位置不能顛倒,若改變兩者的位置,就成為另一棵二叉樹

(2)完全二叉樹:從根起,自上而下,自左而右,給滿二元樹的每個結點從1到n連續編號,如果每個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應,則稱為完全二叉樹

a、採用順序儲存結構:用一維數組儲存完全二元樹,結點的編號對於與結點的下標(如根為1,則根的左孩子為2i=21=2,右孩子為2i 1=21 1=2)

c語言中資料結構是什麼?常見資料結構有哪些?

b、採用鍊式儲存結構:

二元鍊錶:

c語言中資料結構是什麼?常見資料結構有哪些?

三叉鍊錶:它的結點比二元鍊錶多一個指標域parent,用來執行結點的雙親,便於找出雙親結點

c語言中資料結構是什麼?常見資料結構有哪些?

兩種儲存結構比較:對於完全二元樹,採用順序儲存結構既能節省空間,又可利用數組元素的下標值確定結點在二元樹中的位置及結點之間的關係,但採用順序存儲結構存儲一般二元樹容易造成空間浪費,鍊式結構可以克服這個缺點

(3)二元查找樹:二元查找樹又稱二元排序樹,或者是一課空二叉樹,或者是具有如下特徵的二元樹:

a、若它的左子樹不空,則左子樹上所有結點的值均小於根結點的值

b、若它的右子樹不空,則右子樹上所有結點的值都大於根結點的值

c、它的左、右子樹也分別是二元查找樹

(4)平衡二元樹:平衡二元查找樹簡稱平衡二元樹,平衡二元樹或棵空樹,或是具有下列性質的二元查找樹:它的左子樹和右子樹都是平衡二元樹,且左子樹和右子樹的高度差異的絕對值不超過1

1c語言中資料結構是什麼?常見資料結構有哪些?

#平衡二元樹的失衡及調整主要可歸納為下列四種情況:LL型、RR型、LR型、RL型

(5)樹:樹是含有n(n>=0)個結點的有限集合,在任一棵非空樹種: a、有且僅有一個特定的稱為根的結點

b、當n>1時,其餘結點可分為m(m>0)個互不相交的有限集合T1,T2,…,Tm,其中每一個集合本身又是一棵樹,而T1,T2,…,Tm稱為根的子樹

(6)堆:堆是具有以下特性的完全二元樹,其所有非葉子結點均不大於(或不小於)其左右孩子結點。若堆中所有非葉子結點均不大於其左右孩子結點,則稱為小頂堆(小根堆),若堆中所有非葉子結點均不小於其左右孩子結點,則稱為大頂堆(大根堆)

1c語言中資料結構是什麼?常見資料結構有哪些?

(7)並查集:並查集是指由一組不相交子集所構成的集合,記作:S= {S1,S2,S3,…,Sn}

(8)B樹

3、圖形結構:在圖形結構中,允許多個結點之間相關,稱為「多對多」關係,可分為有向圖和無向圖

教學推薦:《c語言教學影片

以上是c語言中資料結構是什麼?常見資料結構有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板