关于堆栈的些许面试题型的分析与实现 之 暑假学习记录

本文详细解析了三种不同的堆栈面试题,包括双栈排序、递归排序、判断堆栈序列等,并提供了实现代码。同时介绍了双栈实现队列、双队列实现堆栈及在堆栈中取最小值的相关技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日,看到大家在网上分析了很多关于堆栈的面试题,有些挺有意思,本文将对三种不同类型的堆栈面试题进行分析和实现。其中有部分代码思想是借鉴别人的,我会做专门标准。

类型1:堆栈排序之双栈排序

我认为双栈排序的思想比较精妙,写完代码之后有种静脉被打通的感觉。代码并非复杂,但是需要建立在堆栈的深刻理解的基础上。这个时候就看算法的智慧迸发了。废话不多说,下面阐述下题目以及思路。

假如给定一组序列:2,1,3. 该序列存放在一个栈S1里。

要求对其进行排序。

我们可以采用辅助栈S2,并将排序后的S2返回即可。

(1)伪码:

while s1非空{

temp=s1.pop();

将s2中比TEMP大的元素全部压回S1栈。

将temp压入s2

}

(2)过程

s1                                  s2                       temp            comment                                                                  
2,1,3<>0取出栈顶元素放入temp=3,此时s2为空,入栈
2,1<3>3将S2大于temp的栈顶元素全部入栈S1,并将temp压入S2
2<3>1将S2大于temp的栈顶元素全部入栈S1,并将temp压入S2
2,3<1>3此时temp大于1,将temp入栈s2
 <1,3>2将S2大于temp的栈顶元素全部入栈S1,并将temp压入S2
3<1,2>2 
 <1,2>3temp>s2栈顶元素,将temp压入S2
 <1,2,3>3s1为空,结束
    


(3)代码:(该代码直接在Notepad上打出来,未经过测试)

public static Stack<Integer> StackSort(Stack<Integer> s1){
	Stack<Integer> s2 = new Stack<Integer>();
	int temp = 0;
	while(!s1.isEmpty()){
		temp = s1.pop();
		while(!s2.isEmpty()&&s2.peek()>temp)
			s1.push(s2.pop());
		s2.push(temp);
	}
	return s2;
}
(未完待续)


类型2:堆栈排序之递归

类型3:判断堆栈push序列和pop序列

类型4:双栈实现队列

类型5:双队列实现堆栈

类型6:在堆栈中取最小值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值