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搭建简易服务器分析与实现
Dec 15 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
带你了解python装饰器
Jun 15 Python
python技能之数据导出excel的实例代码
Aug 11 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
django实现日志按日期分割
May 21 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
向左滚动文字 js代码效果
2013/08/17 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
微信小程序签到功能
2018/10/31 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python获取多线程及子线程的返回值
2017/11/15 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
使用Python+Appuim 清理微信的方法
2021/01/26 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
酒店个人培训自我鉴定
2013/12/11 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
Python经常使用的一些内置函数
2022/04/11 Python