定义栈的数据结构,在该类型中实现一个能够得到栈最小元素的min函数,且不破坏栈的原有结构,输出栈中最小值(可运行)

本文介绍了如何在栈数据结构中实现一个min函数,该函数能获取栈中的最小元素,同时保持栈的原始状态。通过比较栈顶元素与当前最小值,并在适当情况下更新最小值,将值存储到列表中,最后利用反转操作恢复栈的顺序。
摘要由CSDN通过智能技术生成

解析:先将栈顶元素赋值给mini变量,然后做一个判断,只要栈顶元素小于该值就将值赋给mini然后弹出,大于或者等于也弹出,弹出之前将值存放在list集合中,最后还原栈时,用Collection.reverse()函数对list进行反转(后进先出原则)。

package offerPractical;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class StackMini {

	// 控制台输入字符串转换整形数组
	public int[] translate(String str) {

		String[] emmer = str.split(",");
		int[] sum = new int[emmer.length];
		for (int i = 0; i < emmer.length; i++) {
			sum[i] = Integer.parseInt(emmer[i]);
		}
		return sum;
	}

	public static void main(String[] args) {
		StackMini stackmini = new StackMini();
		System.out.println("请输入一串数组,数字之间用逗号隔开,该数组为树组元素进栈顺序");
		Scanner in = new Scanner(System.in);
		int[] sum = stackmini.translate(in.next());

		Stack<Integer> stack = new Stack<>();
		for (int i = 0; i < sum.length; i++) {
			stack.push(sum[i]);
		}

		List<Integer> list = new ArrayList<Integer>();
		//第一次先将栈顶元素给mini,如果栈顶元素小于mini,则将小的栈顶元素值赋给mini
		int mini = stack.peek();
		while (!stack.empty()) {
			list.add(stack.peek());
			if (mini > stack.peek()) {
				mini = stack.peek();
				stack.pop();
			} else {
				stack.pop();
			}

		};

		// 根据先进后出原则,还原栈,验证输出list
		Collections.reverse(list);
		stack.addAll(list);
		for (Integer integer : list) {
			System.out.println(integer);
		}
		// 输出结果
		System.out.println("栈中最小元素值为" + mini);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值