伍六七带你学算法——栈的使用
程序员文章站
2022-05-08 17:29:55
...
大家都知道栈这种数据结构,它有非常多的应用场景。但如果我们不经常接触这些应用场景的话,就可能不太熟悉栈的用法。
1.栈的创建和使用
JAVA Stack类:
栈是Vector的一个子类,它实现了一个标准的后进先出的栈,栈本身最重要的就是 push 和 pop.
堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法
Stack()
除了由Vector定义的所有方法,自己也定义了一些方法:
序号 方法描述
1 boolean empty()
测试堆栈是否为空。
2 Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
3 Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
4 Object push(Object element)
把项压入堆栈顶部。
5 int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。
用栈Stack 创建对象(类型不同)
Stack<Integer> stack = new Stack<>();
Stack<Character> stack = new Stack<>();
2.栈的实际应用示范
这是一道力扣题,这道题我们使用栈来进行解决,其中就用到了我们栈
的基础用法
解题如下????
public class _09_回文数 {
public static boolean isPalindrome(int x) {
//如果是负数 直接返回
if(x<0) return false;
//如果是个位数 直接返回
if(x<10) return true;
//将该数字转化为字符串
String s = Integer.toString(x);
//新建一个栈(后进先出)
Stack v = new Stack();
//定义字符串长度的变量,后面会频繁用到
int length = s.length();
//如果字符串长度为奇数,剔除中间元素
if(length%2!=0) s=s.substring(0, length/2)+s.substring(length/2+1);
//将第一个元素直接入栈
v.push(s.charAt(0));
//开始循环遍历字符串
for(int i = 1;i<length;i++){
//如果遍历过半,则进行判断进行出栈操作
if(i+1>length/2){
//如果栈顶元素与当前元素相同,则出栈
if(v.peek().equals(s.charAt(i))){
v.pop();
}else {
return false;
}
//若遍历未过半,则继续将元素添加进栈
}else{
v.push(s.charAt(i));
}
}
if(v.isEmpty()){
return true;
}else {
return false;
}
}
//test
public static void main(String[] args) {
System.out.println(isPalindrome(11));
}
}
以上!