1. python編程中實現linkedlist(鏈表)報錯是因為什麼,怎麼解決
樓主你好!
看你的代碼存在很多問題,一個個來說明
1)首先你代碼的報錯源於你想用list來展開你的SLinkedList類,在python中,除非內置的可迭代對象外,其他都需要實現__iter__()函數,才能用list來進行展開。注意:判斷一個對象是否可迭代,請使用isinstance(obj, Iterable)來判斷obj是不是可以迭代,Iterable需要從collections中導入
2)插入的方法存在嚴重問題,按樓主的方法插入的話,因為頭節點始終在變,所以當你需要遍歷鏈表的時候就會找不到頭節點;
3)pop的方法實現也有問題,因為是單向鏈,所以無法從末節點開始刪除,只能刪除頭節點
4)top方法的意圖未知
其他:
下面列舉了一下我修改後的方案,做了一些錦上添花的操作,每個基本操作都會返回鏈表對象,這樣就可以使用鏈式操作來寫代碼;迭代函數使用yield來實現,避免展開時佔用不必要的內存。
另:我的展開時直接取鏈表中各個節點的元素,加了一些關鍵注釋在代碼中;
#-*-coding:utf-8-*-
classNode:
def__init__(self):
'''
elm:節點元素
nxt:下個節點指針
'''
self.elm,self.nxt=None,None
classSLinkedList:
def__init__(self):
'''
head:鏈表頭
end_point:鏈表尾
'''
self.head=None
self.end_point=None
defpush(self,x):
p=Node()
p.elm=x
ifself.headisNone:
self.head=p
self.end_point=p
returnself
self.end_point.nxt=p
self.end_point=p
returnself
defpop(self):
'''因為實現的是一個單鏈表,所以只能從頭開始刪除節點'''
ifself.head.nxtisNone:
return
self.head=self.head.nxt
returnself
def__iter__(self):
temp_node=self.head
whiletemp_nodeisnotNone:
yieldtemp_node.elm
temp_node=temp_node.nxt
if__name__=='__main__':
'''增加1,2,5三個元素,並刪除一個頭節點'''
mylinklist=SLinkedList().push(1).push(2).push(5).pop()
print(list(mylinklist))
其實python這個語言使用鏈表有些畫蛇添足,但是如果拿來當作需求練手也無妨。
望採納,謝謝!
2. python有鏈表嗎
python中的鏈表(linked list)是一組數據項的集合,其中每個數據項都是一個節點的一部分,每個節點還包含指向下一個節點的鏈接。鏈表有兩種類型:單鏈表和雙鏈表。
鏈表的數據結構
在鏈表中刪除操作可以通過修改指針來實現,
插入則是調整,插入點的前後兩個指針的指向關系,
在python中每個變數都是指針,例如:
用內置數據結構(list,dict,tuple等)的嵌套/組合,它們隱式地包含了指向/嵌套關系,如graph[u][v]={w0,w1..}類的成員變數、嵌套類可能包含了指向/嵌套關系;
引用表示指向關系,只不過引用不能像指針一樣運算,比如p+1指向下一個元素,所以可能限制頗多。因此,要實現鏈表的操作,不能和c一樣直接對指針進行操作。
python學習網,大量的免費python視頻教程,歡迎在線學習!
3. python2的環境下 為什麼type(1)==int==True顯示的是False
因為Python支持 鏈式比較ChainedComparisons,例如 1 < 2 < 3 返回 True 就是因為類似這樣的語句python會執行鏈式比較,等價於 1<2 and 2<3,所以:
type(1)==int==True
等價於
type(1)==int and int==True
type(1)返回int類型 == int 正確,int類型 == True布爾類實例 錯誤,故最後返回False
4. python中的鏈表和列表有什麼區別
列表是python的一種數據結構,每個列表可以沒有或者是多個元素,每個元素可以是字元,數據,列表,或者是字典。
python中沒有指針,所以對於C語言來的鏈表,只能是一個模擬鏈表,一般都是通過一個class來定義node,node中的self。value就是對應的數據,self。p指向下一個node。
通過上面的分析我們可以看到他們有相同的地方就是他們都是數據存儲的手段,列表是python的基礎元素,范圍很廣,數據是連續存放,鏈表相對來說應用的范圍比較少,數據是不連續存放,一般都是用於高效合並的數據結構。