栈是限制插入和删除只能在一个位置上进行的线性表,其中,允许插入和删除的一端位于表的末端、叫做栈顶,不允许插入和删除的另一端叫做栈底。对栈的基本操作有PUSH(压栈)和POP(出栈),前者相当于表的插入操作(向栈顶插入一个元素),后者则是删除操作(删除一个栈顶元素),栈是一种先进后出的数据结构,最先被删除的是最近压栈的元素。

栈实现:

由于栈是一个表,因此任何实现表的方法都可以用来实现栈,主要有两种方法:1.数组、2.链表实现

数组实现栈:

使用数组实现的栈叫做静态栈

package pers.quan;

import java.util.Arrays;

public class Stack {
//    数组 -  栈
    private int maxStack;  // 栈大小
    private int ArrayStack[]; // 数组模拟一个静态栈 (栈:先进后出的结构)
    private int stackTop = -1; // 栈顶(默认情况下)
    public Stack(int maxStack) {
        this.maxStack = maxStack;
        ArrayStack = new int[maxStack];
    }

//    判断是否是空栈
    public boolean isempty() {
        return stackTop == -1;
    }


//    判断是否是满栈
    public boolean isFull() {
       return stackTop == (maxStack -1);
    }

//    压栈
    public void push(int num) {

        if (!isFull()) {
            ArrayStack[++stackTop] = num;
        } else
        throw new RuntimeException("栈满!!");
    }

//    弹栈
    public int pop() {
        if (!isempty()) {
            return ArrayStack[stackTop--];
        } else
        throw new RuntimeException("弹栈异常");
    }

    @Override
    public String toString() {
        return "Stack{" +
                "maxStack=" + maxStack +
                ", ArrayStack=" + Arrays.toString(ArrayStack) +
                ", stackTop=" + stackTop +
                '}';
    }
}

使用栈练习回文数

package pers.quan.test;

import pers.quan.Stack;

public class exer1 {
    /**
     * 给一个数字或者单词使用栈判断是否是一个回文数
     */
    public static void main(String[] args) {
        exer1 exer1 = new exer1();
        boolean ret1 = exer1.judge("abc");
        boolean ret2 = exer1.judge("121");
        boolean ret3 = exer1.judge("aba");
        System.out.println(ret1);
        System.out.println(ret2);
        System.out.println(ret3);
    }
    public boolean judge(String word) {
        Stack stack = new Stack(10);
        int len = word.length();
            for (int i = 0; i < len; i++) {
                if (!stack.isFull()) {
                    stack.push(word.charAt(i));
                }
            }
        String ret = "";
        for (int i = 0; i < len; i++) {
            char temp = (char)stack.pop();
            ret += temp;
        }
        if (word.equals(ret)) {
            return true;
        } else {
            return false;
        }

    }
}

使用栈实现计算器

文章目录