日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 實現棧的三種方式

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

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

一、采用數組實現棧

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

import java.util.Arrays;/** * 數組實現棧 * @param <T> */class Mystack1<T> { //實現棧的數組 private Object[] stack; //數組大小 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()); }}

二、采用鏈表實現棧

/** * 鏈表實現棧 * * @param <T> */class Mystack2<T> { //定義鏈表 class Node<T> { private T t; private Node next; } private Node<T> head; //構造函數初始化頭指針 Mystack2() { head = null; } //入棧 public void push(T t) { if (t == null) { throw new NullPointerException('參數不能為空'); } 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實現棧

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

import java.util.LinkedList; /** * LinkedList實現棧 * * @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使用兩種方式實現簡單棧

兩種棧的不同點

基于數組實現的棧需要指定初始容量,棧的大小是有限的(可以利用動態(tài)擴容改變其大?。阪湵韺崿F的棧則是沒有大小限制的。

基于數組實現棧

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

/** * 以數組為底層實現棧 * @param <T> */public class MyStackOfArray<T> { private Object[] data;//底層數組 private int maxSize = 0;//棧存儲的最大元素個數 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); } } //入棧,棧頂指針先加一再填入數據 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()); } }}

基于鏈表實現棧

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

/** * 鏈表方式實現棧 * @param <E> */public class MyStack<E> { /** * 內部節(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); } }}

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲特级毛片| 在线免费观看亚洲| 久久国产乱子精品免费女| 蜜臀精品一区二区三区在线观看 | 午夜亚洲福利在线老司机| 亚洲天堂成人| 午夜久久美女| 免费看黄色91| 国产探花一区在线观看| 美女尤物国产一区| 福利一区视频| 蜜桃精品在线| 亚洲午夜视频| 亚洲男女自偷自拍| 综合一区在线| 国产精品久久国产愉拍| 国产中文字幕一区二区三区| 精品入口麻豆88视频| 欧美国产一级| 91精品精品| 午夜在线播放视频欧美| 亚洲精品在线国产| 欧美a在线观看| 久久久久网站| 免播放器亚洲一区| 国产精品一区二区三区av麻| 久久97视频| 中文字幕系列一区| 美女精品在线| 国产精品日韩精品在线播放 | 高清久久一区| 黑丝一区二区三区| 亚洲综合色婷婷在线观看| 国产精品主播| 日韩大片在线播放| 视频一区国产视频| 国产另类在线| 欧美日韩一二| 日本一区中文字幕| 精品国产乱码久久久久久樱花| 婷婷激情一区| 亚洲影院天堂中文av色| 欧美激情99| 婷婷亚洲五月| 欧美亚洲二区| 久久中文视频| 91亚洲精品在看在线观看高清| 麻豆国产精品一区二区三区| 久久精品卡一| 欧美黄页在线免费观看| 婷婷综合五月| 欧美激情网址| 尤物网精品视频| 国产精品白丝久久av网站| 亚洲国产影院| 欧美成人午夜| 国产精品久久久久9999高清| 免费观看不卡av| 国产精品三级| 国产精品嫩草99av在线| 麻豆久久一区| 久久亚洲欧美| 免费在线欧美黄色| 影音先锋久久| 国产96在线亚洲| 亚洲欧美久久精品| 日本少妇一区| 国产精品www.| 国产午夜久久| 日韩成人精品一区| 日韩综合一区二区| 99精品一区| 欧美国产极品| 亚洲专区视频| 蜜桃tv一区二区三区| 久久91视频| 亚洲18在线| 欧美成人基地| 国产精品.xx视频.xxtv| 亚洲午夜久久| 欧美成人精品| 国产精品蜜芽在线观看| 欧美久久香蕉| 日韩精品一二区| 国内激情久久| 一区二区三区四区日本视频| 久久国产婷婷国产香蕉| 一区视频在线| 九色porny丨国产首页在线| 久久99久久久精品欧美| 亚洲精品自拍| 国产亚洲激情| 久久九九精品| 欧美亚洲综合视频| 日韩午夜黄色| 99精品在线免费在线观看| 国产一区二区三区精品在线观看| 日韩av电影一区| 蘑菇福利视频一区播放| 99久久激情| 天堂av在线| 成人影视亚洲图片在线| 麻豆国产91在线播放| 国产伦精品一区二区三区视频| 日韩精品中文字幕一区二区| 免费看黄色91| 久久av一区二区三区| 午夜精品亚洲| 日韩影院二区| 超碰超碰人人人人精品| 国产精选在线| 激情国产在线| 成人一区不卡| 精品国产鲁一鲁****| 久久久久亚洲精品中文字幕| 国产精品白丝久久av网站| 国产精品99精品一区二区三区∴| 国产精品一级| 国产精品免费99久久久| 国产欧美一区二区精品久久久 | 久久国产精品色av免费看| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 欧美一区二区三区高清视频| 欧美日韩视频网站| 电影亚洲精品噜噜在线观看| 天堂а√在线最新版中文在线| 日韩国产综合| 欧美gv在线| 女人av一区| 国产毛片一区| 亚洲区欧美区| 日本aⅴ免费视频一区二区三区| 日韩福利视频导航| 69堂精品视频在线播放| 国产精品2区| 麻豆视频在线观看免费网站黄| 中文在线а√天堂| 久久久777| 99香蕉国产精品偷在线观看| 热久久免费视频| 日韩和欧美的一区| 欧美激情久久久久久久久久久| 国产精品chinese| 国产探花在线精品| 高清久久一区| 午夜国产一区二区| 亚洲网址在线观看| 国产精品99精品一区二区三区∴| 91亚洲国产高清| 黄色免费成人| 日韩va亚洲va欧美va久久| 麻豆高清免费国产一区| 久久狠狠婷婷| 日韩综合一区二区三区| 精品欠久久久中文字幕加勒比| 欧洲精品一区二区三区| 先锋亚洲精品| 国产欧美一区二区色老头| 国产一区二区三区探花| 欧美日韩在线网站| 中文字幕一区二区三区日韩精品 | 免费不卡在线视频| 国产高清亚洲| 在线一区视频观看| 亚洲一区二区三区久久久| 国产精品三级| 99久久婷婷这里只有精品| 噜噜噜躁狠狠躁狠狠精品视频| 欧美伊人久久| 日本一区二区高清不卡| 不卡一区2区| 国产亚洲观看| 亚洲福利久久| 欧美亚洲国产日韩| 秋霞影院一区二区三区| 婷婷成人av| 秋霞国产精品| 伊人久久在线| 日本vs亚洲vs韩国一区三区二区| 国产96在线亚洲| 在线观看亚洲精品福利片| 麻豆精品蜜桃视频网站| 2023国产精品久久久精品双| 日韩精品三级| 国产一区二区视频在线看| 好吊视频一区二区三区四区| 欧美天堂在线| 亚洲午夜黄色| 日韩激情av在线| 1000部精品久久久久久久久| 国产日韩欧美一区| 在线精品小视频| 久久精品国产99国产| 蜜芽一区二区三区| 婷婷综合六月| 国产精品久久久久久久免费软件| 一区二区自拍| 国产一区二区三区久久| 日韩美女国产精品| 91精品国产福利在线观看麻豆|