python实现数据结构太Easy

记得原来学数据结构和算法基础,觉得很难,现在用python实现数据结构太Easy了。

以下是练习的树结构和双向链表结构。

#tree
class TreeNode:
    def __init__(self,value):#value is used here,node is used other places
        self.parent=None
        self.value=value
        self.children=[]
    def add_child(self,n):
		n.parent=self
		self.children.append(n)
    def digraph(self,g):#将树转换成networkx中的有向图。
       if self.parent==None:
           g.add_node(self.value,level=0)
       for c in self.children:
           g.add_node(c.value,level=1)
           g.add_edge(self.value,c.value)
           c.digraph(g)
    def getroot(self):
    	if self.parent==None:
    		return self
    	return self.parent.getroot()
#double linkedlist
class LinkedListNode(object):
    def __init__(self, value=None):
        self.prev = None
        self.next = None
        self.value = value
    def str_left(self):
        s=str(self.value)
        n=self.prev
        while n!=None:
            s+="->"+str(n.value)
            n=n.prev
        return s        
    def str_right(self):
        s=str(self.value)
        n=self.next
        while n!=None:
            s+="->"+str(n.value)
            n=n.next
        return s
    def str(self):
        return self.head().str_right() 
    def link_right(self,b):
        self.next=b
        b.prev=self
    def link_left(self,b):
        self.prev=b
        b.next=self
    def unlink_right(self):
        b=self.next
        self.next=None
        if b!=None:
            b.prev=None
    def unlink_left(self):
        b=self.prev
        self.prev=None
        if b!=None:
            b.next=None
    def head(self):
        if self.prev==None:
            return self
        else:
            return self.prev.head()
    def tail(self):
        if self.next==None:
            return self
        else:
            return self.next.tail()
    # def cut_prev(self):
    #     before=self.prev
    #     if before!=None:
    #     else:
    #         unlinkab(before,self)
    def remove_self(self):
        before=self.prev
        after=self.next

        self.unlink_left()
        self.unlink_right()

        if before!=None and after!=None:
            before.link_right(after)


猜你喜欢

转载自blog.csdn.net/mahongquan/article/details/19767383