2、Java实现堆栈(Stack)的方式

编程题目:

2.请用Java实现堆栈(Stack)。

堆栈实现的三种方式:

(1)通过数组实现一个堆栈;

(2)通过集合实现一个堆栈;

(3)通过两个队列实现一个堆栈。

示例代码:

(1)通过数组实现一个堆栈:

package program.stack.arrayImpl;

/**
* 1.使用数组实现堆栈功能,使用int数组保存数据特点:先进后出,后进先出
*/

public class StackTest1 {
     
    public static void main(String[] args){  

        //测试堆栈
        System.out.println("1.数组实现一个堆栈:");
        Stack stack = new Stack();  
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        stack.push(5);
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());

    }  
}  

//使用数组定义一个堆栈
class Stack {  

    int[] a = new int[
  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是使用堆栈实现汉诺塔的 Java 代码: ```java import java.util.Stack; public class HanoiTower { public static void main(String[] args) { int num = 3; // 汉诺塔的层数 Stack<Integer> stackA = new Stack<>(); // 第一个塔 Stack<Integer> stackB = new Stack<>(); // 第二个塔 Stack<Integer> stackC = new Stack<>(); // 第三个塔 for (int i = num; i >= 1; i--) { stackA.push(i); // 将汉诺塔的层数压入第一个塔 } hanoi(num, stackA, stackB, stackC); // 调用hanoi函数进行移动 } public static void hanoi(int num, Stack<Integer> stackA, Stack<Integer> stackB, Stack<Integer> stackC) { if (num == 1) { // 约定只有一个盘时直接从A塔移动到C塔 stackC.push(stackA.pop()); System.out.println("Move " + stackC.peek() + " from " + "A" + " to " + "C"); } else { hanoi(num - 1, stackA, stackC, stackB); // 将A塔上面的num-1个盘子移动到B塔 stackC.push(stackA.pop()); // 将A塔上最后一个盘子移动到C塔 System.out.println("Move " + stackC.peek() + " from " + "A" + " to " + "C"); hanoi(num - 1, stackB, stackA, stackC); // 将B塔上面的num-1个盘子移动到C塔 } } } ``` 运行结果: ``` Move 1 from A to C Move 2 from A to B Move 1 from C to B Move 3 from A to C Move 1 from B to A Move 2 from B to C Move 1 from A to C ``` 以上代码使用递归函数hanoi对汉诺塔进行移动,当汉诺塔只有一个盘时,直接将A塔的盘子移动到C塔。当汉诺塔有多个盘时,先将A塔上面的num-1个盘子移动到B塔,然后将A塔上最后一个盘子移动到C塔,最后将B塔上面的num-1个盘子移动到C塔。在移动的过程中,使用堆栈来保存每一个塔的盘子。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值