栈
栈
栈是限制插入和删除只能在一个位置上进行的线性表,其中,允许插入和删除的一端位于表的末端、叫做栈顶,不允许插入和删除的另一端叫做栈底。对栈的基本操作有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;
}
}
}
使用栈实现计算器
文章目录
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭