JZ5 用两个栈实现队列

做这个题目先要了解栈这义数据结构

栈为先进后出的数据结构,以及它的基本方法

addAll()栈之间所有元素的复制

如 stack3.addAll(stack2)将栈2的元素复制到栈3

removeAllElements()清空栈中的所有元素

empty判断栈是否为空

解题思路:

栈为后进先出

队列为先进先出

当不考虑在出栈的时候有数据的放入,数据先存入栈1中,然后再从栈1pop出存入栈2中,这样栈2中数据出栈方式就和队列一样了,先进先出,当中途有数据进栈时,还需要先建一个栈,保存栈2中的数据,清空栈2,加载栈1 pop()出的数据,栈2再从栈3复制所有的数据。

代码如下:

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
    
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
    Stack<Integer> stack3 = new Stack<Integer>();
        stack3.addAll(stack2);
        stack2.removeAllElements();
        while(!stack1.empty()){
            stack2.add(stack1.pop());
        }
        stack2.addAll(stack3);
        return stack2.pop();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用8086汇编语言实现从键盘输入5个数求平均值的程序: ```assembly .MODEL SMALL .STACK 100H .DATA COUNT DB 5 ; 用于控制循环次数的计数器 SUM DW 0 ; 用于存储输入的5个数的总和 AVG DW 0 ; 用于存储计算出的平均值 PROMPT DB '请输入第$个数:$' ; 提示语句 .CODE MAIN PROC MOV AX, @DATA ; 初始化数据段寄存器 MOV DS, AX MOV CX, COUNT ; 初始化计数器 MOV BX, 0 ; 初始化偏移量 ; 循环读取输入的5个数 INPUT_LOOP: INC BX MOV DL, BL ADD DL, '0' MOV AH, 09H MOV DX, OFFSET PROMPT INT 21H MOV AH, 01H INT 21H SUB AL, '0' MOV AH, 0 MOV DL, 0AH MOV DH, 00H DIV DL ADD SUM, AX LOOP INPUT_LOOP ; 计算平均值并输出 MOV AX, SUM MOV BX, COUNT MOV DX, 0 DIV BX MOV AVG, AX MOV AX, AVG CALL PRINT_NUM MOV AH, 4CH ; 程序结束 INT 21H MAIN ENDP ; 打印数字子程序 PRINT_NUM PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV CX, 0 ; 初始化计数器 MOV BX, 10 ; 除数 ; 计算位数 CALC_DIGIT: INC CX DIV BX TEST AX, AX JZ PRINT_LOOP JMP CALC_DIGIT ; 打印数字 PRINT_LOOP: XOR AH, AH MOV DL, 0AH DIV DL ADD AX, '0' PUSH AX INC CX TEST DX, DX JZ PRINT_NUM JMP PRINT_LOOP ; 输出数字 PRINT_NUM: POP DX MOV BX, 0 ; 初始化偏移量 MOV CX, 0 ; 初始化计数器 CMP AX, 0 JGE POSITIVE_NUM NEG AX MOV AH, 02H MOV DL, '-' INT 21H POSITIVE_NUM: CALL PRINT_NUM POP DX POP CX POP BX POP AX RET PRINT_NUM ENDP END MAIN ``` 这个程序的思路很简单,就是通过循环读取5个数并累加求和,最后再除以5计算平均值并输出。在读取每个数的时候,使用了一个字符串模板来输出提示语句,并根据计数器的值自动填充提示语句中的“$”符号。在输出数字的时候,使用了一个子程序来计算数字的位数并逐位输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值