数据结构之栈

本文介绍了栈这一数据结构的基本概念,包括进栈(PUSH)和退栈(POP)算法,并提供了Java代码实现。通过一个具体的例子展示了如何使用栈来实现字符串的倒序操作,加深了对栈的理解。此外,还提供了测试类以验证代码的正确性。
摘要由CSDN通过智能技术生成

数据结构之栈

首先我们先观看一下百度词条中的解释:

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。

基本算法

基本模型

在这里插入图片描述

  1. 进栈(PUSH)算法
    ①若TOP≥n时(n为a(n)中的参数n),则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
    ②置TOP=TOP+1(TOP为栈指针)(栈指针加1,指向进栈地址);
    ③S(TOP)=X,结束(X为新进栈的元素);
  2. 退栈(POP)算法
    ①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
    ②X=S(TOP),(退栈后的元素赋给X):
    ③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
    若理解以上算法阐述,那么我们就接着进行相关Java代码展示:

数组实现

package com.jdx.stack;

public class Stack {
    /**
     * 栈的大小
     */
    public int maxSize;
    /**
     * 定义栈顶
     */
    public int top;
    /**
     * 定义数组
     */
    public char[] arr;

    /**
     * 初始化
     * @param size
     */
    public Stack(int size) {
        maxSize = size;
        top = -1;
        arr = new char[maxSize];
    }

    public void push(char value) { // 压入数据
        // ++ 在前就是将变量+1
        arr[++top] = value;
    }

    public char pop() { // 弹出数据

        return arr[top--];
    }

    public char peek() { // 访问栈顶元素

        return arr[top];
    }

    public boolean isFull() { // 栈是否满了

        return maxSize - 1 == top;
    }

    public boolean isEmpty() { // 栈是否为空

        return top == -1;
    }
}

利用栈的对象实现字符串的倒叙

package com.jdx.stack;


public class Reversal {
    /**
     * 定义输出的字符串
     */
    String input;
	/**
     * 无参构造
     */
    public Reversal(String input) {
        this.input = input;
    }
    /**
     * 具体实现方法
     */
    public String doReverse() {
        //新建一个 Stack 对象
        Stack s = new Stack(input.length());
        //循环遍历 input 然后压栈操作
        for (int i = 0; i < input.length(); i++) {
        //charAt(i) 函数 是获取字符串中i位置的字符
            s.push(input.charAt(i));
        }
        // 定义一个接收字符串
        String output = "";
        //对 s 进行非空判断
        while (!s.isEmpty()) {
            // 将数据进行栈操作
            output += s.pop();
        }
        //将对象返回
        return output;
    }
}

编写测试类

  @Test
    public void fun() {
        Reversal reversal = new Reversal("的二无一独是都人个每");
        System.out.println(reversal.doReverse());
    }

当然 如果你是初学者 可以访问一下 idea编写测试类 这里参考:
最终展示结果为:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敏姐儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值