2021 2 1基於Python實現鍊錶

2021-10-18 16:28:54 字數 4707 閱讀 1133

2021-2-1

2.雜記

參考部落格

1.1節點類

class

node

:'''

data: 節點儲存的資料

_next: 儲存下乙個節點物件

'''def__init__

(self, data, pnext=

none):

self.data = data

self._next = pnext

def__repr__

(self)

:'''

用來定義node的字元輸出,

print為輸出data

'''return

str(self.data)

1.2鍊錶類

屬性:

方法:1.2.1判斷是否為空: isempty()

def

isempty

(self)

:return self.length ==

0

def

(self, dataornode)

: item =

none

ifisinstance

(dataornode, node)

: item = dataornode

else

: item = node(dataornode)

ifnot self.head:

self.head = item

self.length +=

1else

: node = self.head

while node._next:

node = node._next

node._next = item

self.length +=

1

1.2.3刪除乙個節點: delete()
#刪除乙個節點之後記得要把鍊錶長度減一

defdelete

(self, index)

:if self.isempty():

print

"this chain table is empty."

return

if index <

0or index >= self.length:

print

'error: out of index'

return

#要注意刪除第乙個節點的情況

#如果有空的頭節點就不用這樣

if index ==0:

self.head = self.head._next

self.length -=

1return

#prev為儲存前導節點

#node為儲存當前節點

#當j與index相等時就相當於找到要刪除的節點

j =0 node = self.head

prev = self.head

while node._next and j < index:

prev = node

node = node._next

j +=

1if j == index:

prev._next = node._next

self.length -=

1

1.2.4修改乙個節點: update()
def

update

(self, index, data)

:if self.isempty(

)or index <

0or index >= self.length:

print

'error: out of index'

return

j =0 node = self.head

while node._next and j < index:

node = node._next

j +=

1if j == index:

node.data = data

1.2.5查詢乙個節點: getitem()
def

getitem

(self, index)

:if self.isempty(

)or index <

0or index >= self.length:

print

"error: out of index"

return

j =0 node = self.head

while node._next and j < index:

node = node._next

j +=

1return node.data

1.2.6查詢乙個節點的索引: getindex()
def

getindex

(self, data)

: j =

0if self.isempty():

print

"this chain table is empty"

return

node = self.head

while node:

if node.data == data:

return j

node = node._next

j +=

1if j == self.length:

print

"%s not found"

%str

(data)

return

1.2.7按索引插入乙個節點: insert()
def

insert

(self, index, dataornode)

:if self.isempty():

print

"this chain tabale is empty"

return

if index <

0or index >= self.length:

print

"error: out of index"

return

item =

none

ifisinstance

(dataornode, node)

: item = dataornode

else

: item = node(dataornode)

if index ==0:

item._next = self.head

self.head = item

self.length +=

1return

j =0 node = self.head

prev = self.head

while node._next and j < index:

prev = node

node = node._next

j +=

1if j == index:

item._next = node

prev._next = item

self.length +=

1

1.2.8 清空鍊錶: clear()
def

clear

(self)

: self.head =

none

self.length =

0

2.1鍊錶

鍊錶(linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表(陣列)快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而順序表相應的時間複雜度分別是o(logn)和o(1)。

2.2 class ***(object):

python程式類的寫法中有的直接在class後加個名稱,有的卻在識別符號後加乙個括號,裡面再加乙個object,這是什麼意思呢?

object是繼承的意思,物件導向語言中都有這樣一種特性。繼承,指乙個物件直接使用另一物件的屬性和方法。

繼承了object物件,擁有了好多可操作物件,這些都是類中的高階特性。

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

2.3 not enough arguments for format string

not enough arguments for format string

出現這類問題,主要是字串中包含了%號,python 認為它是轉移符,而實際我們需要的就是%, 這個時候,可以使用%%來表示

python基於pickle模組序列化例項(七)

usr bin env python3 coding utf 8 序列化 把變數從記憶體中變成可儲存或傳輸的過程,在python中,序列化叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是乙個意思。importpickle d...

基於MQTT的訊息發布訂閱python實現

mqtt 全稱為 message queuing telemetry transport 訊息佇列遙測傳輸 是一種基於發布 訂閱正規化的 輕量級 訊息協議。該協議構建於tcp ip協議上。mqtt協議是輕量 簡單 開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如 機...

基於Redis的BloomFilter實戰

離線資料處理與實時資料處理有很大的不同,其中乙個例子就是去重。在聚資料中,訪問uv和購買uv都需要實時的去重。離線處理的時候,我們可以通過count groupby 或者count distinct 等方式比較容易的計算出uv,而且不用太擔心效能,大不了就是多一點map或者執行時間久一點。那麼在實時...