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 相关文章推荐
Django中实现点击图片链接强制直接下载的方法
May 14 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
详解Python字符串切片
May 20 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
python中_del_还原数据的方法
Dec 09 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
Session保存到数据库的php类分享
2011/10/24 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
js更优雅的兼容
2010/08/12 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jQuery EasyUI datagrid在翻页以后仍能记录被选中行的实现代码
2016/08/15 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
Python2.x中文乱码问题解决方法
2015/06/02 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python的Tqdm模块的使用
2018/01/10 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
python一些性能分析的技巧
2020/08/30 Python
scrapy在python爬虫中搭建出错的解决方法
2020/11/22 Python
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
女娲补天教学反思
2014/02/05 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
大班亲子运动会方案
2014/06/10 职场文书
成绩单评语
2015/01/04 职场文书
办公室卫生管理制度
2015/08/04 职场文书
python如何查找列表中元素的位置
2022/05/30 Python
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技