Python数据结构——栈

概述

栈(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输出结果为:

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
项目系统结构——前后端分离是一种常见的Web应用程序开发模式,它采用了一种分离前端和后端的策略,将应用程序分为两个独立的部分:前端和后端。这种模式通常用于构建复杂的应用程序,如企业级管理系统、在线购物平台等。 以下是项目系统结构——前后端分离的主要组成部分: 前端: 1. 客户端应用程序:通常使用JavaScript框架(如React、Vue、Angular等)或前端Web框架(如Django、Flask等)开发,用于处理用户界面、数据请求和响应等功能。 2. 静态资源:包括CSS、图片、JavaScript等静态资源文件,通常存储在Web服务器上,供前端应用程序使用。 后端: 1. API服务:提供RESTful或GraphQL风格的API接口,用于处理业务逻辑和数据操作。后端服务通常使用服务器端语言(如Python、Java、Node.js等)编写,并使用数据库存储数据。 2. 数据库:用于存储和管理应用程序的数据,通常使用关系型数据库(如MySQL、PostgreSQL等)或非关系型数据库(如MongoDB、Redis等)。 前后端分离的优点: 1. 开发效率高:前端和后端可以由不同的团队或个人独立开发,减少了沟通和协作的难度。 2. 可扩展性好:前后端分离的应用程序可以根据需要灵活地添加新的前端或后端组件,提高了系统的可扩展性。 3. 灵活性高:前端可以使用不同的技术,如移动端应用程序、小程序等,提高了应用的灵活性。 前后端分离的缺点: 1. 安全性问题:前后端分离的应用程序可能存在安全风险,如跨站脚本攻击(XSS)和SQL注入等。因此,需要采取适当的措施来保护应用程序的安全性。 2. 集成问题:前后端分离的应用程序需要将数据从后端传输到前端,需要处理数据格式转换、数据验证等问题。 3. 调试和测试难度大:前后端分离的应用程序需要分别进行调试和测试,增加了开发和测试的难度。 总之,项目系统结构——前后端分离是一种灵活、可扩展的开发模式,适用于构建复杂的应用程序。在开发过程中,需要关注安全性和集成问题,并采取适当的措施来确保应用程序的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

it小熙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值