資料結構與演算法 Python實現(二)棧

2021-10-03 22:04:34 字數 2606 閱讀 5246

概念:線性結構是一種有序資料項的集合,除了第乙個元素沒有前驅,最後乙個沒有後繼新都資料項加入到資料集中時,只會加入到原有某個資料項之前或者之後,具有這種性質到資料集,就稱為線性結構;常見的線性結構有:線性表,棧,佇列,雙佇列,陣列等,不同線性結構的關鍵區別在於資料項增減的方式。

class

stack

:def

__init__

(self)

: self.items =

defisempty

(self)

:"""

判斷「棧」是否為空

"""return self.items ==

defsize

(self)

:"""

返回」棧「的大小

"""return

len(self.items)

defpush

(self, item)

:"""

向棧裡新增資料

"""defpeek

(self)

:"""

返回「棧」最頂端資料,不做修改或刪除

"""return self.items[

len(self.items)-1

]def

pop(self)

:"""

從棧頂取出乙個資料

"""return self.items.pop(

)

使用python物件導向程式設計配合列表可以很容易實現「棧」的資料結構

def

par_check

(par_string)

:"""

識別括號格式是否正確

:param par_string:

:return:

"""s, balanced, index = stack(),

true,0

while index <

len(par_string)

and balanced:

symbol = par_string[index]

if symbol ==

"(":

s.push(symbol)

else

:if s.isempty():

balanced =

false

else

: s.pop(

) index +=

1if balanced and s.isempty():

return

true

else

:return

false

print

(par_check(

"((()))"))

print

(par_check(

"(()))"

))

二進位制概述:我們日常生活中使用的是十進位制,而計算機中全部採用的是二進位制只有:0、1兩個數,逢二進一

將十進位制轉換為二進位制,下面的例子數將12轉換為二進位制,整除二取餘數:12 / 2 = 6 餘數為 0、6 / 2 = 3 餘數為0、3 / 2 = 1 餘數為1、1 / 2 = 1 餘數為1;12的二進位制結果為:1100 我們發現先計算出來的數,最後取出,剛好符合棧的結構,下面我們使用棧來實現乙個二進位制轉換函式

十進位制轉換二進位制**實現(結合剛才實現的stack):

def

divide_by2

(dec_num)

: s = stack(

)while dec_num >0:

s.push(dec_num %2)

dec_num = dec_num //

2return

int(

"".join(

[str

(s.pop())

for i in

range

(s.size())

]))print

(divide_by2(12)

)

十進位制轉換十六進製制以下任意進製**(原理都一樣接著來嘗試吧):

def

base_converter

(dec_num, base)

: digits =

"0123456789abcdef"

stack = stack(

)while dec_num >0:

stack.push(dec_num % base)

dec_num = dec_num // base

return

"".join(

[str

(digits[stack.pop()]

)for i in

range

(stack.size())

])print

(base_converter(

233,16)

)

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...