数据结构 02-栈概念、Python 中使用列表 list 实现栈
目? ? ? 錄
1. 棧簡介
1.1 棧的概念
1.2 棧的類型
1.2.1 是否能動態增長
1.2.2 棧的實現方式
2. Python 中使用列表 list 實現棧
2.1 棧的常規操作
2.2 棧的代碼實現
1. 棧簡介
1.1 棧的概念
????????棧,英語 Stack,又稱為堆棧,是一種特殊的數組或者說列表;可存入數據元素、訪問元素、刪除元素。它最大的特點是只能允許在棧頂端(top)進行加入數據(動作稱為 push)和輸出數據(動作稱為 pop)。
????????它不能按照下標讀取數據,任何時候可以訪問、刪除的元素都是此前最后存入的那個元素,訪問順序是固定的,即后進先出(LIFO, Last In First Out),與頂部對應的端稱為“底部”bottom。
1.2 棧的類型
1.2.1 是否能動態增長
????????在其他語言中,棧根據是否能動態增長,分為靜態棧和動態棧。尤其是 C、Java 中使用固定長度分配內存時候,是靜態棧。可以動態的增長棧長度的,是靜態棧。
? ? ? ? 在 Python 中一般是支持動態增長的,所以多半是動態棧。如果需要實現靜態棧,也可以加上限定來實現。
1.2.2 棧的實現方式
? ? ? ? Python 中棧的實現方式一般分兩種,一個是使用列表實現,一個是使用鏈表實現。
? ? ? ? 使用列表實現方便快捷,代碼實現簡單,下面會寫出使用列表實現棧的代碼,使用鏈表實現的,會在鏈表章節進行描述。
2. Python 中使用列表 list 實現棧
2.1 棧的常規操作
????????棧的操作包括下面的內容:
2.2 棧的代碼實現
class Stack(object):def __init__(self,vals=None):self.stack=[]self.stack_size=0if(vals ):for val in vals:self.stack.append(val)self.stack_size+=1# 壓棧def push(self,val):self.stack.append(val)self.stack_size+=1return(True)# 彈出棧頂元素def pop(self):if(self.stack_size==0):return(None)else:self.stack_size-=1return(self.stack.pop())# 讀取棧頂元素def peek(self):if(self.stack_size==0):return(None)else:return(self.stack[-1])# 判斷棧是否為空def is_empty(self):if(self.stack_size==0):return(True)else:return(False)# 獲得棧的元素的個數def size(self):return(self.stack_size)# 提供給 print 函數def __str__(self):return("This is a stack ==>{0}".format(self.stack)) # stack1 print("*"*16+"create a empty stack"+"*"*16) stack1=Stack() print(stack1) stack1.push(0) stack1.push(1) stack1.push(2) print("*"*16+"push three elements"+"*"*16) print(stack1) stack1.pop() stack1.pop() print("*"*16+"pop two elements"+"*"*16) print(stack1)# stack1 print("*"*16+"create a stack as ['a','b','c','d']"+"*"*16) stack1=Stack(['a','b','c','d']) print(stack1) print("*"*16+"judge the stiack is empty"+"*"*16) print(stack1.is_empty()) print("*"*16+"read the top element"+"*"*16) print(stack1.peek()) print("*"*16+"get the stack len"+"*"*16) print(stack1.size())''
要是大家覺得寫得還行,麻煩點個贊或者收藏吧,想個博客漲漲人氣,非常感謝!
'''
總結
以上是生活随笔為你收集整理的数据结构 02-栈概念、Python 中使用列表 list 实现栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【git安装配置 / 拉取上传】仓库流程
- 下一篇: 如何生成WebP图片