Python实现栈及其简单应用
生活随笔
收集整理的這篇文章主要介紹了
Python实现栈及其简单应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Python實(shí)現(xiàn)棧
定義棧類
class Stack(object):# 初始化棧為空列表def __init__(self):self.items = []# 判斷棧是否為空,返回布爾值def is_Empty(self):return self.items == []# 返回棧頂元素# 如果為空返回Nonedef peek(self):if self.is_Empty():return Nonereturn self.items[len(self.items) - 1]# 返回棧大小def size(self):return len(self.items) # 壓棧,添加新元素進(jìn)棧def push(self, item):self.items.append(item)# 出棧,刪除棧頂元素def pop(self):return self.items.pop()簡單的棧測試
if __name__ == "__main__":# 初始化一個棧對象my_stack = Stack()my_stack.push('h')print("壓棧:{}".format(my_stack.peek()))my_stack.push('a')print("壓棧:{}".format(my_stack.peek()))print("此時棧大小為:{},棧頂元素為:{}".format(my_stack.size(), my_stack.peek()))print("出棧:{}".format(my_stack.pop()))print("棧是否為空:{}".format(my_stack.is_Empty()))print("此時棧大小為:{},棧頂元素為:{}".format(my_stack.size(), my_stack.peek()))print("出棧:{}".format(my_stack.pop()))print("棧是否為空:{}".format(my_stack.is_Empty()))print("此時棧大小為:{},棧頂元素為:{}".format(my_stack.size(), my_stack.peek()))print("棧是否為空:{}".format(my_stack.is_Empty()))"""壓棧:h壓棧:a此時棧大小為:2,棧頂元素為:a出棧:a棧是否為空:False此時棧大小為:1,棧頂元素為:h出棧:h棧是否為空:True此時棧大小為:0,棧頂元素為:None棧是否為空:True"""棧應(yīng)用——檢測字符串中的括號是否成對
def syntaxChecker(string):stack = Stack()opens = '([{'closes = ')]}'balanced = Truefor i in string:if i in '([{':stack.push(i)elif i in ')]}':if stack.is_Empty():balanced = Falsebreakelse:j = stack.pop()if opens.find(i) != closes.find(j):balanced = Falsebreakif not stack.is_Empty():balanced = Falsereturn balanced- 首先創(chuàng)建一個棧對象,并新建一個包含所有左括號的數(shù)組和一個包含所有右括號的數(shù)組(注意同種括號下標(biāo)需要對應(yīng)),接著講匹配狀態(tài)設(shè)為True
- 然后對輸入的字符串進(jìn)行判斷
- 如果匹配到左括號,則壓棧
- 如果匹配到右括號
- 如果此時棧為空,匹配狀態(tài)設(shè)為False,因?yàn)榭諚H鄙僮罄ㄌ柨隙ㄊ遣黄ヅ?/li>
- 如果棧不為空,則出棧當(dāng)前的棧頂元素,如果此時符號類型匹配,則確定是一組括號
- 循環(huán)直到無法匹配到括號
- 最后判斷如果棧不為空,則匹配失敗,如果匹配成功則匹配狀態(tài)不做修改仍為True
- 返回匹配狀態(tài)
棧應(yīng)用——十進(jìn)制轉(zhuǎn)換為二進(jìn)制
def decimal_to_bin(dec):stack = Stack()bin_str = ''if dec == 0:stack.push(0)while dec > 0:a = dec % 2stack.push(a)dec = int(dec / 2)while not stack.is_Empty():bin_str += str(stack.pop())return bin_str- 首先創(chuàng)建一個棧對象,和一個存儲二進(jìn)制數(shù)的字符串,函數(shù)傳入待轉(zhuǎn)換的十進(jìn)制數(shù)
- 提前判斷該數(shù)是不是0,如果是0則直接壓棧0
- 非零則開始執(zhí)行轉(zhuǎn)換操作
- 將十進(jìn)制數(shù)%2后的結(jié)果壓入棧
- 然后將十進(jìn)制數(shù)/2得到新的數(shù)
- 如此循環(huán)直到所得十進(jìn)制數(shù)小于一
- 注意這個過程中為了避免小數(shù)所以執(zhí)行了強(qiáng)制類型轉(zhuǎn)換
- 循環(huán)結(jié)束后如果棧不為空,則將之前壓棧的元素全部按順序出棧組成一個二進(jìn)制的字符串,返回之
總結(jié)
以上是生活随笔為你收集整理的Python实现栈及其简单应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文语音语料调研
- 下一篇: python人口统计_python数据分