专栏首页逸繁Python手写模拟单向链表对象,栈对象和树

Python手写模拟单向链表对象,栈对象和树

单向链表:

class error(Exception):
    def __init__(self,msg):
        super(error,self).__init__()
        self.msg=msg
    def __str__(self):
        return self.msg    
class Node:
    def __init__(self,ele):
        self.ele=ele
        self.next=None
class mylist:
    def __init__(self,ele=None):
        self.index=0
        self.pos=0
        if ele:
            self._head=Node(ele)
        else:
            self._head = None
    def __iter__(self):
        return self
    def __next__(self):
        if self.pos < self.length():
            self.pos += 1
            cursor = self._head
            current=cursor
            num = 0
            while cursor != None:
                current = cursor
                cursor = cursor.next
                num += 1
                if num == self.pos:
                    return current.ele
        else:
            raise StopIteration
    def empty(self):
        return  self._head==None
    def add(self,item):
        node=Node(item)
        node.next=self._head
        self._head=node
    def length(self):
        cur=self._head
        num=0
        if cur:
            num+=1
            while cur.next:
                cur=cur.next
                num+=1
            return num
        else:
            return num      
    def append(self,item):
        node=Node(item)
        cursor=self._head
        if self.empty():
            self._head = node
        else:
            while cursor.next!= None:
                cursor = cursor.next
            cursor.next=node
    def pop(self):
        if self.empty():
            return None
        else:
            if self.length()==1:
                ele=self._head.ele
                self._head.ele=None
                return ele
            else:
                cur=self._head
                current=cur
                while cur.next!=None:
                    current=cur
                    cur=cur.next 
                    ele=cur.ele
                current.next=None
                return ele
    def insert(self,index,item):
        if index<0 or index>self.length():
            raise error("out of range")
        else:
            if index==0:
                self.add(item)
            elif index==self.length():
                self.append(item)
            else:
                node = Node(item)
                cur=self._head
                pre=0
                while pre<index-1:
                    cur=cur.next
                    pre+=1
                node.next=cur.next
                cur.next=node     
    def get(self,index):
        if index<0 or index>self.length()-1:
            raise error("out of range")
        else:
            num=0
            cur=self._head
            while num<index:
                cur=cur.next
                num+=1
            return cur.ele
    def remove(self,item):
        cur=self._head
        pre=None
        while cur!=None:
            if cur.ele==item:
                if pre==None:
                    self._head=cur.next
                else:    
                    pre.next=cur.next
                break    
            else:
                pre=cur
                cur=cur.next    
    def delete(self,index):
        if index<0 or index>self.length()-1:
            raise error("out of range")
        else:
            if index==0:
               self._head=self._head.next
            else:
                num=1
                current=self._head
                cur=current.next
                while num!=index:
                    current=cur
                    cur=current.next
                    num+=1
                current.next=cur.next
                cur.ele=None
                cur.next=None

栈:

class stack:
    def __init__(self):
        self._box=[]
    def empty(self):
        return self._box==[]
    def length(self):
        return len(self._box)
    def push(self,item):
        self._box.append(item)
    def pop(self):
        return self._box.pop()        

树:

class Node:
    def __init__(self,ele=None,left=None,right=None):
        self.ele = ele
        self.left = None
        self.right = None
class Tree:
    def __init__(self,node=None):
        self.root = node
    def append(self,item):
        node = Node(item)
        if self.root is None:
            self.root = node
        else:
            queue = [self.root]
            while queue:
                current=queue.pop(0)
                if current.left is None:
                    current.left = node
                    return
                elif current.right is None:
                    current.right = node
                    return
                else:
                    queue.append(current.left)
                    queue.append(current.right)
    def loop(self):
        if self.root is None:
            return
        queue=[self.root]#广度优先
        while queue:
            current=queue.pop(0)
            print(current.ele)
            if current.left!=None:
                queue.append(current.left) 
            elif current.right!=None:
                queue.append(current.right) 

    def deep_loop_top(self,node):
        if node==None:
            return
        print(node.ele)
        self.deep_loop_top(node.left)
        self.deep_loop_top(node.right)

    def deep_loop_left(self,node):
        if node==None:
            return
        self.deep_loop_left(node.left)
        print(node.ele)
        self.deep_loop_left(node.right)

    def deep_loop_last(self,node):
        if node==None:
            return
        self.deep_loop_last(node.left)
        self.deep_loop_last(node.right)
        print(node.ele)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Python生成基础验证码教程

    pillow是Python平台事实上的图像处理标准库。PIL功能非常强大,但API却非常简单易用。 所以我们使用它在环境里做图像的处理。

    步履不停凡
  • python实现贪婪算法解决01背包问题

    01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn。01背包是背包问题中最简单的问题。01...

    步履不停凡
  • 关于wsgi协议的理解

    首先要了解 WSGI 规范的概念,WSGI(Web Server Gateway Interface)规范描述了web server(Gunicorn,uWSG...

    步履不停凡
  • Python——如何优雅的爬取公众号信息

    最近两个周业余时间在赶的一个项目,因为精力有限所以进展缓慢,索性就先把接近完善的这部分代码,先分享出来吧。

    Ed_Frey
  • Python 使用 PyQt5 开发的关机小工具分享

    前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具,

    砸漏
  • iOS开发之画图板(贝塞尔曲线)

      贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能。如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解。这篇博文...

    lizelu
  • 利用Python编写一个行业专用的小计算器

    前言:本文讲述的是如何利用python编程制作一个适用于指定行业的计算器,方便计算结果,涵盖的知识点由Python编写GUI界面程序,利用爬虫采集实时的汇率数据...

    用户7886150
  • 商业篇 | 使用python开发性格分析工具卖钱

    如此不均衡的贫富差距,各行业的领导者如何能管理好公司,让员工们即努力产出,又能安于现状呢?每个领导者必学的一门课程就是职场心理学。只有你充分了解员工心理与对应的...

    叫我龙总
  • python的tkinter编程(八)Entry组件的详细介绍,以登录界面作为讲解

    写一个按钮,绑定一个方法,当点击这个按钮的时候,就会执行这个方法,在这个方法里面 获取到对应的你输入的值,将获取到的值传到数据库里面进行比对,失败给一个返回的...

    一天不写程序难受
  • PyQt5信号、定时器及多线程

    信号是用于界面自动变化的一个工具,原理是信号绑定了一个函数,当信号被触发时函数即被调用

    嘘、小点声

扫码关注云+社区

领取腾讯云代金券