栈(stack)又名堆栈,它是一种运算受限的线性表。在Python中可使用列表进行实现。

什么是栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

如何实现?

在Python中使用列表来实现:#!/usr/bin/env python

#定义一个列表来模拟栈

stack = []

#进栈,调用列表的append()函数加到列表的末尾,strip()没有参数是去掉首尾的空格

def pushit():

stack.append(raw_input('Enter new string: ').strip())

#出栈,用到了pop()函数

def popit():

if len(stack) == 0:

print 'Cannot pop from an empty stack!'

else:

print 'Removed [', stack.pop(), ']'

#编历栈

def viewstack():

print stack

#CMDs是字典的使用

CMDs = {'u': pushit, 'o': popit, 'v': viewstack}

#pr为提示字符

def showmenu():

pr = """

p(U)sh

p(O)p

(V)iew

(Q)uit

Enter choice: """

while True:

while True:

try:

#先用strip()去掉空格,再把第一个字符转换成小写的

choice = raw_input(pr).strip()[0].lower()

except (EOFError, KeyboardInterrupt, IndexError):

choice = 'q'

print '\nYou picked: [%s]' % choice

if choice not in 'uovq':

print 'Invalid option, try again'

else:

break

#CMDs[]根据输入的choice从字典中对应相应的value,比如说输入u,从字典中得到value为pushit,执行pushit()进栈操作

if choice == 'q':

break

CMDs[choice]()

#判断是否是从本文件进入,而不是被调用

if __name__ == '__main__':

showmenu()

实例内容扩展:# -*- coding:utf-8 -*-

# __author__ :kusy

# __content__:文件说明

# __date__:2018/9/30 17:28

class MyStack(object):

def __init__(self):

self.stack_list = []

self.count = 0

# 创建一个栈

def create_stack(self):

return self.stack_list

# 栈中添加值

def push(self, value):

self.stack_list.insert(0,value)

self.count += 1

#返回栈顶元素值

def peek(self):

if self.count:

return self.stack_list[0]

# 删除栈顶元素

def pop(self):

self.stack_list.pop(0)

self.count -= 1

# 返回栈是否为空

def is_empty(self):

return self.count == 0

#打印栈内容

def print_all(self):

for sl in self.stack_list:

print(sl)

if __name__ == '__main__':

ms = MyStack()

ms.create_stack()

ms.push(1)

ms.push(2)

ms.push(3)

print('栈元素:')

ms.print_all()

print('栈顶元素:',ms.peek())

ms.pop()

print('栈顶元素删除后:')

ms.print_all()

print('栈是否为空:','是' if ms.is_empty() else '否')

print('---继续删除元素')

ms.pop()

print('---继续删除元素')

ms.pop()

print('栈是否为空:','是' if ms.is_empty() else '否')

运行结果如下C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/PY0929/stack.py

栈元素:

3

2

1

栈顶元素: 3

栈顶元素删除后:

2

1

栈是否为空: 否

---继续删除元素

---继续删除元素

栈是否为空: 是

Process finished with exit code 0

到此这篇关于Python可以实现栈的结构吗的文章就介绍到这了,更多相关Python实现栈的结构的条件内容请搜索ZaLou.Cn

python中的栈结构_Python可以实现栈的结构吗相关推荐

  1. python术语中英对照栈图_Python常用技术栈总结

    在python的基础上,加入了自己的理解,修改一些错误.最近准备去一线城市谋求发展,所以打算重新整理一下,顺便加深一下记忆. Table of Contents Python语言特性 1 Python ...

  2. stack在python中是什么意思_python栈是什么意思

    python栈是什么意思? 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构. 由于栈具有后入先出的 ...

  3. python中if else语句用来形成二分支结构_python分支结构if详解

    1.流程控制 1)顺序结构:从上往下依次执行(默认) 2)分支结构:根据条件来选择性的执行某段代码,实现分支结构的方式只有一种:if 3)循环结构:让指定的代码重复执行 python中实现循环结构的方 ...

  4. python中的目录简介_Python程序设计(第3版)董付国作者介绍、内容简介、图书详情、目录...

    内容简介 <Python程序设计(第3版 微课版)>共18章,主要内容如下:第1章介绍Python基础知识与概念:第2章讲解列表.元组.字典.集合等常用序列结构:第3章讲解Python选择 ...

  5. python中主函数循环_python入门(三):分支、循环、函数详解

    1.分支 if循环格式: if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_b ...

  6. python中doc=parased.getroot()_python实例手册.py

    python实例手册 #encoding:utf8 # 设定编码-支持中文 0 说明 手册制作: 雪松 littlepy www.51reboot.com 更新日期: 2016-01-21 欢迎系统运 ...

  7. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  8. python中print的本质_Python基础语法全解

    一.Python简介 1. 了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令 ...

  9. python程序基础书写文本_Python基础手册4——文本结构

    简单来讲,Python程序可以分解成模块(文件).语句.表达式以及对象(数据): 1.程序由模块组成 2.模块包含语句 3.语句包含表达式 4.表达式建立并处理对象. 所以,Python 代码主要由两 ...

最新文章

  1. [转]GridView导出Excel总结
  2. 活体检测方法概述与总结
  3. Spring Boot SchedulingConfigurer定时执行任务(配置式反射调用)
  4. leetcode--动态规划(Easy)
  5. w3c html5 客户端缓存数据格式,Html5应用程序缓存(Cache manifest)
  6. java io类filereader,39. Java IO: FileReader
  7. mac/linux下java项目使用本机自带ssh和scp命令,自动复制上传并部署的脚本
  8. Ruby在Windows下安装
  9. [转]Linux下的虚拟光驱和虚拟软驱
  10. Windows操作系统----安全机制----Token
  11. 电脑耳机有声外放无声的解决方法
  12. 激光跟踪传感器的工作原理
  13. Navigator.sendBeacon()
  14. Mysql正则表达式查询
  15. 重装系统后,没有wifi---问题已解决
  16. Dear Santa Claus圣诞老人创意字体 for mac
  17. JAVA开发工程师是什么意思?
  18. 敏捷结果30天之第三天:一日之计在于晨
  19. 量化投资学习——经典书籍介绍
  20. ryu---北向接口(利用socket对外通信)

热门文章

  1. solidworks的小金球插件_SOLIDWORKS旋转流体仿真
  2. java 推送消息页面_Notification API,为你的网页添加桌面通知推送
  3. python市场需求如何_python市场需求量大吗
  4. 读取配置文件失败_还在为Find_Package失败而烦恼吗?
  5. @Url cannot be used with @GET URL (parameter #1)
  6. python27.dll引起的appcrash_python27.dll错误代码126怎么解决
  7. QDir类cleanPath函数用法
  8. Android开发之虹软人脸识别活体检测基本步骤
  9. python的线性链表_Python线性表——单链表-阿里云开发者社区
  10. java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持