Python可以實現(xiàn)棧的結構嗎
棧(stack)又名堆棧,它是一種運算受限的線性表。在Python中可使用列表進行實現(xiàn)。
什么是棧?
棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進棧、入?;驂簵?,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從一個棧刪除元素又稱作出?;蛲藯?,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。
如何實現(xiàn)?
在Python中使用列表來實現(xiàn):
#!/usr/bin/env python
#定義一個列表來模擬棧
stack = []
#進棧,調(diào)用列表的append()函數(shù)加到列表的末尾,strip()沒有參數(shù)是去掉首尾的空格
def pushit():
stack.append(raw_input('Enter new string: ').strip())
#出棧,用到了pop()函數(shù)
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[]根據(jù)輸入的choice從字典中對應相應的value,比如說輸入u,從字典中得到value為pushit,執(zhí)行pushit()進棧操作
if choice == 'q':
break
CMDs[choice]()
#判斷是否是從本文件進入,而不是被調(diào)用
if __name__ == '__main__':
showmenu()
實例內(nèi)容擴展:
# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件說明
# __date__:2018/9/30 17:28
class MyStack(object):
def __init__(self):
self.stack_list = []
self.count = 0
# 創(chuàng)建一個棧
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
#打印棧內(nèi)容
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('---繼續(xù)刪除元素')
ms.pop()
print('---繼續(xù)刪除元素')
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 棧是否為空: 否 ---繼續(xù)刪除元素 ---繼續(xù)刪除元素 棧是否為空: 是 Process finished with exit code 0
到此這篇關于Python可以實現(xiàn)棧的結構嗎的文章就介紹到這了,更多相關Python實現(xiàn)棧的結構的條件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python 基于Twisted框架的文件夾網(wǎng)絡傳輸源碼
這篇文章主要介紹了Python 基于Twisted框架的文件夾網(wǎng)絡傳輸源碼,需要的朋友可以參考下2016-08-08
Python圖像處理庫PIL的ImageEnhance模塊使用介紹
這篇文章主要介紹了Python圖像處理庫PIL的ImageEnhance模塊使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02
Python使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示功能
在日常工作和學習中,我們可能需要查找和提取PDF文件中的特定內(nèi)容,本文將介紹如何使用pymupdf實現(xiàn)PDF內(nèi)容搜索并顯示的功能,需要的可以參考下2023-08-08
正則給header的冒號兩邊參數(shù)添加單引號(Python請求用)
這篇文章主要介紹了正則給header的冒號兩邊參數(shù)添加單引號(Python請求用)的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08

