C#数据结构-顺序表
生活随笔
收集整理的這篇文章主要介紹了
C#数据结构-顺序表
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序表,顧名思義存儲在計算機指定內存區域的一塊連續的存儲結構,跟我們一起排隊做廣播體操的那種方式
存儲物理結構:物理內存空間上是連續的
存儲邏輯關系:存儲值之間的關系為一對一
使用場景:一般訪問數據量比較大,新增和刪除操作不頻繁的數據
那么我們這里實現的語言是用的c#,對于線性表的一些特性我們這里用數組來操作這個實現和操作。這里我們對線性表做一些操作:增、刪、改、查
首先我們來定義一個順序表
class LineClass{//設置線性表最大長度public const int MaxSize = 100;//初始化數據public string[] data;//線性表長度public int length;//初始化構造public LineClass(){//構造函數初始化線性表data = new string[MaxSize];length = 0;}
}
接下來我們把建立數據存儲元素結構,這里是循環插入線性表,時間空間復雜度為:O(n) #region 存儲元素結構 O(n)public void CreateLine(string[] splits){int i;for (i = 0; i < splits.Length; i++){data[i] = splits[i];}length = i;}#endregion 然后我們把這個建立打印這個線性表的方法 ,時間空間復雜度為:O(n)
#region 將線性表的元素構成一個字符串返回 O(n)public string DispLine(){string strLine = string.Empty;for (int i = 0; i < length; i++){strLine += data[i] + ",";}return length > 0 ? strLine.TrimEnd(',') : "";}#endregion獲取這個順序表的長度。時間空間復雜度為: O(1)
#region 線性表的長度 O(1)public int LineLength(){return length;}#endregion獲取第item個元素的值,時間空間復雜度為: O(1)
#region 獲取線性表第item項,元素值為e O(1)public bool GetElem(int item, ref string e){if (item < 1 || item > length){return false;}e = data[item - 1];return true;}#endregion 根據值獲取到item的位置,這里值得注意的是,如果順序表里存在兩個相同的值,到底獲取哪一個呢,我們這里是獲取從第一個元素開始最近的一個值,如果匹配,那么返回。時間空間復雜度為:O(n) #region 根據值獲取位置 O(n)public int LocateElem(string e){int i = 0;while (i<length && string.Compare(data[i],e)!=0){i++;}return i >= length ? 0 : i + 1;}#endregion 接下來就是新增一個值,插入一個值后面值的往后排一個單位,記錄最新的順序表元素的數量。 注意:這里分為三種情況,第一種從第一個位置插入,那么后面所有的元素往后移動一個單位。這里的時間空間復雜度為:O(n)
第二種從中間插入,跟第一種的情況差不多,從這個位置開始,后面的每一項元素往后移動一個單位 第三種情況就是在順序表后面插入,這種情況就直接插入。這里的時間復雜度為:O(1)
優點:存儲密度高,存儲效率高,存取速度快,可以隨機存取結點。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
接下來我們把建立數據存儲元素結構,這里是循環插入線性表,時間空間復雜度為:O(n) #region 存儲元素結構 O(n)public void CreateLine(string[] splits){int i;for (i = 0; i < splits.Length; i++){data[i] = splits[i];}length = i;}#endregion 然后我們把這個建立打印這個線性表的方法 ,時間空間復雜度為:O(n)
#region 將線性表的元素構成一個字符串返回 O(n)public string DispLine(){string strLine = string.Empty;for (int i = 0; i < length; i++){strLine += data[i] + ",";}return length > 0 ? strLine.TrimEnd(',') : "";}#endregion獲取這個順序表的長度。時間空間復雜度為: O(1)
#region 線性表的長度 O(1)public int LineLength(){return length;}#endregion獲取第item個元素的值,時間空間復雜度為: O(1)
#region 獲取線性表第item項,元素值為e O(1)public bool GetElem(int item, ref string e){if (item < 1 || item > length){return false;}e = data[item - 1];return true;}#endregion 根據值獲取到item的位置,這里值得注意的是,如果順序表里存在兩個相同的值,到底獲取哪一個呢,我們這里是獲取從第一個元素開始最近的一個值,如果匹配,那么返回。時間空間復雜度為:O(n) #region 根據值獲取位置 O(n)public int LocateElem(string e){int i = 0;while (i<length && string.Compare(data[i],e)!=0){i++;}return i >= length ? 0 : i + 1;}#endregion 接下來就是新增一個值,插入一個值后面值的往后排一個單位,記錄最新的順序表元素的數量。 注意:這里分為三種情況,第一種從第一個位置插入,那么后面所有的元素往后移動一個單位。這里的時間空間復雜度為:O(n)
第二種從中間插入,跟第一種的情況差不多,從這個位置開始,后面的每一項元素往后移動一個單位 第三種情況就是在順序表后面插入,這種情況就直接插入。這里的時間復雜度為:O(1)
所有這里分為最好的和最壞的情況
#region 插入,從item處插入e值 O(n)public bool LineInsert(int item, string e){//插入的時候小于第一個的位置,或者大于最后兩個位置if (item<1 || item>length+1){return false;}for (int j = length; j > item; j--){data[j] = data[j-1];}data[item - 1] = e;length++;return true;}#endregion 最后就是刪除操作,跟新增差不多,只不過這里是刪除,刪除后此節點后面的所有元素向前移動一個單位,這里的時間空間復雜度為:O(n) #region 刪除 O(n)public bool LineDelete(int item, string e){//刪除的時候小于第一個的位置,或者大于最后一個位置if (item < 1 || item > length ){return false;}e = data[item];for (int i = 0; i < length-1; i++){data[i] = data[i + 1];}length--;return true;}#endregion結論:那么到這里呢順序表操作結束了,可以說順序表是結構最簡單,存儲內存消耗最小的一個數據結構優點:存儲密度高,存儲效率高,存取速度快,可以隨機存取結點。
缺點:長度為定值,中途不易擴充。插入或刪除需要移動結點,修改效率低。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔為你收集整理的C#数据结构-顺序表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓开发实现画廊效果
- 下一篇: 性能调优某大型银行的一个系统过程跟踪和记