如何将数组转换为栈?洗牌后卡牌数组转栈并打印栈顶值求助
如何将数组转换为栈并获取栈顶元素?
嘿,这个需求挺典型的!把洗牌后的卡牌数组转成栈,再取出栈顶元素,不同编程语言的实现思路其实很一致——核心就是利用栈「后进先出」的特性,要么直接用语言自带的栈结构来初始化,要么手动把数组元素依次压入栈。我给你几个常用语言的具体实现:
Python 实现
Python里没有专门的栈类,但用列表就能完美模拟栈:列表的append()方法对应栈的压入操作,pop()对应弹出,而且默认操作的都是列表末尾元素(也就是栈顶位置)。
import random # 先初始化一副卡牌数组(这里用1-54代表54张牌) cards = list(range(1, 55)) # 洗牌打乱顺序 random.shuffle(cards) # 直接把数组转成栈(列表模拟)——复制数组即可,列表末尾就是栈顶 card_stack = cards.copy() # 如果你想手动模拟压栈过程,也可以这么写: # card_stack = [] # for card in cards: # card_stack.append(card) # 打印栈顶元素(取列表最后一个元素) print("栈顶卡牌数值:", card_stack[-1])
Java 实现
Java自带Stack类,我们可以把数组转成集合后直接初始化栈,也可以循环压入元素:
import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Stack; public class CardStackDemo { public static void main(String[] args) { // 初始化54张卡牌的数组 Integer[] cards = new Integer[54]; for (int i = 0; i < 54; i++) { cards[i] = i + 1; } // 把数组转成List后洗牌 List<Integer> cardList = Arrays.asList(cards); Collections.shuffle(cardList); // 将List中的元素全部压入栈 Stack<Integer> cardStack = new Stack<>(); cardStack.addAll(cardList); // 手动压栈的写法也很简单: // for (Integer card : cardList) { // cardStack.push(card); // } // 用peek()获取栈顶元素(不会弹出元素,刚好符合你的需求) System.out.println("栈顶卡牌数值:" + cardStack.peek()); } }
小提示
- 不管用哪种语言,数组转栈后,栈顶元素就是数组最后一个被压入的元素——如果是直接复制数组/用集合初始化栈,那栈顶就是原洗牌后数组的最后一个元素。
- 注意区分
peek()和pop():peek()只获取栈顶不删除,pop()会获取并删除栈顶元素,你的需求用peek()就够啦。
内容的提问来源于stack exchange,提问作者Adam Yerden
相关产品推荐
相关产品推荐

