Java基于鏈表實(shí)現(xiàn)棧的方法詳解
本文實(shí)例講述了Java基于鏈表實(shí)現(xiàn)棧的方法。分享給大家供大家參考,具體如下:
在上幾小節(jié)中我們實(shí)現(xiàn)了基本的鏈表結(jié)構(gòu),并在上一節(jié)的底部給出了有關(guān)鏈表的源碼,此處在貼一次吧,猛戳
在開始棧的實(shí)現(xiàn)之前,我們再來看看關(guān)于鏈表的只在頭部進(jìn)行的增加、刪除、查找操作,時間復(fù)雜度均為O(1),基于鏈表的這幾個優(yōu)勢,我們在此基礎(chǔ)上實(shí)現(xiàn)棧。

前言,在寫本小節(jié)之前,我們已經(jīng)實(shí)現(xiàn)了一個基于靜態(tài)數(shù)組的棧,轉(zhuǎn)到查看。此處我們實(shí)現(xiàn)基于鏈表的棧。
1.鏈表類拷貝到Stack 包下:
在實(shí)現(xiàn)基于靜態(tài)數(shù)組的棧的時候,我們已經(jīng)新建了一個package,此時我們將已經(jīng)實(shí)現(xiàn)的鏈表類拷貝到該package下,目錄結(jié)構(gòu)為:

2.實(shí)現(xiàn)棧
新建一個LinkedListStack類,實(shí)現(xiàn)Stack接口,相關(guān)代碼如下:
Stack接口:
package Stack;
public interface Stack<E> {
//棧中元素個數(shù)
int getSize();
//棧中元素個數(shù)是否為空
boolean isEmpty();
//進(jìn)棧
void push(E e);
//出棧
E pop();
//查看棧頂元素
E peek();
}
個LinkedListStack類:
package Stack;
public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> list;
public LinkedListStack() {
list = new LinkedList<E>();
}
//棧中元素個數(shù)
@Override
public int getSize() {
return list.getSize();
}
//棧中是否為空
@Override
public boolean isEmpty() {
return list.isEmpty();
}
//在棧中添加元素
@Override
public void push(E e) {
list.addFirst(e);
}
//從棧中刪除第一個元素
@Override
public E pop() {
return list.removeFirst();
}
//查看棧中第一個元素
@Override
public E peek() {
return list.getFirst();
}
//主要是便于輸出給對象信息
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: top ");
res.append(list);
return res.toString();
}
}
3.添加測試代碼
為了測試的簡單,我們在已經(jīng)實(shí)現(xiàn)了Stack接口的LinkedListStack類中建立以main()方法,main中代碼如下:
//測試
public static void main(String[] args) {
LinkedListStack<Integer> stack = new LinkedListStack<Integer>();
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println(stack);
}
System.out.println("出棧一個元素:");
stack.pop();
System.out.println(stack);
}
結(jié)果為:

到此我們實(shí)現(xiàn)了底層是鏈表的棧。
關(guān)于本小節(jié),若您覺得還行、還過得去,記得給個推薦哦~,謝謝!!
本節(jié)源碼 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
IntelliJ IDEA 設(shè)置代碼提示或自動補(bǔ)全的快捷鍵功能
這篇文章主要介紹了IntelliJ IDEA 設(shè)置代碼提示或自動補(bǔ)全的快捷鍵功能,需要的朋友可以參考下2018-03-03
MyBatis-Plus中使用EntityWrappe進(jìn)行列表數(shù)據(jù)倒序設(shè)置方式
這篇文章主要介紹了MyBatis-Plus中使用EntityWrappe進(jìn)行列表數(shù)據(jù)倒序設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
httpclient ConnectionHolder連接池連接保持源碼解析
這篇文章主要為大家介紹了httpclient ConnectionHolder連接池連接保持源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)
本篇文章主要介紹了java實(shí)現(xiàn)excel和txt文件互轉(zhuǎn)的相關(guān)知識。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
SpringBoot @value注解動態(tài)刷新問題小結(jié)
@Value注解 所對應(yīng)的數(shù)據(jù)源來自項(xiàng)目的 Environment 中,我們可以將數(shù)據(jù)庫或其他文件中的數(shù)據(jù),加載到項(xiàng)目的 Environment 中,然后 @Value注解 就可以動態(tài)獲取到配置信息了,這篇文章主要介紹了SpringBoot @value注解動態(tài)刷新,需要的朋友可以參考下2023-09-09
JAVAEE Filter 過濾器設(shè)置是否緩存實(shí)例詳解
網(wǎng)頁中,每次的客戶端訪問服務(wù)器,有部分不用重復(fù)請求的,這樣可以減輕服務(wù)器的工作量。那么如何設(shè)置客戶端是否都緩存呢?接下來通過本文給大家介紹JAVAEE Filter 過濾器設(shè)置是否緩存的實(shí)例,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
IDEA 項(xiàng)目創(chuàng)建Mapper的xml文件的方法
這篇文章主要介紹了IDEA 項(xiàng)目創(chuàng)建Mapper的xml文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11

