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

Henry viết 16:00 ngày 01/10/2018

Thế bạn muốn thấy cái gì. Mình úm ba la là có nè

Bún Lê viết 16:13 ngày 01/10/2018

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 ạ

Henry viết 16:11 ngày 01/10/2018

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

Bún Lê viết 16:01 ngày 01/10/2018

đây là phần code test của em(em bỏ qua phần ở trc)

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))

và đây là output

header ID< Node.Node object at 0x03CAB2D0 >
trailer ID< Node.Node object at 0x03CAB310 >
0
< Node.Node object at 0x03CAB310 >
< Node.Node object at 0x03CAB2D0 >
________________________________________
1
['object1']
________________________________________
2
Henry viết 16:03 ngày 01/10/2018

Ủa, vậy thì nó khác gì ban đầu đâu?

Bún Lê viết 16:08 ngày 01/10/2018

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

Henry viết 16:03 ngày 01/10/2018

Code này bạn tự code hay lấy đâu thế?

Bún Lê viết 16:02 ngày 01/10/2018

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

Henry viết 16:00 ngày 01/10/2018

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 ra

>>> class A:
...     pass
>>> a = A()
>>> print(a)
<gì gì đó ở đâu đó>

Khi gói vào method __str__

>>> class A:
...     def __str__(self):
...         return 'một chuỗi nhé, làm sao làm, phải return về một chuỗi'
...
>>> a = A()
>>> print(a)
một chuỗi nhé, làm sao làm, phải return về một chuỗi
Bún Lê viết 16:13 ngày 01/10/2018

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:

Henry viết 16:00 ngày 01/10/2018

Cái list mà em nhận được là từ method display đó em

Bún Lê viết 16:02 ngày 01/10/2018

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

Bài liên quan
0