日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python实现栈及其简单应用

發(fā)布時間:2024/3/24 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。