線性結構 棧的定義及例項

2021-10-08 20:33:33 字數 2869 閱讀 9467

本文為學習資料結構與演算法python版的個人筆記

線性結構的定義

棧stack是其中一種線性結構

棧的定義

棧的基本操作

棧的基本操作例子

class stack(object):

def __init__(self):

self.items=

def isempty(self):

return self.items==

def push(self,item):

def pop(self):

return self.items.pop()

def peek(self):

return self.items[-1]

def size(self):

return len(self.items)

這裡是把列表尾端當做棧頂

即判斷小括號是否一一左右對應

def parchecker(symbolstring):

s=stack()

balance=true

index=0

while index加強版-判斷小括號,中括號,大括號是否一一左右對齊

def parchecker1(symbolstring):

s=stack()

balance=true

index=0

while index0:

a=number%base

rmstack.push(a)

number=number//base

base_stack=stack()

while not rmstack.isempty():

base_stack.push(secret_code[rmstack.pop()])

return base_stack.items

print(baseconverter(25,16))

def changeform(expression_str):

expression_list=list(expression_str)

nums=list(map(str,range(0,10)))

letter1=list(map(chr, range(ord('a'), ord('z') + 1)))

letter2=list(map(chr, range(ord('a'), ord('z') + 1)))

operation_num=nums+letter1+letter2

operation_symbol=stack()

output_list=

#定義operation優先順序

pre_order={}

pre_order['(']=1

pre_order['+']=2

pre_order['-']=2

pre_order['*']=3

pre_order['/']=3

for expression in expression_list:

if expression in operation_num:

elif expression=="(":

operation_symbol.push(expression)

elif expression==")":

top=operation_symbol.pop()

while not (top =="("):

top=operation_symbol.pop()

else:

while (not operation_symbol.isempty()) and (pre_order[expression]<= pre_order[operation_symbol.peek()]):

top=operation_symbol.pop()

operation_symbol.push(expression)

while not operation_symbol.isempty():

top=operation_symbol.pop()

output=('').join(output_list)

return output

def calculate(expression_str):

expression_list=list(expression_str)

operation_nums=stack()

for expression in expression_list:

if expression in ["+","-","*","/"]:

top_right=operation_nums.pop()

top_left=operation_nums.pop()

result=eval(top_left+expression+top_right)

operation_nums.push(str(result))

else:

operation_nums.push(expression)

return float(operation_nums.pop())

線性結構 共享棧

如果乙個程式需要使用多個棧,使用順序棧就會造成棧空間大小難以估計,從而造成有的棧溢位有的棧空閒,此時可以建立乙個共享棧,通俗地講就是將兩個棧的棧底設定在同乙個陣列的兩端,棧頂位置用top1 top2表示。如圖 所以共享棧的資料結構型別為 include define max 10 define in...

資料結構 線性結構 棧

棧 和佇列相反的作用,越是先存入的資料就得越到後才能取出,根據這個特性可以用陣列或鍊錶模擬出棧。陣列模擬棧 新增資料正常順序,每天加乙個數棧頂加一次,彈棧的時候將棧頂指標的數彈出即可,遍歷棧陣列時是從棧頂開始迴圈。1 class arraystack9 判斷棧是否已滿 10public boolea...

資料結構線性表的定義及操作

注 資料結構三要素 邏輯結構 資料的運算 儲存結構 物理結構 線性表是最基本 最簡單 也是最常用的一種資料結構。線性表 linear list 是資料結構的一種,乙個線性表是n個具有相同特性的資料元素的有限序列。線性表的相鄰元素之間存在著序偶關係。如用 a1,ai 1,ai,ai 1,an 表示乙個...