数据结构 02-栈概念、Python 中使用列表 list 实现栈
目? ? ? 錄
1. 棧簡介
1.1 棧的概念
1.2 棧的類型
1.2.1 是否能動(dòng)態(tài)增長
1.2.2 棧的實(shí)現(xiàn)方式
2. Python 中使用列表 list 實(shí)現(xiàn)棧
2.1 棧的常規(guī)操作
2.2 棧的代碼實(shí)現(xiàn)
1. 棧簡介
1.1 棧的概念
????????棧,英語 Stack,又稱為堆棧,是一種特殊的數(shù)組或者說列表;可存入數(shù)據(jù)元素、訪問元素、刪除元素。它最大的特點(diǎn)是只能允許在棧頂端(top)進(jìn)行加入數(shù)據(jù)(動(dòng)作稱為 push)和輸出數(shù)據(jù)(動(dòng)作稱為 pop)。
????????它不能按照下標(biāo)讀取數(shù)據(jù),任何時(shí)候可以訪問、刪除的元素都是此前最后存入的那個(gè)元素,訪問順序是固定的,即后進(jìn)先出(LIFO, Last In First Out),與頂部對應(yīng)的端稱為“底部”bottom。
1.2 棧的類型
1.2.1 是否能動(dòng)態(tài)增長
????????在其他語言中,棧根據(jù)是否能動(dòng)態(tài)增長,分為靜態(tài)棧和動(dòng)態(tài)棧。尤其是 C、Java 中使用固定長度分配內(nèi)存時(shí)候,是靜態(tài)棧。可以動(dòng)態(tài)的增長棧長度的,是靜態(tài)棧。
? ? ? ? 在 Python 中一般是支持動(dòng)態(tài)增長的,所以多半是動(dòng)態(tài)棧。如果需要實(shí)現(xiàn)靜態(tài)棧,也可以加上限定來實(shí)現(xiàn)。
1.2.2 棧的實(shí)現(xiàn)方式
? ? ? ? Python 中棧的實(shí)現(xiàn)方式一般分兩種,一個(gè)是使用列表實(shí)現(xiàn),一個(gè)是使用鏈表實(shí)現(xiàn)。
? ? ? ? 使用列表實(shí)現(xiàn)方便快捷,代碼實(shí)現(xiàn)簡單,下面會(huì)寫出使用列表實(shí)現(xiàn)棧的代碼,使用鏈表實(shí)現(xiàn)的,會(huì)在鏈表章節(jié)進(jìn)行描述。
2. Python 中使用列表 list 實(shí)現(xiàn)棧
2.1 棧的常規(guī)操作
????????棧的操作包括下面的內(nèi)容:
2.2 棧的代碼實(shí)現(xiàn)
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)# 獲得棧的元素的個(gè)數(shù)def size(self):return(self.stack_size)# 提供給 print 函數(shù)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())''
要是大家覺得寫得還行,麻煩點(diǎn)個(gè)贊或者收藏吧,想個(gè)博客漲漲人氣,非常感謝!
'''
總結(jié)
以上是生活随笔為你收集整理的数据结构 02-栈概念、Python 中使用列表 list 实现栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【git安装配置 / 拉取上传】仓库流程
- 下一篇: Python 注释