栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈

要求:

一个栈依次压入1、2、3、4、5,即从栈顶到栈底分别为5、4、3、2、1。将这个栈转置之后,从栈顶到栈底为1、2、3、4、5,也就是完成栈的逆序。

只能用递归函数来实现,不能使用其他的数据结构。

思考:

我们可以设计两个递归函数,一个保证每次返回的是栈底的数,另外一个就是对栈进行反转。

实验代码:

<pre name="code" class="java">package algorithm_3;
import java.util.*;
public class algorithm_3 {
public static int getAndRemoveLastElement(Stack<Integer> stack){

	int result = stack.pop();
	if(stack.isEmpty()){
		return result;
	}
	else{
		int last  = getAndRemoveLastElement(stack);
		stack.push(result);
		return last;
	}
}
public static void reverse(Stack<Integer> stack){
	if(stack.isEmpty()){
		return;
	}
	int i = getAndRemoveLastElement(stack);
	reverse(stack);
	stack.push(i);
}
public static void main(String[] args){
	Stack<Integer> abc;
	abc = new Stack<Integer>();
	for(int i = 1; i<4 ; i++){
	abc.push(i);
	System.out.printf("I push %d in abc\n",i);
	}
	
	reverse(abc);
	System.out.printf("Changed...\n");
	for(int i = 1; i<4;i++)
	{System.out.printf("Stack abc[%d] is %d\r",i,abc.pop());
	}
}
}


 测试结果: 



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值