-
栈结构特点是在栈顶位置进行元素的增加(入栈)和删除(出栈),栈的底层结构使用的也是数组
/*** 栈的代码实现,应用:波兰中序表达式转后序表达式,并求出表达式的值** @author timmy1 栈的元素操作只在一端(栈顶位置),进行插入和删除-》包含的操作有:元素插入到栈顶push, 删除栈顶元素pop,* 获取栈顶元素peek,搜索元素的位置*/public class MyStack<E> {private int size;private int modSize;private Object[] array;// 栈的底层结构为数组private int DEFAULT_CAPACITY = 10;public MyStack() {array = new Object[DEFAULT_CAPACITY];}/*** 入栈-- 栈顶位置插入元素,即是数组最后的位置** @param e* @return*/public boolean push(E e) {array = judgeIsGrow();array[size] = e;size++;modSize++;return true;}// 判断数组长度是否需要扩容private Object[] judgeIsGrow() {if (array.length == size) {int newSize = size < Integer.MAX_VALUE / 2 ? size * 2 : Integer.MAX_VALUE;Object[] newArray = new Object[newSize];System.arraycopy(array, 0, newArray, 0, size);array = newArray;}return array;}/*** 出栈-- 删除栈顶元素** @return*/public boolean pop() {if (size == 0) {throw new IndexOutOfBoundsException("当前栈元素为空");}array[size - 1] = null;size--;modSize++;return true;}/*** 获取栈顶元素** @return*/@SuppressWarnings("unchecked")public E peek() {if (size == 0)return null;E obj = (E) array[size - 1];modSize++;return obj;}/*** 搜索元素e的位置** @param e* @return*/public int search(E e) {if (e == null) {for (int i = size - 1; i >= 0; i--) {if (array[i] == null) {return size - 1 - i;}}} else {for (int i = size - 1; i >= 0; i--) {if (array[i].equals(e)) {return size - 1 - i;}}}return -1;}public int size() {return size;}public static void main(String[] args) {MyStack<String> myStack = new MyStack<>();for (int i = 0; i < 5; i++) {myStack.push("data " + i);}System.out.println("搜索 " + myStack.search("data 4"));int size = myStack.size();for (int i = 0; i < size; i++) {String data = myStack.peek();System.out.println(data);myStack.pop();}}}
结果打印:
搜索 0
data 4
data 3
data 2
data 1
data 0

被折叠的 条评论
为什么被折叠?



