摘要:本文力求簡(jiǎn)潔,只包含基礎(chǔ)的棧功能,不想將大片的代碼展示出來(lái),讓讀者興趣索然,閱讀起來(lái)也十分費(fèi)力,如有需要可以自行添加相關(guān)功能比如包中的類(lèi)包含的,等等函數(shù)能力有限,有誤之處還請(qǐng)不吝賜教定義內(nèi)部類(lèi)用于存儲(chǔ)棧元素指向下一個(gè)棧元素的泛型元素方法方法
本文力求簡(jiǎn)潔,只包含基礎(chǔ)的棧功能,不想將大片的代碼展示出來(lái),讓讀者興趣索然,閱讀起來(lái)也十分費(fèi)力,如有需要可以自行添加相關(guān)功能比如java.util.Stack包中的Stack類(lèi)包含的peek(),empty()等等函數(shù).
能力有限,有誤之處還請(qǐng)不吝賜教
class Node { private Node below; //指向下一個(gè)棧元素的reference private T type; //泛型元素 public Node(Node below, T type) { this.below = below; this.type = type; } }Push()方法
public void push(T element) { if (top == null) { Node node = new Node(null, element); this.top = node; this.base = node; length++; } else { Node node = new Node(top, element); this.top = node; length++; } }pop()方法
public T pop() { if (top != null) { Node temp = top; if (temp.below != null) { top = temp.below; length--; } else { this.base=null; this.top=null; length=0; } return temp.type; } else return null; } public int getLength() { return length; }
整體代碼整體代碼比較簡(jiǎn)單,這里不再贅述,有一定java基礎(chǔ)的應(yīng)該都能夠看懂
public class MyStack{ private Node base; private Node top; private int length = 0; class Node { private Node below; private T type; public Node(Node below, T type) { this.below = below; this.type = type; } } public void push(T element) { if (top == null) { Node node = new Node(null, element); this.top = node; this.base = node; length++; } else { Node node = new Node(top, element); this.top = node; length++; } } public boolean isEmpty(){ if(base==null){ return true; }else return false; } public T pop() { if (top != null) { Node temp = top; if (temp.below != null) { top = temp.below; length--; } else { this.base=null; this.top=null; length=0; } return temp.type; } else return null; } public int getLength() { return length; } @Override public String toString() { StringBuffer sb = new StringBuffer(); Node current = top; while (current != null) { sb = sb.append("/"+current.type); current = current.below; } return sb.toString(); } public static void main(String[] args) { MyStack ms=new MyStack<>(); System.out.println(ms.getLength()); ms.push("value1"); ms.push("value2"); ms.push("value3"); System.out.println(ms.getLength()); System.out.println(ms.pop()); System.out.println(ms.pop()); System.out.println(ms.getLength()); System.out.println(ms.toString()); } }
我的文章列表
Email:[email protected]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66963.html
摘要:棧隊(duì)列雙端隊(duì)列都是非常經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。結(jié)合了棧和隊(duì)列的特點(diǎn)。因此,在中,有棧的使用需求時(shí),使用代替。迭代器之前源碼源碼之與字段中分析過(guò),容器的實(shí)現(xiàn)中,所有修改過(guò)容器結(jié)構(gòu)的操作都需要修改字段。 棧、隊(duì)列、雙端隊(duì)列都是非常經(jīng)典的數(shù)據(jù)結(jié)構(gòu)。和鏈表、數(shù)組不同,這三種數(shù)據(jù)結(jié)構(gòu)的抽象層次更高。它只描述了數(shù)據(jù)結(jié)構(gòu)有哪些行為,而并不關(guān)心數(shù)據(jù)結(jié)構(gòu)內(nèi)部用何種思路、方式去組織。本篇博文重點(diǎn)關(guān)注這三種數(shù)據(jù)結(jié)構(gòu)...
摘要:堆棧算法引子棧是計(jì)算機(jī)術(shù)語(yǔ)中比較重要的概念,實(shí)質(zhì)上棧就是一段內(nèi)存區(qū)域,但是棧滿足一定的特性,那就是只有一個(gè)口,具有先入后出的特性,這種特性在計(jì)算機(jī)中有很廣泛的運(yùn)用。 /** * PHP堆棧算法 * Created on 2017-4-27 * Author entner * Email [email protected] */ 引子 ????棧...
摘要:堆棧算法引子棧是計(jì)算機(jī)術(shù)語(yǔ)中比較重要的概念,實(shí)質(zhì)上棧就是一段內(nèi)存區(qū)域,但是棧滿足一定的特性,那就是只有一個(gè)口,具有先入后出的特性,這種特性在計(jì)算機(jī)中有很廣泛的運(yùn)用。 /** * PHP堆棧算法 * Created on 2017-4-27 * Author entner * Email [email protected] */ 引子 ????棧...
摘要:向一個(gè)棧插入新元素又稱作進(jìn)棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素從一個(gè)棧刪除元素又稱作出棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。 棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素...
閱讀 2750·2023-04-25 22:15
閱讀 1816·2021-11-19 09:40
閱讀 2161·2021-09-30 09:48
閱讀 3236·2021-09-03 10:36
閱讀 2037·2021-08-30 09:48
閱讀 1872·2021-08-24 10:00
閱讀 2739·2019-08-30 15:54
閱讀 714·2019-08-30 15:54