当前位置:首页 > 开发 > 编程语言 > Java > 正文

java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶

发表于: 2012-03-08   作者:bylijinnan   来源:转载   浏览:
摘要: import java.util.Stack; public class ReverseStackRecursive { /** * Q 66.颠倒栈。 * 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。 * 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。 *1. Pop the top element *2. Revers
import java.util.Stack;

public class ReverseStackRecursive {

	/**
	 * Q 66.颠倒栈。
	 * 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。
	 * 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。
	 *1. Pop the top element
	 *2. Reverse the remaining stack
	 *3. Add the top element to the bottom of the remaining stack
	 */
	public static void main(String[] args) {
		ReverseStackRecursive r=new ReverseStackRecursive();
		Stack<Integer> stack=new Stack<Integer>();
		for(int i=0;i<10;i++){
			stack.add(i);
		}
		r.printStack(stack);
		r.reverseStack(stack);
		r.printStack(stack);
	}

	public void reverseStack(Stack<Integer> stack){
		if(!stack.empty()){
			Integer top=stack.pop();
			reverseStack(stack);
			addToBottom(stack,top);
		}
	}
	public void addToBottom(Stack<Integer> stack,Integer ele){
		if(stack.empty()){
			stack.push(ele);
		}else{
			Integer top=stack.pop();
			addToBottom(stack,ele);//important
			stack.push(top);
		}
	}
	public void printStack(Stack<Integer> stack){
		/*
		while(!stack.empty()){
			System.out.print(stack.pop()+",");
		}
		*/
		//we don't remove the elements in the stack.
		for(Integer x:stack){
			System.out.print(x+",");
		}
		System.out.println();
	}
}

java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1
#include<iostream> #include<string> using namespace std; struct LinkStack { int d
2
栈(stack)是简单的数据结构,但在计算机中使用广泛。它是有序的元素集合。栈最显著的特征是LIFO (La
3
栈的基本操作就是出栈和入栈,这两个的时间复杂度都是O(1) 数据结构 typedef struct Stack{ int dat
4
2012/7/9 10:28 栈这种数据结构的特殊性在于”后进先出“,也就是说,事物出现的次序与处理的次序相
5
一.栈 用来保存数据,遵循先进后出的原则。 头文件:#include <stack> 声明一个栈 stack<i
  今天说的是栈与递归的关系,函数的递归调用和普通函数调用是一样的。当程序执行到某个函数时,
题目要求:   用递归颠倒一个栈。   例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1
  对于栈有些问题还不是很熟悉,所以暂时需要些时间去理解,需要多写些代码去体会,,栈还有一个
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序
原文应该也是在JavaEye中的博客,找不到了。 在原文基础了做了增删,以方便理解。 Java中的栈 每当
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号