数据结构之栈
首先我们先观看一下百度词条中的解释:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
基本算法
基本模型
- 进栈(PUSH)算法
①若TOP≥n时(n为a(n)中的参数n),则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(TOP为栈指针)(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素); - 退栈(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编写测试类 这里参考:
最终展示结果为: