日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

表、栈和队列

發(fā)布時間:2024/4/17 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 表、栈和队列 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

抽象數(shù)據(jù)類型(abstract data type, ADT)是帶有一組操作的一些對象的集合。對于集合ADT, 可以有像添加(add)、刪除(remove)以及包含(contain)這樣一些操作。

?

ArrayList:插入和 刪除的花費存在潛在開銷。最壞的情況下,在位置0的插入,首先需要將整個數(shù)組后移一個位置以空出空間來,而刪除第一個元素則需要將表中的所有元素前移一個位置,因此這兩種操作最壞的情況是O(N)。

優(yōu)勢: 查詢高效(可以直接find數(shù)組的index)

缺陷:插入刪除開銷大(需要將全部數(shù)組移位)

?

?

?

因此,為了避免插入和刪除的線性開銷,就引入了不連續(xù)存儲,增刪不需要整體移動的鏈表。

?

?

鏈表(LinkedList):鏈表由一系列節(jié)點組成,這些節(jié)點不必在內(nèi)存中相連。每一個節(jié)點均含有表元素和包含該元素后繼元的節(jié)點的鏈(Link)。稱其為next鏈。最后一單元的next鏈引用null。

刪除 (remove)方法可以通過修改一個next引用來實現(xiàn)。插入(insert)方法需要使用new操作符從系統(tǒng)取得一個新節(jié)點,再修改next引用。

優(yōu)勢: 查詢效率低(需要從頭開始遍歷)

缺陷:插入刪除高效(不需要全盤移位)

*刪除最后一項比較復雜,因為必須找出指向最后節(jié)點的項,把它的next鏈改成null,然后在更新持有最后節(jié)點的鏈。

?

?

for循環(huán)和迭代器Iterator對比:

??????? 采用ArrayList對隨機訪問比較快,而for循環(huán)中的get()方法,采用的即是隨機訪問的方法,因此在ArrayList里,for循環(huán)較快

??????? 采用LinkedList則是順序訪問比較快,iterator中的next()方法,采用的即是順序訪問的方法,因此在LinkedList里,使用iterator較快

從數(shù)據(jù)結(jié)構(gòu)角度分析,for循環(huán)適合訪問順序結(jié)構(gòu),可以根據(jù)下標快速獲取指定元素.而Iterator 適合訪問鏈式結(jié)構(gòu),因為迭代器是通過next()和Pre()來定位的.可以訪問沒有順序的集合.

??????? 而使用 Iterator 的好處在于可以使用相同方式去遍歷集合中元素,而不用考慮集合類的內(nèi)部實現(xiàn)(只要它實現(xiàn)了 java.lang.Iterable 接口),如果使用 Iterator 來遍歷集合中元素,一旦不再使用 List 轉(zhuǎn)而使用 Set 來組織數(shù)據(jù),那遍歷元素的代碼不用做任何修改,如果使用 for 來遍歷,那所有遍歷此集合的算法都得做相應調(diào)整,因為List有序,Set無序,結(jié)構(gòu)不同,他們的訪問算法也不一樣.(還是說明了一點遍歷和集合本身分離了)

?

?

(stack)是限制插入和刪除只能在一個位置上進行的表,該位置是表的末端,叫作棧的頂(top)。對棧的基本操作有push(進棧)和pop(出棧),前者相當于插入,后者則是刪除最后出入元素。又是又叫作LIFO(后進先出)表。(實現(xiàn)計算的過程)

?

?

?

隊列(queue)也是表。隊列的基本操作是enqueue(入隊),它是在表的末端(rear)插入一個元素,和dequeue(出隊),它是刪除在表的開頭的元素。

隊列操作:

?

轉(zhuǎn)載于:https://www.cnblogs.com/tangh4/p/10630964.html

總結(jié)

以上是生活随笔為你收集整理的表、栈和队列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。