C#中的數(shù)據(jù)結(jié)構(gòu)介紹
一、數(shù)組(Array)
數(shù)組具有以下的特點(diǎn):
- 數(shù)組屬于線性結(jié)構(gòu),在內(nèi)存中是連續(xù)存放的。
- 數(shù)組的元素類型必須相同。
- 數(shù)組可以直接通過下標(biāo)訪問。
- 數(shù)組的查找速度非???,新增和刪除速度慢。
- 數(shù)組在初始化時要指定數(shù)組長度。
二、動態(tài)數(shù)組(ArrayList)
動態(tài)數(shù)組具有以下的特點(diǎn):
- ArrayList的底層其實(shí)就是一個數(shù)組。
- ArrayList在聲明時不必指定長度,會根據(jù)存儲的數(shù)據(jù)動態(tài)的增加或減少長度。
- ArrayList會把所有的元素都當(dāng)做Object處理,因此可以存儲不同數(shù)據(jù)類型的元素。
- 插入和刪除一個元素時,會移動它之后所有元素的位置,效率低,頻繁進(jìn)行插入或者刪除元素推薦使用LinkedList。
- ArrayList是非類型安全的,在插入和刪除元素時會進(jìn)行拆箱和裝箱問題,影響性能,效率低。
三、泛型List
泛型List具有以下的特點(diǎn):
- List是ArrayList的泛型類。
- 泛型List需要在聲明時指定具體的類型。
- 泛型List沒有裝箱和拆箱操作,因此List比ArrayList效率高而且類型安全。
四、雙向鏈表(LinkedList)
雙向鏈表具有如下特點(diǎn):
- 鏈表的節(jié)點(diǎn)在內(nèi)存中的空間是不連續(xù)的,每塊空間稱作一個節(jié)點(diǎn),每個節(jié)點(diǎn)都存有一個前驅(qū)和后置指針,分別指向前一個節(jié)點(diǎn)和后一個節(jié)點(diǎn),因此向鏈表中添加和刪除元素的效果高,只需要更改相應(yīng)節(jié)點(diǎn)的指針指向即可。
- 鏈表的查找效率低。查找元素時不能通過下標(biāo)進(jìn)行訪問,只能從頭開始通過地址按順序查找。
五、堆棧(Stack)
堆棧具有如下特點(diǎn):
- 堆棧是先進(jìn)后出的原則,最先插入的元素最后被訪問,最后插入的元素最先被訪問。
- Push入棧,Pop出棧并返回棧頂元素,Peek只返回棧頂元素。
六、Queue(鏈表)
鏈表具有以下特點(diǎn):
- 鏈表是先進(jìn)先出的原則,最先進(jìn)入的元素最先被訪問,最后進(jìn)入的元素最后被訪問。
- Enqueue入隊列,Dequeue出隊列并返回列首元素,Peek只返回列首元素。
七、字典(Dictionary)
字典具有以下特點(diǎn):
- 創(chuàng)建字典時需要指定key和value的數(shù)據(jù)類型。
- 字典中的key值是唯一的,value的值可以不唯一。
- 可以通過key快速查找對應(yīng)的value,速度快,但是消耗內(nèi)存。
幾種常見數(shù)據(jù)結(jié)構(gòu)的使用情景
| Array | 需要處理的元素數(shù)量確定并且需要使用下標(biāo)進(jìn)行訪問時可以考慮,不過建議使用List<T>。 |
| ArrayList | 不推薦使用,建議使用泛型List<T>。 |
| 泛型List<T> | 需要處理的元素數(shù)量不確定時,通常建議使用。 |
| LiskedList<T> | 鏈表適合元素數(shù)量不固定,而且需要經(jīng)常增減節(jié)點(diǎn)的情況,鏈表增減元素效率高。 |
| Queue<T> | 隊列適合于先進(jìn)先出的情況。 |
| Stack<T> | 堆棧適合于先進(jìn)后出的情況。 |
| Dictionary<K,T> | 字典適合于需要鍵值對操作的情況。 |
到此這篇關(guān)于C#數(shù)據(jù)結(jié)構(gòu)介紹的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆的代碼
- C#常用數(shù)據(jù)結(jié)構(gòu)和算法總結(jié)
- C#數(shù)據(jù)結(jié)構(gòu)之隊列(Quene)實(shí)例詳解
- C#數(shù)據(jù)結(jié)構(gòu)之堆棧(Stack)實(shí)例詳解
- C#數(shù)據(jù)結(jié)構(gòu)之雙向鏈表(DbLinkList)實(shí)例詳解
- C#數(shù)據(jù)結(jié)構(gòu)之單鏈表(LinkList)實(shí)例詳解
- C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
- C#數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表的實(shí)例代碼
相關(guān)文章
C# WebService發(fā)布以及IIS發(fā)布
這篇文章主要介紹了C# WebService發(fā)布以及IIS發(fā)布的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07
C# websocket及時通信協(xié)議的實(shí)現(xiàn)方法示例
說到websocket大家一定不會陌生,WebSocket是HTML5一種新的協(xié)議。下面這篇文章主要給大家介紹了關(guān)于C# websocket及時通信協(xié)議的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-11-11
c# EPPlus秘籍之Excel實(shí)現(xiàn)圖表導(dǎo)出
這篇文章主要為大家介紹了c# EPPlus秘籍之Excel實(shí)現(xiàn)圖表導(dǎo)出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
winform 調(diào)用攝像頭掃碼識別二維碼的實(shí)現(xiàn)步驟
這篇文章主要介紹了winform 調(diào)用攝像頭掃碼識別二維碼的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用winform,感興趣的朋友可以了解下2021-02-02
C# 獲取硬件參數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C# 獲取硬件參數(shù)的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
DevExpress設(shè)置餅狀圖的Lable位置實(shí)例
這篇文章主要介紹了DevExpress設(shè)置餅狀圖的Lable位置的方法,以實(shí)例形式詳細(xì)講述了設(shè)置餅狀圖的Lable位置具體實(shí)現(xiàn)過程,需要的朋友可以參考下2014-10-10

