嘻嘻,今天博主终于要更新栈的知识了,上次结束说要更新要是上一次,所以这次咱就把栈的实现的更新带来了,嗯~ o(* ̄▽ ̄*)o小伙伴可能会问,栈能干什么啊,在Java中栈不是有对应的类吗....
栈能够实现逆波兰计算机,中缀表达式转后缀表达式,还有普通中缀计算机等.....
话不多说,我们就从一下几个方面开始吧
栈的概念 ???? 栈的实现思路 ???? 栈的代码实现与分析 ???? 结论
如果喜欢作者的话,戳这
往期精彩:
普通队列与环形队列
private int maxSize; private int top; private Object[] stack; public ArraysStack(int maxSize) { this.maxSize = maxSize; this.top = -1; stack = new Object[maxSize]; }
代码分析:
图解:
public boolean isFull() { return top == maxSize - 1; } public boolean isEmpty() { return top == -1; }
代码分析:
图解:
public void push(E element) { if(isFull()) { System.out.println("栈已满,无法压栈"); return; } stack[++top] = element; } public E pop() throws Exception{ if(isEmpty()) { throw new Exception("栈已空,无法弹栈"); } return (E)stack[top--]; }
代码分析:
图解:
public void print() { if(isEmpty()){ System.out.println("栈已空,无法输出"); return; } for (int i = top; i >= 0; i--) { System.out.println("stack[" + i + "] = " + stack[i]); } }
代码分析:
package datastructure.chapter02.stack.instance; /** * * @param <E> 指定栈存储的元素 */ public class ArraysStack<E> { private int maxSize; private int top; private Object[] stack; /** * 栈(数组实现)的构造方法 * @param maxSize 栈空间的最大值 */ public ArraysStack(int maxSize) { this.maxSize = maxSize; this.top = -1; stack = new Object[maxSize]; } /** * 判断栈是否为满 * @return 若返回值为true,则栈已满,否则为false */ public boolean isFull() { return top == maxSize - 1; } /** * 判断栈是否为空 * @return 若返回值为true,则栈已空,否则为false */ public boolean isEmpty() { return top == -1; } /** * @param element 压入栈的数据 */ public void push(E element) { if(isFull()) { System.out.println("栈已满,无法压栈"); return; } stack[++top] = element; } /** * * @return 返回栈顶数据 * @throws Exception 空栈异常 */ public E pop() throws Exception{ if(isEmpty()) { throw new Exception("栈已空,无法弹栈"); } return (E)stack[top--]; } /** * 输出栈 */ public void print() { if(isEmpty()){ System.out.println("栈已空,无法输出"); return; } for (int i = top; i >= 0; i--) { System.out.println("stack[" + i + "] = " + stack[i]); } } }
栈的知识点简单又重要,代码不多,理解起来也不难,我来总结一下重要的几点:
栈顶top的初始化赋值
栈的压栈和弹栈的方法
????下一站:双向链表!!!