python链表、栈、队列、树

class Stack:#栈
     def __init__(self):
         self.items = []

     def isEmpty(self):
         return self.items == []

     def push(self, item):
         self.items.append(item)

     def pop(self):
         return self.items.pop()

     def peek(self):
         return self.items[len(self.items)-1]

     def size(self):
         return len(self.items)

class MinStack:#python最小栈

    def __init__(self):
        self._list=[]


    def push(self, val: int) -> None:
        self._list.append(val)
        self._min=min(self._list)


    def pop(self) -> None:
        self._list.pop()
        self._min=not self._list or min(self._list)


    def top(self) -> int:
        return self._list[-1]


    def getMin(self) -> int:
        return self._min
#链表
class Node(object):#节点
    def __init__(self):
        self.val = None
        self.next = None

class Node_handle():
    def __init__(self):
        self.cur_node = None
  # 查找
    def find(self,node,num,a = 0):
        while node:
            if a == num:
                return node
            a += 1
            node = node.next
  # 增加
    def add(self,data):
        node = Node()
        node.val = data
        node.next = self.cur_node
        self.cur_node = node
        return node
  # 打印
    def printNode(self,node):
        while node:
            print ('\nnode: ', node, ' value: ', node.val, ' next: ', node.next)
            node = node.next
   # 删除
    def delete(self,node,num,b = 1):
        if num == 0:
            node = node.next
            return node
        while node and node.next:
            if num == b:
                node.next = node.next.next
            b += 1
            node = node.next
        return node
  # 翻转
    def reverse(self,nodelist):
        list = []
        while nodelist:
            list.append(nodelist.val)
            nodelist = nodelist.next
        result = Node()
        result_handle =Node_handle()
        for i in list:
            result = result_handle.add(i)
        return result

if __name__ == "__main__":
    l1 = Node()
    ListNode_1 = Node_handle()
    l1_list = [1, 8, 3]
    for i in l1_list:
        l1 = ListNode_1.add(i)
    ListNode_1.printNode(l1)
    l1 = ListNode_1.delete(l1,0)
    ListNode_1.printNode(l1)
    l1 = ListNode_1.reverse(l1)
    ListNode_1.printNode(l1)
    l1 = ListNode_1.find(l1,1)
    ListNode_1.printNode(l1)
import Queue
#队列
q = Queue.Queue()

for i in range(5):
    q.put(i)

while not q.empty():
    print q.get()

#coding=utf-8
class Node(object):#先获取到节点,节点有两个作用,1.进行一个指针(假设的)一个指向,
                    # 2,。就是现在这个位置上的元素的值
    def __init__(self,val):
        self.next=None  #指针的下一个,用于指向内容,先给初始化设置为空
        self.val=val   #val是它原本的值,

class Queue(object):
    def __init__(self): #初始化两个属性,分别代表first头和last
        self.first=None
        self.last=None
    def enter(self,n):  #开始进队列
        #实例节点
        n = Node(n)  # 指定在第5个位置上
        #进队列时需要先判断队列是不是空,如何判断,通过判断first是不是空
        if self.first==None:
            self.first=n  #为什么为空了还要把值赋值给first
            self.last=self.first
        else:#进队列,first不变,last的位置向后移动一个
            self.last.next=n   #指针指向后面一个  #把下移后的指向给lst.netx
            self.last=n   #赋值值给last

    def quit(self): #退出队列,
        #退出队列就是
        if self.first==None:
            return None
        else:
            tmp=self.first.val   #获取项目的值
            self.first=self.first.next
        return tmp
    def allQuit(self):#全部退出
        Lists=[] #用户保存数据
        while self.first!=None:
            Lists.append(self.first.val)  #把每一次的值存入到一个list中
            self.first=self.first.next
        return Lists

if __name__=="__main__":
    q=Queue()
    q.enter(1)
    q.enter(2)
    q.enter(3)

   # print q.quit()
   # print q.quit()
   # print q.quit()

    print q.allQuit()
class BinaryTree:#python树
    def __init__(self,rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None
 
    def insertLeft(self,newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t
 
    def insertRight(self,newNode):
        if self.rightChild == None:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t
 
 
    def getRightChild(self):
        return self.rightChild
 
    def getLeftChild(self):
        return self.leftChild
 
    def setRootVal(self,obj):
        self.key = obj
 
    def getRootVal(self):
        return self.key
 
 
r = BinaryTree('a')
print(r.getRootVal())
print(r.getLeftChild())
r.insertLeft('b')
print(r.getLeftChild())
print(r.getLeftChild().getRootVal())
r.insertRight('c')
print(r.getRightChild())
print(r.getRightChild().getRootVal())
r.getRightChild().setRootVal('hello')
print(r.getRightChild().getRootVal())

具体细节讲解:python 进阶——多种数据结构的封装(链表、栈、队列、二叉树)_代码人的博客的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值