Python可以实现栈的结构吗


Posted in Python onMay 27, 2020

栈(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实现栈的结构的条件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
python多进程控制学习小结
Oct 31 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
Dec 18 Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
Python如何脚本过滤文件中的注释
May 27 #Python
Python如何获取文件指定行的内容
May 27 #Python
Python web如何在IIS发布应用过程解析
May 27 #Python
利用Python实现某OA系统的自动定位功能
May 27 #Python
Python中常见的数制转换有哪些
May 27 #Python
Python如何实现邮件功能
May 27 #Python
Python中内建模块collections如何使用
May 27 #Python
You might like
php文件读取方法实例分析
2015/06/20 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
javascript闭包的理解和实例
2010/08/12 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
js实现div色块碰撞
2020/01/16 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python编程实现控制cmd命令行显示颜色的方法示例
2017/08/14 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
python 进程池pool使用详解
2020/10/15 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
个人自我鉴定范文
2013/10/04 职场文书
大学毕业自我鉴定范文
2014/02/03 职场文书
文明市民先进事迹
2014/05/15 职场文书
优秀家长事迹材料
2014/05/17 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2015年新教师工作总结
2015/04/28 职场文书
退货证明模板
2015/06/23 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
2019安全宣传标语大全
2019/08/14 职场文书