日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

表、栈和队列

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

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

?

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

優勢: 查詢高效(可以直接find數組的index)

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

?

?

?

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

?

?

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

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

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

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

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

?

?

for循環和迭代器Iterator對比:

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

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

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

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

?

?

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

?

?

?

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

隊列操作:

?

轉載于:https://www.cnblogs.com/tangh4/p/10630964.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。