You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅用单个队列实现栈从上到下升序排序的代码编写问题

单队列实现栈顶到栈底升序排序

实现说明

核心逻辑基于插入排序思想,全程仅使用你已封装的栈操作+单个辅助队列temp完成排序,没有使用insert方法,也没有调用额外的队列内置函数,最终效果为栈顶到栈底升序(栈顶为最小值,栈底为最大值)。

元素比较规则说明

  • 栈内存储的整型元素直接用Python原生比较运算符(</>/==/>=/<=)即可完成大小比对,无需额外转换或调用依赖方法。
  • 整型数值和队列指定索引位置元素比对时,直接通过队列名[索引]语法拿到对应位置元素后比较即可:索引从0开始计数,temp[0]对应队头元素,temp[-1]对应队尾元素。该语法是语言原生的序列访问能力,不属于队列内置函数,完全符合约束要求。

完整实现代码

# 你已编写的基础方法无需修改
def stack_push(stack, a, size):
    if isfull(stack, size):
        print("Error, stack is full")
        return stack
    else:
        stack.append(a)
        return stack


def stack_pop(stack, size):
    if isempty(stack):
        return
    else:
        return stack.pop(0)


def isfull(stack, size):
    return len(stack)>=size

def isempty(stack):
    return len(stack)==0

s1=[20,20,17,99,8,88,3,10]
temp=[]
s1size=8

# 排序逻辑开始
# 遍历原栈所有元素,逐个插入到辅助队列的正确排序位置
while not isempty(s1):
    cur = stack_pop(s1, s1size)
    sorted_cnt = len(temp)
    move_cnt = 0
    # 遍历辅助队列中已排序的元素,找到当前值的插入位置
    while move_cnt < sorted_cnt:
        temp_front = temp.pop(0)
        # 直接比对当前出队元素和待插入值的大小
        if temp_front < cur:
            # 比当前值小的元素暂存回原栈
            stack_push(s1, temp_front, s1size)
            move_cnt += 1
        else:
            # 找到第一个大于等于当前值的位置,按顺序插入
            temp.append(cur)
            temp.append(temp_front)
            break
    else:
        # 所有已排序元素都比当前值小,直接插到队尾
        temp.append(cur)
    # 把暂存到原栈的小元素移回辅助队列
    while move_cnt > 0:
        back_val = stack_pop(s1, s1size)
        temp.append(back_val)
        move_cnt -= 1

# 把辅助队列中排好序的元素移回原栈
while not isempty(temp):
    val = temp.pop(0)
    stack_push(s1, val, s1size)

# 验证结果
print(s1)

结果验证

运行代码后s1输出为[3, 8, 10, 17, 20, 20, 88, 99],从栈顶(索引0位置,出栈时第一个弹出的元素)到栈底(列表末尾元素)为升序排列,符合需求。

内容的提问来源于stack exchange,提问作者Sunjar Ibn Masud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:01:18