01/10/2018, 14:00
Ai đó giúp em về cấu trúc danh sách liên kết kép
Cem đang gặp chút rắc rối về chương trình danh sách liên kết kép, ai đó giúp em với!!
class Node(object):
def __init__(self, element, next, previous):
self.element=element
self.next=next
self.previous=previous
------------------------------------------------------------------------------------------------------------------------------------------
import Node
class Doubly_Linked_List(object):
def __init__(self):
self.header=Node.Node(None, None, None)
self.trailer=Node.Node(None, None, None)
self.header.next=self.trailer
self.trailer.previous=self.header
self.size=0
def len(self):
return self.size
def is_empty(self):
return self.size==0
def insert_beetween(self, e, predecessor, successor):
new_node=Node.Node(e, predecessor, successor)
predecessor.next=new_node
successor.previous=new_node
self.size+=1
return new_node
def delete_node(self, node):
predecessor=node.previous
successor=node.next
predecessor.next=successor
successor.previous=predecessor
self.size-=1
element=node.element
node.previous=None
node.next=None
node.element=None
return element
def show_node(self, node):
if node.element!=None:
return "element: "+str(node.element)+"predecessor: "+str(node.previous.element)+"successor: "+str(node.next.element)
else:
return "header or trailer sentinels"
def display(self):
elements=[]
e=self.header.next
while e.element!=None:
elements.append(e.element)
e=e.next
return elements
----------------------------------------------------------------------------------------------------------------
import Doubly_Linked_List
if __name__=='__main__':
DLL=Doubly_Linked_List.Doubly_Linked_List()
print("header ID"+str(DLL.header))
print("trailer ID"+str(DLL.trailer))
print(DLL.size)
print(DLL.header.next)
print(DLL.trailer.previous)
print("_"*40)
object1=DLL.insert_beetween('object1', DLL.header, DLL.trailer)
print(DLL.size)
print(DLL.display())
print("_"*40)
mark_349=DLL.insert_beetween(349, object1, DLL.trailer)
print(DLL.size)
print(DLL.display())
object2=DLL.insert_beetween('object2', object1, 349)
print(DLL.size)
print(DLL.display())
print(DLL.show_node(object2))
Console
pydev debugger: starting (pid: 10812)
header ID<Node.Node object at 0x03D4B2D0>
trailer ID<Node.Node object at 0x03D4B310>
0
<Node.Node object at 0x03D4B310>
<Node.Node object at 0x03D4B2D0>
________________________________________
1
['object1']
________________________________________
2
------ Vâng cho em hỏi chương trình em sai ở đâu mà khi em thêm Node mới vào và display hay là show node ra vẫn không có gì vậy ạ, lại phiền anh (chị) rồi
Bài liên quan
Thế bạn muốn thấy cái gì. Mình úm ba la là có nè
Vâng, em muốn display gồm hết các phần tử trong danh sách, và show_node có nút đó và kế nhiệm tiền nhiệm của nó, em cảm ơn trc ạ
Nhưng mà in cái gì để ra cái đó Bạn thử đưa code với ouput coi nào, mình chỉnh lại phần code trong class cho
đây là phần code test của em(em bỏ qua phần ở trc)
và đây là output
Ủa, vậy thì nó khác gì ban đầu đâu?
Nói sao đây nhỉ, em muốn in thằng display() và show_node ra nhưng sao output vẫn chỉ có size và mỗi object1 thôi, em k biết phải thế nào nữa
Code này bạn tự code hay lấy đâu thế?
Vâng, em lấy từ giáo trình ra để tìm hiểu cách thức thao tác dữ liệu
Việc in nó ra không khó, quan trọng là bạn phải biết bạn in cái gì. Bạn cứ gói mấy thứ cần in vào trong phương thức
__str__
rồi in raKhi gói vào method
__str__
em vẫn không hiểu liệu phương thức display ở class của em có sai hay không mà khi em gọi nó print ra thì nó không thực hiện, em đang dùng python3.6 nên nhìn k hiểu mấy anh ạ:slight_smile:
Cái list mà em nhận được là từ method display đó em
Thế việc em print(DLL.display()) là hợp lý không anh?, nó không in ra list cho em dù em đã nạp vào cho nó 3 nút