20201130 棧與鍊錶

2022-07-11 12:00:22 字數 4882 閱讀 6178

經過這短短乙個月,真的感受到自己的無知與懦弱,比如沒有確定的事情,就敢跟小可愛承諾,自己的不成熟導致了這一兩年的倒退,這乙個月暫時就不實習了,好好把知識補一補,然後將python好好學一下,簡單會sql是沒有未來的,不管在哪個企業,都是以營利為目的,小可愛這麼拼,每天5點多就開始上班,你心裡難道一點就不愧疚嗎?

你願意留在北京,就代表你選了最難得路走,還想懶,還想混,還想著好事天上飄下來,這是不可能的,從今天開始,把每天的事情記錄一下,不記錄完整不准睡覺,醒來吧,不能再裝睡了。

-- 今天早上在快手啥也沒有幹,下午回來,睡也不睡,玩了兩三個小時,也沒有好好午休,也沒有好好看書,幾乎沒有什麼所得,以前是這樣,但是以後不能這樣了,現在17:53,晚飯也不吃了,這個月乙個是把開課吧的所有課程全部學完,乙個是把實驗樓的課程學習完畢,沒有撤退可言。

看到小可愛的容顏,我知道自己這輩子不能辜負人家,不能走我爸的後路。

-- python3簡明教程--python資料結構

先把資料結構刷了一遍:

棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。

棧的介紹

棧允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(push),刪除則稱為退棧(pop)。

由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。棧也稱為後進先出表。

這個**,我們可以看到整個資料結構的變化過程。可以通過左下角的按鈕調慢演示過程。可能也自己動手 code 實現了過程,那麼再在**上演示一下元素的各種操作過程,會帶來一些更直觀的印象。

class stack(object):

definit(self, limit=10):

self.stack = # 存放元素

self.limit = limit # 堆疊的容量極限

def pop(self):

if self.stack:

return self.stack.pop()

else:

raise indexerror("pop from an empty stack")

def peek(self):

if self.stack:

return self.stack[-1]

def is_empty(self):

return not bool(self.stack)

def size(self):

return len(self.stack)

def banlanced_parentheses(parentheses):

stack = stack(len(parentheses))

for parenthe in parentheses:

if parenthe == '(':

stack.push(parenthe)

elif parenthe == ")":

if stack.is_empty():

return false

stack.pop()

return stack.is_empty()

ifname== "main":

examples = ["(((()))", "(())", "(()))"]

print("blanced parentheses demonstraction:\n")

for example in examples:

print(example + ": " + str(banlanced_parentheses(example)))

鍊錶:鍊錶分為單鏈表和雙鏈表兩種。在接下來的內容裡,我們將逐步介紹單鏈表的具體功能是如何實現的。

建立 node 類

class node:

definit(self, data):

self.data = data

self.next = none

class linklist:

definit(self, head=none): # 鍊錶初始化

self.head = head

def is_empty(self):

"""判斷鍊錶是否為空"""

# bool() 函式只返回 true 和 false

return not self.head

def insert(self, position, new_element):

"""在鍊錶中指定索引處插入元素"""

if position < 0 or position > self.get_length():

raise indexerror("insert 插入時, key值超出了範圍")

temp = self.head

### 將插入元素的next元素指向老的頭結點,並將新的元素賦值給頭結點

if position == 0:

new_element.next = temp

self.head = new_element

return

i = 0

### 遍歷找到索引值為position的結點,在其後面插入結點

while i < position:

pre = temp

temp = temp.next

i += 1

pre.next = new_element

new_element.next = temp

def remove(self, position):

"""刪除指定索引的鍊錶元素"""

if position < 0 or position > self.get_length() - 1:

raise indexerror("刪除元素的位置超出範圍")

i = 0

temp = self.head

### 遍歷找到索引值的position 的結點

while temp != none:

if position == 0:

self.head = temp.next

temp.next = none

return true

pre = temp

temp = temp.next

i += 1

if i == position:

pre.next = temp.next

temp.next = none

return

def get_length(self):

"""返回鍊錶的長度"""

temp = self.head

# 計算鍊錶的長度變數

length = 0

while temp != none:

length = length + 1

temp = temp.next

# 返回鍊錶長度

return length

def print_list(self):

print("linked_list:")

temp = self.head

while temp is not none:

print(temp.data)

temp = temp.next

def reverse(self):

"""將鍊錶反轉"""

prev = none

current = self.head

while current:

next_node = current.next

current.next = prev

prev = current

current = next_node

self.head = prev

def initlist(self, data_list):

"""將列表轉化為鍊錶"""

### 建立頭結點

self.head = node(data_list[0])

temp = self.head

### 逐個為資料建立結點,建立鍊錶

for i in data_list[1:]:

node = node(i)

temp.next = node

temp = temp.next

def swapnodes(self, d1, d2):

prevd1 = none

prevd2 = none

if d1 == d2:

return

else:

d1 = self.head

while d1 is not none and d1.data != d1:

prevd1 = d1

d1 = d1.next

d2 = self.head

while d2 is not none and d2.data != d2:

prevd2 = d2

d2 = d2.next

if d1 is none and d2 is none:

return

if prevd1 is not none:

prevd1.next = d2

else:

self.head = d2

if prevd2 is not none:

prevd2.next = d1

else:

self.head = d1

temp = d1.next

d1.next = d2.next

d2.next = temp

佇列 棧與鍊錶

佇列,顧名思義,就像排隊一樣,我們只能在隊首刪除,在隊尾增加。佇列是一種先進先出 fifo 的資料結構。參考 佇列的解析與c語言實現 棧,可以理解為乙個儲物的地方,且只有乙個出口,先放進去的東西最後才能拿出來 因為被後面放進去的東西擋住了 棧作為一種 資料結構 是一種 只能在一端進行插入和刪除操作 ...

佇列 棧與鍊錶

一 佇列 佇列,顧名思義,就像排隊一樣,我們只能在隊首刪除,在隊尾增加。佇列是一種先進先出 fifo 的資料結構。參考 佇列的解析與c語言實現三 鍊錶 鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組...

棧 陣列與鍊錶實現

棧的實現一般由陣列與鍊錶實現,但陣列實現較為常見,鍊錶實現一般不常用。以下給出兩種實現方式的完整 一 陣列實現 注意要點 1.棧為空時 top 1 2.棧滿時 top capacity 如下 adt stack 儲存結構 陣列 struct stackrecord typedef stackreco...