栈的基本操作与简单应用

栈的基本操作与简单应用

栈的最主要特点是后进先出。

栈是一种运算受限的线性表,限定仅在表尾进行插入和删除操作的线性表。栈的所有插入和删除操作均在栈顶进行,而栈底不允许插入和删除。

向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

img

基本操作代码如下

package com.ma.stack;

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.maxStack-1 == this.top;
    }

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

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


    //弹栈
    public int pop(){
        //1.判断是否为空
        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.printf("stack[%d]=%d\n",i,stack[i]);
        }
    }

    //返回栈的长度
    public int length(){
        return top+1;
    }
}

判断回文代码如下

package com.ma.stack;



public class TestApp {
    public static void main(String[] args) {
        System.out.println(detecation("bab"));

    }

    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 newVal = "";
        int length1 = arraystack.length();
        for (int i = 0; i < length1; i++) {
            //判断是否满栈
            if (!arraystack.isEmpty()){
                char pop = (char) arraystack.pop();
                //将弹出的字符组合成一个新字符
                newVal += pop;
            }
        }
        if (newVal.equals(val)){
            return true;
        }
        return false;
    }
}

        }
    }
    if (newVal.equals(val)){
        return true;
    }
    return false;
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值