大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 線性表的順序存儲結構詳解

線性表的順序存儲結構詳解

更新時間:2022-07-14 10:02:01 來源:動力節點 瀏覽918次

線性表:零個或多個數據元素的有限序列

線性表的數據對象集為{a 1 , a 2 , ……, a n },每個數據元素的類型相同。其中,除了第一個元素 a1 之外,每個元素都有并且只有一個直接前驅元素,除了最后一個元素 a n之外,每個元素都有并且只有一個直接后繼元素。數據元素之間的關系是一對一的。

線性表的訂單存儲結構

線性表的數據元素一次存儲在具有連續地址的存儲單元中

一個1一個2......一個i-1我_......一個_

順序存儲結構需要三個屬性:

存儲空間的起始位置:數據數據,其存儲位置為存儲空間的存儲位置。

直線米最大存儲容量:數組MaxSize的長度。

直線米的當前長度:長度。

內存地址計算方法

用數組存儲順序表意味著分配固定長度的數組空間,因為線性表可以插入或刪除,所以分配的數組空間應該大于等于當前線性表的長度。

記憶中的地址,就像圖書館的座位一樣,都是編號的。內存中的每個存儲單元都有自己的編號、地址。因為是順序結構,所以當第一個位置確定后,后面的位置就可以計算出來了。比如,我全班第五,排在我后面的是10,學生的成績是6,7,...,15,因為5+1,5+2,...,5+10。每一個數據元素,無論是整容、真實還是人物,都需要占用一定的存儲單元空間。假設占用c個存儲單元,那么線性表中第二個i+1個數據元素的存儲位置和i個數據元素的存儲位置滿足如下關系:

LOC (a i + 1 ) = LOC (a i ) + c

所以對于第 i 個數據元素 a i的存儲位置可以有一個1計算得到:

LOC (a i ) = LOC (a 1 ) + (i-1) * c

通過這個公式,可以同時計算出線性表中任意位置的地址,任意位置,全部。它的時間復雜度是 O(1)。一般將具有這種特性的存儲結構稱為隨機存取結構。

順序存儲結構的插入和刪除

1.獲取元素操作碼:

public class ArrayList<E> {
transient Object[] elementData;
public E get(int index) {
Objects.checkIndex(index, this.size);
return this.elementData(index);
}
E elementData(int index) {
return this.elementData[index];
}
}
 Copy code 

2.插入

比如,買春運火車票。每個人都排好隊。這位是美女,說……對排隊的第三個人,“大哥,請幫幫我,我媽在家病了,趕緊回去看看她,隊伍這么長,能不能把我放進去在你面前?”你心軟,答應了。身后的人都不得不退后一步。這個例子實際上已經說明了線性表的順序存儲結構,插入數據時的實現過程。

插入思路:

如果插入位置不合理,拋出異常;

如果線性表長度大于等于數組長度,則拋出異?;騽討B增加容量;

從最后一個元素開始,向前遍歷到下一個 i A 地方,將它們分別向后移動一個位置;

填入要插入元素的位置i,Watch長度加1。

代碼實現:

public boolean add(E e) {
++this.modCount;
this.add(e, this.elementData, this.size);
return true;
}
public void add(int index, E element) {
this.rangeCheckForAdd(index);
++this.modCount;
int s;
Object[] elementData;
if ((s = this.size) == (elementData = this.elementData).length) {
elementData = this.grow();
}
System.arraycopy(elementData, index, elementData, index + 1, s - index);
elementData[index] = element;
this.size = s + 1;
}
 Copy code 

3.刪除操作

接下來,我們以上面的例子為例。這時,一名警察出現了,對美女說道:“跟我去局。” 女人離開了隊伍。原來,她是個賣火車票的黃牛,裝窮排隊買票。然后排隊的人,都往前邁了一步。這是在線性表的順序存儲結構中刪除元素的過程。

刪除想法:

如果刪除位置不合理,則拋出異常;

移除刪除元素;

從被刪除元素位置遍歷到最后一個元素位置,分別向前移動一個位置;

手表長度減 1。

代碼實現:

public E remove(int index) {
Objects.checkIndex(index, this.size);
Object[] es = this.elementData;
E oldValue = es[index];
this.fastRemove(es, index);
return oldValue;
}
 Copy code 

插入和刪除的時間復雜度。

最好的情況,如果要將元素插入到最后一個位置,或者刪除最后一個元素,此時時間復雜度為O(1),因為不需要移動元素。

最壞的情況,如果要插入元素到第一個位置或者要刪除第一個元素,此時時間復雜度為O(n),因為它向后或向前移動了1個位置之后的所有元素。

至于一般情況,因為元素插入到了第i個A地方,或者刪除了第i個元素,需要移動ni個元素。根據概率原理,在每個位置插入或刪除元素的可能性是相同的,也就是說,位置在前面,移動更多元素,位置向后,移動元素更少。最終平均移動次數等于中間元素的移動次數,乘以(n-1)/2,即O(n)。

分析表明,線性表的順序存儲結構,在存在、讀取數據時,無論在哪里,時間復雜度為零O(1);插入或刪除時,時間復雜度為零O(n)。說明它更適合,元素數量不變,訪問數據的應用也更多。

線性表順序存儲結構的優缺點

優勢 :

無需為表中元素之間的邏輯關系增加額外的存儲空間

您可以快速檢索表格中任何位置的元素

缺點:

插入和刪除操作需要移動大量元素

當延米長度變化較大時,存儲空間的容量難以確定

創造存儲空間“碎片”

以上就是關于“線性表的順序存儲結構詳解”的介紹,大家如果對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的課程內容從入門到精通,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一区二区在线精品免费视频 | 奇米在线视频777 | 四虎2019| 国产极品精频在线观看 | 四虎影视在线看 | 久久久久久国产精品免费 | 天色噜噜噜噜 | 夜夜久久| 久久久成人啪啪免费网站 | 青青青国产成人久久111网站 | 欧美一级毛片欧美毛片视频 | 久久99精品久久久久久水蜜桃 | 性欧美www | 亚洲精品久久久久综合中文字幕 | 69成人影院 | 精品一区精品二区 | 欧美精品一区二区精品久久 | 四虎视频国产精品免费 | 久久月| 一区二区三区四区视频在线观看 | 奇米网在线视频 | 中文字幕视频一区 | 精品久久香蕉国产线看观看亚洲 | 韩日视频在线观看 | 香蕉久久夜色精品国产小说 | 99热5| 毛片福利 | 久久国产美女 | 免费观看黄色小视频 | 国产大陆亚洲精品国产 | 亚洲国产高清美女在线观看 | 亚洲一区二区中文字5566 | www久久只有这里有精品 | 亚洲欧洲国产成人综合一本 | 久草在线中文 | 性做爰片视频毛片 | jizz人妖 | 色婷婷影视 | 五月婷婷激情在线 | 国产99页 | 久久99久久99小草精品免视看 |