成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Java 實現(xiàn)棧的三種方式

瀏覽:5日期:2022-08-19 17:59:37

棧:LIFO(后進先出),自己實現(xiàn)一個棧,要求這個棧具有push()、pop()(返回棧頂元素并出棧)、peek() (返回棧頂元素不出棧)、isEmpty()這些基本的方法。

一、采用數(shù)組實現(xiàn)棧

提示:每次入棧之前先判斷棧的容量是否夠用,如果不夠用就用Arrays.copyOf()進行擴容

import java.util.Arrays;/** * 數(shù)組實現(xiàn)棧 * @param <T> */class Mystack1<T> { //實現(xiàn)棧的數(shù)組 private Object[] stack; //數(shù)組大小 private int size; Mystack1() { stack = new Object[10];//初始容量為10 } //判斷是否為空 public boolean isEmpty() { return size == 0; } //返回棧頂元素 public T peek() { T t = null; if (size > 0) t = (T) stack[size - 1]; return t; } public void push(T t) { expandCapacity(size + 1); stack[size] = t; size++; } //出棧 public T pop() { T t = peek(); if (size > 0) { stack[size - 1] = null; size--; } return t; } //擴大容量 public void expandCapacity(int size) { int len = stack.length; if (size > len) { size = size * 3 / 2 + 1;//每次擴大50% stack = Arrays.copyOf(stack, size); } }} public class ArrayStack { public static void main(String[] args) { Mystack1<String> stack = new Mystack1<>(); System.out.println(stack.peek()); System.out.println(stack.isEmpty()); stack.push('java'); stack.push('is'); stack.push('beautiful'); stack.push('language'); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); System.out.println(stack.peek()); }}

二、采用鏈表實現(xiàn)棧

/** * 鏈表實現(xiàn)棧 * * @param <T> */class Mystack2<T> { //定義鏈表 class Node<T> { private T t; private Node next; } private Node<T> head; //構(gòu)造函數(shù)初始化頭指針 Mystack2() { head = null; } //入棧 public void push(T t) { if (t == null) { throw new NullPointerException('參數(shù)不能為空'); } if (head == null) { head = new Node<T>(); head.t = t; head.next = null; } else { Node<T> temp = head; head = new Node<>(); head.t = t; head.next = temp; } } //出棧 public T pop() { T t = head.t; head = head.next; return t; } //棧頂元素 public T peek() { T t = head.t; return t; } //棧空 public boolean isEmpty() { if (head == null) return true; else return false; }} public class LinkStack { public static void main(String[] args) { Mystack2 stack = new Mystack2(); System.out.println(stack.isEmpty()); stack.push('Java'); stack.push('is'); stack.push('beautiful'); System.out.println(stack.peek()); System.out.println(stack.peek()); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); }}

三、采用LinkedList實現(xiàn)棧

push-----addFirst()pop-------removeFirst()peek-----getFirst()isEmpty-isEmpty()

import java.util.LinkedList; /** * LinkedList實現(xiàn)棧 * * @param <T> */class ListStack<T> { private LinkedList<T> ll = new LinkedList<>(); //入棧 public void push(T t) { ll.addFirst(t); } //出棧 public T pop() { return ll.removeFirst(); } //棧頂元素 public T peek() { T t = null; //直接取元素會報異常,需要先判斷是否為空 if (!ll.isEmpty()) t = ll.getFirst(); return t; } //棧空 public boolean isEmpty() { return ll.isEmpty(); }} public class LinkedListStack { public static void main(String[] args) { ListStack<String> stack = new ListStack(); System.out.println(stack.isEmpty()); System.out.println(stack.peek()); stack.push('java'); stack.push('is'); stack.push('beautiful'); System.out.println(stack.peek()); System.out.println(stack.pop()); System.out.println(stack.isEmpty()); System.out.println(stack.peek()); }}接著分享java使用兩種方式實現(xiàn)簡單棧

兩種棧的不同點

基于數(shù)組實現(xiàn)的棧需要指定初始容量,棧的大小是有限的(可以利用動態(tài)擴容改變其大小),基于鏈表實現(xiàn)的棧則是沒有大小限制的。

基于數(shù)組實現(xiàn)棧

數(shù)組實現(xiàn)棧的主要方法就是標識棧頂在數(shù)組中的位置,初始化時可以將棧頂指向為-1的虛擬位置,元素入棧則棧頂元素加1,出棧則棧頂元素減一,棧的元素容量為棧頂指針當前位置加1,且不能超過底層數(shù)組的最大容量。

/** * 以數(shù)組為底層實現(xiàn)棧 * @param <T> */public class MyStackOfArray<T> { private Object[] data;//底層數(shù)組 private int maxSize = 0;//棧存儲的最大元素個數(shù) private int top = -1;//初始時棧頂指針指向-1 //默認初始化容量為10的棧 public MyStackOfArray(){ this(10); } //初始化指定大小的棧 public MyStackOfArray(int initialSize){ if(initialSize >= 0){ this.maxSize = initialSize; data = new Object[initialSize]; top = -1; }else{ throw new RuntimeException('初始化容量不能小于0' + initialSize); } } //入棧,棧頂指針先加一再填入數(shù)據(jù) public boolean push(T element){ if(top == maxSize - 1){ throw new RuntimeException('當前棧已滿,無法繼續(xù)添加元素'); }else{ data[++top] = element; return true; } } //查看棧頂元素 public T peek(){ if(top == -1) throw new RuntimeException('棧已空'); return (T) data[top]; } //出棧,先彈出元素再將棧頂指針減一 public T pop(){ if(top == -1) throw new RuntimeException('棧已空'); return (T) data[top--]; } //判斷當前棧是否為空,只需判斷棧頂指針是否等于-1即可 public boolean isEmpty(){ return top == -1; } public int search(T element){ int i = top; while (top != -1){ if(peek() != element)top--; elsebreak; } int result = top + 1; top = i; return top; } public static void main(String[] args) { MyStackOfArray<Integer> myStackOfArray = new MyStackOfArray<>(10); for(int i = 0; i < 10; i++){ myStackOfArray.push(i); } System.out.println('測試是否執(zhí)行'); for(int i = 0; i < 10; i++){ System.out.println(myStackOfArray.pop()); } }}

基于鏈表實現(xiàn)棧

基于鏈表實現(xiàn)棧只要注意控制棧頂指針的指向即可。

/** * 鏈表方式實現(xiàn)棧 * @param <E> */public class MyStack<E> { /** * 內(nèi)部節(jié)點類 * @param <E> */ private class Node<E>{ E e; Node<E> next; public Node(){} public Node(E e, Node<E> next){ this.e = e; this.next = next; } } private Node<E> top;//棧頂指針 private int size;//棧容量 public MyStack(){ top = null; } //入棧,將新節(jié)點的next指針指向當前top指針,隨后將top指針指向新節(jié)點 public boolean push(E e){ top = new Node(e, top); size++; return true; } //判斷棧是否為空 public boolean isEmpty(){ return size == 0; } //返回棧頂節(jié)點 public Node<E> peek(){ if(isEmpty()) throw new RuntimeException('棧為空'); return top; } //出棧,先利用臨時節(jié)點保存要彈出的節(jié)點值,再將top指針指向它的下一個節(jié)點,并將彈出的節(jié)點的next指針賦空即可 public Node<E> pop(){ if(isEmpty()) throw new RuntimeException('棧為空'); Node<E> value = top; top = top.next; value.next = null; size--; return value; } //返回當前棧的大小 public int length(){ return size; } public static void main(String[] args) { MyStack<Integer> myStack = new MyStack<>(); for(int i = 0; i < 10; i++){ myStack.push(i); } for(int i = 0; i < 10; i++){ System.out.println(myStack.pop().e); } }}

到此這篇關(guān)于Java 實現(xiàn)棧的三種方式的文章就介紹到這了,更多相關(guān)Java 實現(xiàn)棧內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
制服.丝袜.亚洲.另类.中文| 国产亚洲综合精品| 国内精品嫩模av私拍在线观看| 欧美日韩成人激情| 丝袜亚洲另类欧美| 一本一本久久| 国产精品久久99| 色综合视频一区二区三区高清| 日韩视频在线一区二区| 久久se这里有精品| 夜夜嗨一区二区三区| 国产精品欧美一级免费| 91麻豆精东视频| 精品国产免费一区二区三区四区| 国产精品一二三四| 91精品福利在线一区二区三区 | 亚洲码国产岛国毛片在线| 欧美私人啪啪vps| 亚洲国产高清在线观看视频| 欧美日本亚洲| 国产精品77777竹菊影视小说| 欧美偷拍一区二区| 久久电影网站中文字幕| 日本高清不卡在线观看| 天天影视色香欲综合网老头| 先锋影音久久久| 调教+趴+乳夹+国产+精品| 麻豆精品视频| 青青青爽久久午夜综合久久午夜 | 9色porny自拍视频一区二区| 欧美mv日韩mv| 99久久免费国产| 久久精品这里都是精品| 欧美1区2区3区| 亚洲欧洲国产日韩| 亚洲日韩视频| 亚洲综合图片区| 久久久青草婷婷精品综合日韩| 日韩福利视频导航| 欧美日韩一区二区三区高清| 国产在线精品一区在线观看麻豆| 884aa四虎影成人精品一区| 国产一区二区三区最好精华液| 欧美一区二区三区在线观看| 不卡一二三区首页| 国产精品沙发午睡系列990531| 亚洲精品看片| 性欧美大战久久久久久久久| 欧美影院一区二区| 国产成人午夜片在线观看高清观看| 欧美草草影院在线视频| 91日韩精品一区| 国产精品毛片久久久久久久| 国产欧美短视频| 日本不卡视频一二三区| 日韩一区二区中文字幕| 99vv1com这只有精品| 最新欧美精品一区二区三区| 亚洲一区观看| 捆绑变态av一区二区三区| 欧美一级免费大片| 欧美精品黄色| 久久97超碰色| 久久影音资源网| 日韩一级不卡| 青草av.久久免费一区| 91精品国产色综合久久不卡电影 | 成人久久视频在线观看| 国产精品久久久久久久久免费相片| 国产精品视频免费观看| 精品一区中文字幕| 久久久av毛片精品| 免费视频一区| 国产成人av影院| 中文字幕一区在线观看视频| 久久影院亚洲| 成人一区二区三区在线观看| 国产精品另类一区| 91精品91久久久中77777| 成人av电影在线观看| 亚洲国产精品嫩草影院| 日韩欧美在线不卡| 国产精品推荐精品| 成人国产精品免费观看动漫| 一区二区三区四区激情| 欧美精品黑人性xxxx| 欧美日韩18| 蜜桃久久久久久| 久久一夜天堂av一区二区三区| 免费毛片一区二区三区久久久| 成人av在线一区二区三区| 亚洲一区二区美女| 精品电影一区二区| 久久精品二区| 色综合一区二区| 日本不卡视频在线| 中文字幕av一区二区三区免费看 | 国产精品美女久久久久久久网站| 色呦呦国产精品| 成人激情动漫在线观看| 亚洲一区二区三区四区在线观看| 91精品国产一区二区| 正在播放亚洲| 成人短视频下载| 日韩精品电影在线| 亚洲国产成人一区二区三区| 欧美吻胸吃奶大尺度电影| 在线观看视频日韩| 丁香六月久久综合狠狠色| 亚洲国产色一区| 欧美不卡123| 噜噜噜躁狠狠躁狠狠精品视频| 99久久精品国产毛片| 日韩福利电影在线| 日韩码欧中文字| 日韩视频在线观看一区二区| 麻豆精品91| 伊大人香蕉综合8在线视| 国产高清在线观看免费不卡| 亚洲一区二区三区小说| 久久免费偷拍视频| 日本乱码高清不卡字幕| 亚洲国产一区二区精品专区| 丰满少妇久久久久久久| 日韩精品色哟哟| 亚洲日本在线看| www亚洲一区| 欧美日韩成人综合| 久久福利电影| 欧美久久影院| 国产99久久久国产精品潘金| 亚洲妇熟xx妇色黄| 国产精品私人自拍| 精品免费99久久| 在线亚洲一区二区| 国产日韩欧美一区在线| 欧美黄色精品| 丁香激情综合国产| 狠狠狠色丁香婷婷综合激情| 亚洲成av人片在线| 中文字幕综合网| 国产欧美一区二区三区沐欲| 日韩一级免费观看| 欧美伊人久久久久久午夜久久久久| a91a精品视频在线观看| 国产精品jizz在线观看美国| 成人av先锋影音| 国产美女精品在线| 蜜臀av一区二区| 天堂av在线一区| 亚洲一区成人在线| 亚洲精品视频在线看| 国产精品美日韩| 久久精品男人天堂av| 精品欧美一区二区三区精品久久| 欧美日韩电影在线播放| 日本韩国欧美在线| 久久九九电影| 欧美亚洲色图校园春色| 亚洲国产91| 国产精品vip| 欧美激情无毛| 96av麻豆蜜桃一区二区| 成人一区二区三区视频| 风流少妇一区二区| 国产成人精品免费| 国产黄色成人av| 国产.欧美.日韩| 国产精品99久| 国产精品一级黄| 国产精品亚洲专一区二区三区 | 国产成人午夜电影网| 国产精品一区三区| 国产精品一级黄| 国产美女主播视频一区| 国产麻豆91精品| 另类欧美日韩国产在线| 美腿丝袜亚洲色图| 美女网站一区二区| 久久av老司机精品网站导航| 麻豆精品久久精品色综合| 麻豆专区一区二区三区四区五区| 日韩**一区毛片| 美女脱光内衣内裤视频久久影院| 开心九九激情九九欧美日韩精美视频电影| 天使萌一区二区三区免费观看| 日韩av不卡一区二区| 精品制服美女丁香| 国产精品白丝jk黑袜喷水| 成人av在线观| 欧美精品二区| 亚洲美女毛片| 美女黄色成人网| 欧美天天综合网| 日韩一区二区在线观看视频播放| 日韩精品中文字幕在线不卡尤物| 精品国产免费一区二区三区四区| 国产人成亚洲第一网站在线播放| 国产精品久久久久一区| 一区二区高清在线|