您的位置:首页 > 科技 > IT业 > 陵园网站建设价格_河南安阳殷都区今天疫情消息_营销广告文案_成品影视app开发

陵园网站建设价格_河南安阳殷都区今天疫情消息_营销广告文案_成品影视app开发

2024/10/6 5:57:28 来源:https://blog.csdn.net/2301_80141037/article/details/142433005  浏览:    关键词:陵园网站建设价格_河南安阳殷都区今天疫情消息_营销广告文案_成品影视app开发
陵园网站建设价格_河南安阳殷都区今天疫情消息_营销广告文案_成品影视app开发

目录

栈的使用

栈的模拟实现

三种考题

改变元素的序列

将递归转化为循环

逆波兰表达式求值


栈的使用

import java.util.Stack;public class Test {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();//构造一个空的栈//入栈stack.push(12);stack.push(23);stack.push(34);stack.push(45);stack.push(56);//将栈顶元素出栈并返回Integer x = stack.pop();System.out.println(x);//获取栈顶元素但是不删除Integer y1 = stack.peek();System.out.println(y1);Integer y2 = stack.peek();System.out.println(y2);//和y1的值是一样的//检测栈是否为空boolean flg = stack.isEmpty();System.out.println(flg);}
}

栈的模拟实现

可以用数组来模拟实现一个栈,用usedSize变量的作用:

1、可以表示当前存放数据的个数

2、可以表示当前存放数据的下标

import java.util.Arrays;public class MyStack {public int[] elem;public int usedSize;public MyStack() {this.elem = new int[10];}public void push(int val) {if (isFull()) {elem = Arrays.copyOf(elem, 2 * elem.length);}elem[usedSize] = val;usedSize++;}public boolean isFull() {return usedSize == elem.length;}public int top() {if (empty()) {return -1;}int oldVal = elem[usedSize - 1];usedSize--;return oldVal;}public boolean empty() {return usedSize == 0;}public int peek() {if (empty()) {return -1;}return elem[usedSize - 1];}
}

三种考题

改变元素的序列

1. 若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的一个出栈序列是()
A: 1,4,3,2    B: 2,3,4,1    C: 3,1,4,2    D: 3,4,2,1


2.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是( )。
A: 12345ABCDE    B: EDCBA54321    C: ABCDE12345    D: 54321EDCBA

将递归转化为循环

比如:逆序打印链表


// 递归方式
void printList(Node head){
if(null != head){
printList(head.next);
System.out.print(head.val + " ");
}
} 
// 循环方式
void printList(Node head){
if(null == head){
return;
} Stack<Node> s = new Stack<>();
// 将链表中的结点保存在栈中
Node cur = head;
while(null != cur){
s.push(cur);
cur = cur.next;
}//将栈中的元素出栈
while(!s.empty()){
System.out.print(s.pop().val + " ");
}
}

逆波兰表达式求值

遇到非符号就入栈,遇到符号,分别将数字出栈到符号的右边和左边,计算结果并将其入栈

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for (int i = 0; i < tokens.length; i++) {String tmp = tokens[i];if (!isOpearation(tmp)) {Integer val = Integer.valueOf(tmp);stack.push(val);} else {Integer val2 = stack.pop();Integer val1 = stack.pop();switch (tmp) {case "+":stack.push(val1 + val2);break;case "-":stack.push(val1 - val2);break;case "*":stack.push(val1 * val2);break;case "/":stack.push(val1 / val2);break;}}}return stack.pop();}public boolean isOpearation(String s) {if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")) {return true;}return false;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com