栈的基本操作和使用示例(java)

Posted yuwenS.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的基本操作和使用示例(java)相关的知识,希望对你有一定的参考价值。

栈(stack)又名堆栈,它一种拥有先进后出特点的线性表数据结构。有栈顶和栈底,能插入数据的称为栈顶,另一端不能插入数据的为栈底。向栈中插入新数据称为进栈、入栈或压栈,插入的这个新数据把之前的栈顶元素替代成为新栈顶的元素;从栈里删除一个元素称为出栈或退栈,这个是把栈顶元素删除,将栈顶元素下方的第一个元素成为新栈顶元素。

代码实现

栈一般会有三个操作

  1. push 入栈:向栈中添加数据
  2. pop 出栈:从栈中删除数据
  3. peek 返回栈顶数据

具体实现

public class ArrayStack {
    //栈的大小
    private int maxStack;

    //数组用来模拟栈
    private int[] stack;

    //表示栈顶所在位置,默认没有数据时,使用-1
    private int top = -1;
    public ArrayStack(int maxStack){
        this.maxStack = maxStack;
        stack = new int[maxStack];
    }

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

    //判断是否是空栈
    public boolean isEmpty(){
        return this.top == -1;
    }

    //压栈
    public void push(int val){
        //是否满栈
        if (isFull()){
            throw new RuntimeException("此栈已满");
        }
        top++;
        stack[top] = val;
    }

    //出栈
    public int pop(){
        if (isEmpty()){
            throw new RuntimeException("这是个空栈");
        }
        int value = stack[top];
        top--;
        return value;
    }

    //查看栈中所有元素
    public void list(){
        if (isEmpty()){
            throw new RuntimeException("这是个空栈");
        }
        for (int i = 0; i < stack.length; i++) {
            System.out.println("第"+i+1+"个数: "+stack[i]);
        }
    }
    
    //获取栈顶数据
    public int peek(){
        return this.stack[top];
    }
    
	//栈中有多少数据
    public int length(){
        return this.top+1;
    }
}

使用示例

用栈来判断一个字符串是否为回文

代码实现依据上面栈的操作来实现

public class Test{

    public static void main(String[] args) {
        System.out.println(detecation("helloworld"));
        System.out.println(detecation("abccba"));
    }
    
    //判断输入的字符是否为回文
    public static boolean detecation(String val){
    
        // 初始化对象
        ArrayStack arrayStack = new ArrayStack(10);
        
        //获取字符串的长度
        int length = val.length();
        
        //把字符串数据压入栈中
        for (int i = 0; i < length; i++) {
            arrayStack.push(val.charAt(i));
        }
        String str = "";
        int length1 = arrayStack.length();
        
        //把数据从栈中读取出来
        for (int i = 0; i < length1; i++) {
            if (!arrayStack.isEmpty()){
                str += (char)arrayStack.pop();
            }
        }
        return val.equals(str);
    }
}

运行结果
运行结果

总结

  • 栈中的数据是先进后出方式出栈的
  • 栈中添加或删除数据都只能从栈顶操作

以上是关于栈的基本操作和使用示例(java)的主要内容,如果未能解决你的问题,请参考以下文章

LockSupport.java 中的 FIFO 互斥代码片段

html PHP代码片段: - AJAX基本示例:此代码演示了使用PHP和JavaScript实现的基本AJAX功能。

第三节1:Java集合框架之栈Stack

java堆和栈的理解

Java线程栈的获取和分析

Java中栈的使用