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