新手入門關於C 中資料結構的理解

2021-08-26 20:23:22 字數 2006 閱讀 1738

來上海已經一段時間,感慨頗多,經歷幾輪的面試慢慢的發現,語言這方面不能以會用為標準,要懂,深入了解。路漫漫其修遠兮,吾將上下而求索。

資料結構在不同的使用者中有著不同理解,但一千個人眼中的哈姆雷特還是那個哈姆雷特。

資料結構:同一類資料元素中,各個元素之間的關係,包括三個成分,數資料的儲存結據的邏輯結構,構和資料的運算結構。顧名思義資料結構將會常與各種演算法聯絡在一起。 下面來看幾個基本的常用的資料結構吧

實際程式設計中我們常用的資料結構不外乎以下幾種:array、arralist、list、queue(堆: 先進先出)、stack(棧:先進後出)、dictionart、linkledlist

array:  作為c#中最簡單基本的資料結構其特點:1、陣列中資料儲存在連續的記憶體上。2、儲存的資料型別相同。3、通過下標可直接訪問。宣告乙個屬陣列時,將在堆中分配一段連續的記憶體來儲存數量為n的資料。儲存的資料為值型別時,在分配的記憶體中會有n個未裝箱的值型別被建立;儲存的資料為引用型別時,在分配的記憶體中會有n個引用型別的索引被建立。

優點: 陣列在記憶體上是連續的儲存,因此它的索引速度很快,訪問其中的乙個元素的時間是恆定的,與其的元素數量無關,陣列中賦值與修改的元素很簡單。缺點:1、陣列是連續儲存,在其倆個元素中插入乙個新的元素變得不方便,2、在宣告陣列時,必須制定其長度,就會產生當我們宣告的長度過長時浪費記憶體,當宣告的長度過短時,會有溢位的風險。這種隨機定義陣列長度的不穩定性,嚴重影響了使用array的使用頻率,針對這種缺點,由此引出arralist。

arraylist: 針對array宣告時需要指定長度和只能儲存相同型別的限制,推出了 arraylist。arraylist需要引入system.collections。

優點:(1)使用中不用申明其長度,arraylist是根據其儲存的元素長度來動態變化的。(2)arraylist可以儲存不同型別的元素,arraylist中所有儲存的元素都會當做object來處理,所以能儲存不同的元素。缺點:(1)發生裝箱和拆箱:由於arraylist中所有的儲存的元素都被當做object型別來處理,值型別在儲存中會轉換為引用型別(裝箱),讀取過程中會再轉換為值型別(拆箱),裝箱時會生成新的引用型別,有時間消耗,影響效率。(2)arraylist儲存型別是不安全的(原因會在深入了解中解釋)。因此在實際操作中考慮到安全和效率arraylist也是幾乎不怎麼用,下面綜合上面的優點、用的最多的list將會登場。

list:為了解決arraylist不安全型別和裝箱和拆箱的缺點,出現了集合泛型。list內部是通過array來實現的(會在list內部構造介紹)。

優點:(1)保證了儲存元素的型別的安全(2)取消了裝箱和拆箱,同時也融合了array的快速訪問和arraylist長度的靈活的優點。

queue:這種資料結構中,最先插入的元素是最先被刪除(先進先出fifo ---firist in first out的線性表)通常使用enqueue和dequeue這倆個方法實現訪問。

stack:這種資料結構中,最先插入的元素是最先被刪除(先進後出lifo ---late in first out的線性表)通常使用pop和push這倆個方法實現訪問

dictionart:提到字典就不能不說hashtable雜湊表和hashing(雜湊,又名雜湊),字典的實現方式就是雜湊表的是現實方式。建立乙個字典之後,往裡面儲存、增加、刪除、訪問都是非常快的,但並不是所有的好事都被字典佔了,dictionary在操作中能快速實現功能,是因為通過更多記憶體的開銷的來滿足。在建立字典時,我們可以傳入乙個容量值,但實際的容量並非該值,字典中而是使用不小於該值的最小質數作為它的實際容量,最小是3。(雜湊衝突再說)當有了實際容量,字典並非實現索引,而是通過建立額外的2個陣列的來實現間接索引,即int buckets和entry entries兩個陣列(即buckets中儲存的其實是entries陣列的下標)。我們新建了乙個空的字典,那麼伴隨而來的是2個長度為3的陣列。所以當處理的資料不多時,還是慎重使用字典為好。

新手資料結構入門理解必看!!!!!!

是一門研究資料之間關係的一門學科,主要有兩類需要研究的關係 物理關係 資料在記憶體中的實際關係。順序結構 根據資料之間的相對位置確定關係。鏈式結構 在資料中新增乙個指標域,用於指向跟它有關係的資料。邏輯關係 無視物理關係,人為新增一種關係。集合 資料之間同屬於乙個集體,除此之外沒有任務關係。表 資料...

資料結構 新手入門 線性表(1)

一 順序表 線性表的順序表示,指的是用一組位址連續的儲存單元依次儲存線性表的資料元素。儲存位址 資料元素b1 b l2 b i 1 l ib i l i 1 p i 1 p i l第n個元素所對應位址p n p n p 1 n 1 l下面,如何構建乙個順序表?1 定義乙個結構體 typedef st...

新手入門 關於C 中的內聯函式 inline

在c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間或者是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯函式。可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,如果頻繁大量的使用就會造成因棧空間不足所造...