最近在看数据结构。想要实现四则混合运算。用栈来实现。
去网上看了好些代码(想偷懒来着)结果代码都不全。思路不清晰。
看的难受,最后觉得还是自己写吧。学习嘛,偷懒不得。
栈的本质就是个线性表。结构就是个后进先出的胡同。只能操作线性表表尾元素的插入和删除。
下面是对栈的实现。这些基本是照搬别人的。
package stack;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 栈的实现,先进后出。
*/
public class Stack {
// 初始化数组
public String[] stackArr = new String[16];
// 栈的顶部
int top = -1;
// 出栈操作
public String pop() {
return stackArr[top--];
}
// 进栈操作
public void push(String c) {
// 原数组满了,就扩容1.5倍
if (isFull()) {
resize();
}
stackArr[++top] = c;
}
// 清空栈
public void clear() {
stackArr = null;
top = -1;
}
// 栈的元素个数
public int length() {
return top + 1;
}
// 判断栈是否为空
public boolean isEmpty() {
return top == -1;
}
// 判断栈是否已满
public boolean isFull() {
return top == stackArr.length - 1;
}
// 取栈顶元素
public String peek() {
return stackArr[top];
}
/**
* 数组扩容,1.5倍长度
*/
private void resize() {
String[] temp = new String[stackArr.length * 3 / 2 + 1];
for (int i = 0; i < stackArr.length; i++) {
temp[i] = stackArr[i];
}
stackArr = temp;
}
public void print (){
for (int i = 0; i <= top; i++) {
System.out.print(stackArr[i]);
}
}
}
这里需要讲一下四则混合运算的步骤,
先科普一下后缀表达式:它是波兰的一个哥们想出来的。名字太长不好记,就被后人称为逆波兰表达式了。
中缀表达式:9+ (3-1) * 3+10/ 2
后缀表达式:931一3 * +102/+
1,将中