您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關java實現棧的數組和鏈表的方法,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
棧的介紹
棧,是一種先進后出(FILO)的線性數據結構,主要操作為入棧和出棧。
棧底:最早進入的元素存放的位置。
棧頂:最后進入元素存放的位置(有些棧中將棧頂表示為棧頂元素的下一位置)。
棧的數組的實現
示例如下:
public class MyStack { private int[] array; private int top = -1;//用top來表示棧頂,指向棧頂元素 public MyStack(int capacity){ array = new int[capacity]; } public void push(int data) throws Exception{ if(top >= array.length-1) throw new IndexOutOfBoundsException("邊界超過范圍!"); else array[++top] = data;//先將指針上移,后賦值 } public int pop() throws Exception{ int temp; if(top < 0) throw new IndexOutOfBoundsException("棧為空,不能再刪除元素!"); else{ temp = array[top]; array[top--] = 0; } return temp; } public void output(){ for(int i = 0; i <= top; i++){ System.out.println(array[i]); } } public static void main(String[] args) throws Exception{ MyStack myStack = new MyStack(5); myStack.push(1); myStack.push(3); myStack.push(2); myStack.pop(); myStack.push(4); myStack.pop(); myStack.output(); } }
棧的鏈表實現
棧用鏈表來實現時,和數組實現不同的是,在出棧時,因為我們只有一個top節點來指向棧頂,因此需要從頭到尾遍歷一遍,來找到棧頂的前一個位置。
具體的實現如下:
public class MyStack_LinkList { private static class Node{ int data; Node next; Node(int data){ this.data = data; } } private Node head;//定義鏈表的頭結點 private Node top; private int size;//定義棧中的元素個數 private int maxSize; private MyStack_LinkList(int capacity){ maxSize = capacity; } public void push(int data) throws Exception{ if(size >= maxSize){ throw new IndexOutOfBoundsException("棧已滿,不能再入棧!"); } Node pushedNode = new Node(data); if(size == 0){ head = pushedNode; top = pushedNode; pushedNode.next = null; } else{ top.next = pushedNode; pushedNode.next = null; top = pushedNode; } size++; } public int pop() throws Exception{ int temp = 0; if(size <= 0) throw new IndexOutOfBoundsException("棧為空,不能再出棧!"); else if(size == 1){//當棧中元素個數為1時,單獨討論,需將頭節點置為空 temp = top.data; top = null; } else{ temp = top.data; top = get(size - 1);//此時需遍歷一遍鏈表,用top指向需出棧的上一個節點 top.next = null; } size--; return temp; } /* 從頭到尾查找元素 */ public Node get(int index){ Node temp = head; for(int i = 1; i < index; i++){ temp = temp.next; } return temp; } public void output(){ Node temp = head; for(int i = 0; i < size; i++){ System.out.println(temp.data); temp = temp.next; } } public static void main(String[] args) throws Exception{ MyStack_LinkList myStack_linkList = new MyStack_LinkList(5); myStack_linkList.push(1); myStack_linkList.push(2); myStack_linkList.pop(); myStack_linkList.push(3); myStack_linkList.push(5); myStack_linkList.output(); } }
棧的應用場景
(1)括號匹配判斷,用于判斷()、{}等是否匹配;
(2)進制轉換時,逆向輸出轉換后的數;
(3)實現遞歸的邏輯可以用棧來實現;
(4)棧還可以用于面包屑導航,使用戶在瀏覽頁面時可以輕松地回溯到上一級或更上一級頁面。
上述就是小編為大家分享的java實現棧的數組和鏈表的方法了,如果您也有類似的疑惑,不妨參照上述方法進行嘗試。如果想了解更多相關內容,請關注億速云行業資訊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。