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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值