Python数据结构——栈

本文介绍了栈这种数据结构的概念,重点讲解了栈的特点(后进先出),并用Python实现了一个栈类,包括初始化、判断栈空/满、入栈/出栈和查看栈内元素的操作。此外,还展示了如何使用栈将十进制数转换为二进制数的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

栈(stack):有些地方称为堆栈,是一种容器,一种线性表数据结构,它的特点在于只能允许在容器的一端(称为栈顶端指标,top)进行插入数据(push)和删除数据(pop)的运算。

由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。

我们把栈中允许插入和删除的一段称为栈顶(top);另一端则称为栈底(bottom)。当容器中没有任何数据元素时,称之为空栈。

 下面是一个用python实现的一个栈:

class Stack:
        # 初始化栈
    def __init__(self, n):
        self.nsize = n
        self.s = [0] * (n-1)
        self.top = 0
        # 判断栈是否为空
    def isEmpty(self):
        return self.top == 0
        # 判断栈是否存满
    def isFull(self):
        return self.top == self.nsize
        # 实现入栈操作
    def push(self, a):
        self.top += 1
        self.s[self.top] =a
        # 实现出栈操作
    def pop(self):
        t = self.s[self.top]
        self.top -= 1
        return t
        # 查看栈内元素
    def show(self):
        print(self.s[1:self.top+1])

 图示如下:

栈的基本操作

栈的基本操作如下:

  • 初始化空栈:创建一个空栈,定义栈的大小size,以及栈顶元素指针top。
  • 判断栈是否为空:当堆栈为空时,返回True。当堆栈不为空时,返回False。。一般只用于栈中删除操作和获取当前栈顶元素操作中。
  • 判断栈是否已满:当堆栈已满时,返回True,当堆栈未满时,返回False。一般只用于顺序栈中插入元素和获取当前栈顶元素操作中。
  • 插入元素(进栈、入栈):相当于在线性表最后元素后面插入一个新的数据元素。并改变栈顶指针top的指向位置。
  • 删除元素(出栈、退栈):相当于在线性表最后元素后面删除最后一个数据元素。并改变栈顶指针top的指向位置。
  • 获取栈顶元素:相当于获取线性表中最后一个数据元素。与插入元素、删除元素不同的是,该操作并不改变栈顶指针top的指向位置。

举例

输入一个十进制数,通过栈的特点转换为二进制输出:

方法说明:

1、余数进栈:对于一个大于0的10进制整数,将其不断除2,将余数进栈,直到整数整除2的结果为0时结束
2、结果出栈:将栈里元素输出(注意用while循环,由于出栈操作,s的长度一直在变化,不可用for循环)

代码:

n = int(input('输入十进制数:'))
stack_bin = Stack(n)
while n > 0:
stack_bin.push(n % 2)
n //= 2
while not stack_bin.isEmpty():
print(stack_bin.pop(),end='')

键盘输入一个10输出结果为:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT熙.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值