C#知识点总结系列:C# 数据结构
線性表(Linear List)
???????? 線性表是一個(gè)線性結(jié)構(gòu),它是一個(gè)含有n≥0個(gè)結(jié)點(diǎn)的有限序列,對(duì)于其中的結(jié)點(diǎn),有且僅有一個(gè)開始結(jié)點(diǎn)沒有前驅(qū)但有一個(gè)后繼結(jié)點(diǎn),有且僅有一個(gè)終端結(jié)點(diǎn)沒有后繼但有一個(gè)前驅(qū)結(jié)點(diǎn),其它的結(jié)點(diǎn)都有且僅有一個(gè)前驅(qū)和一個(gè)后繼結(jié)點(diǎn)。
線性表的順序存儲(chǔ)結(jié)構(gòu)—順序表
???????? 線性表采用順序存儲(chǔ)的方式存儲(chǔ)就稱之為順序表。順序表是將表中的結(jié)點(diǎn)依次存放在計(jì)算機(jī)內(nèi)存中一組地址連續(xù)的存儲(chǔ)單元中。
順序表的特點(diǎn)
??? 1.容量固定
???????? 存儲(chǔ)順序表的元素需要一整塊內(nèi)存空間,因而順序表的容量一旦確定,便不能更改。
??? 2.訪問速度快
???????? 假設(shè)每個(gè)元素占用的空間大小為L(zhǎng)個(gè)字節(jié),其中第一個(gè)單元的存儲(chǔ)地址則是該結(jié)點(diǎn)的存儲(chǔ)地址,并設(shè)表中開始結(jié)點(diǎn)a1的存儲(chǔ)地址(簡(jiǎn)稱為基地址)是LOC(a1),那么結(jié)點(diǎn)ai的存儲(chǔ)地址LOC(ai)可通過下式計(jì)算:LOC(ai)= LOC(a1)+L*(i-1)?? 1≤i≤n。
?
數(shù)組
???????? 線性表的順序存儲(chǔ)結(jié)構(gòu)在C#中的最直接表現(xiàn)形式就是數(shù)組。在C#語言中,數(shù)組是最基礎(chǔ)也是存取速度最快的一種集合類型。數(shù)組是引用類型,保存它們所需的內(nèi)存空間會(huì)在托管堆上分配,一旦數(shù)組被創(chuàng)建,其中的所有元素將被初始化為它們的默認(rèn)值。
int[] arrayInt= new int[10];
arrayInt[6] = 5;
arrayInt[8] = 3;
???????? 以上代碼聲明了一個(gè)值類型int的數(shù)組,并把它的長(zhǎng)度初始化為10,最后分別給第7和第9個(gè)元素賦值。
???????? 當(dāng)數(shù)組元素為值類型時(shí),數(shù)組對(duì)象存放的是值類型對(duì)象本身。當(dāng)元素為引用類型時(shí),數(shù)組對(duì)象存放的則是對(duì)象的引用(指針)。
Control[] arrayControl= new Control[8];
arrayControl[4] = new DropDownList();
arrayControl[6] = new TextBox();
???????? 以上代碼聲明了一個(gè)引用類型Control的數(shù)組,并把它的長(zhǎng)度初始化為8,最后分別給第5和第7個(gè)元素賦值。兩個(gè)值是分別DropDownList和TextBox對(duì)象,雖然它們都繼承自Control類,但兩者卻是不同類,它們的大小不一樣。
ArrayList
C#中的ArrayList 的容量是根據(jù)需要自動(dòng)擴(kuò)展的。ArrayList 提供添加、插入或移除某一范圍元素的方法。 Insert(int index, object value)方法用于在指定索引處插入一個(gè)元素。為了保證順序表中的每個(gè)元素物理上相鄰,插入點(diǎn)后面的所有元素都將后移一位。RemoveAt(int index)方法用于刪除指定索引的元素,刪除指定元素后,刪除點(diǎn)后的所有元素將向前移動(dòng)一位。
?
二叉樹
二叉樹是樹形結(jié)構(gòu)的一個(gè)重要類型。許多實(shí)際問題抽象出來的數(shù)據(jù)結(jié)構(gòu)往往是二叉樹的形式,即使是一般的樹也能簡(jiǎn)單地轉(zhuǎn)換為二叉樹,而且二叉樹的存儲(chǔ)結(jié)構(gòu)及其算法都較為簡(jiǎn)單,因此二叉樹顯得特別重要。
??? 二叉樹(BinaryTree)是n(n≥0)個(gè)結(jié)點(diǎn)的有限集,它或者是空集(n=0),或者由一個(gè)根結(jié)點(diǎn)及兩棵互不相交的、分別稱作這個(gè)根的左子樹和右子樹的二叉樹組成。
???這個(gè)定義是遞歸的。由于左、右子樹也是二叉樹, 因此子樹也可為空樹。
二叉樹的深度優(yōu)先遍歷
1.先序遍歷
若二叉樹為非空,則過程為:
(1) 訪問根節(jié)點(diǎn)。
(2) 先序遍歷左子樹。
(3) 先序遍歷右子樹。
2.中序遍歷
若二叉樹為非空,則過程為:
(1) 按中序遍歷左子樹。
(2) 訪問根結(jié)點(diǎn)。
(3) 按中序遍歷右子樹。
3.后序遍歷
若二叉樹為非空,則過程為:
(1) 按后序遍歷左子樹。
(2) 按后序遍歷右子樹
(3) 訪問根結(jié)點(diǎn)。
本文轉(zhuǎn)自程興亮博客園博客,原文鏈接http://www.cnblogs.com/chengxingliang/p/3533908.html:,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的C#知识点总结系列:C# 数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSI七层模型、数据封装与解封装过程、T
- 下一篇: C#异常--System.IO.File