zoukankan      html  css  js  c++  java
  • Python无序链表

    类的声明:


    节点

    class node:  # 这里不用加括号,具体参数都在init函数里,这也是和函数区别的一部分,函数的升级和高级有序集合
        def __init__(self, val):
            self.data = val
            self.next = none
        
        def getData(self):
            return self.data
        
        def getnext(self):
            return self.next
    
        def setData(self, newData):
            self.data = newData
    
        def setNext(self, newNext):
            self.next = newNext
    

    链表

    class unorderList:  # 只存储表头的信息
        def __init__(self):
            self.head = None  # 注意这里是大写
        
        def isEmpty(self):
            return self.head == None
    
        def add(self, item):  # 由于是从首向尾遍历,那么自然是向首添加元素方便
            newNode = node(item)
            newNode.setNext(self.head)
            self.head = newNode
        
        def size(self):
            count = 0
            p = self.head
            while p != None:
                count = count + 1
                p = p.getnext()
            return count
        
        def search(self, content):
            p = self.head
            found = False  # 大写!!有了found这个较为特殊的变量时,代码更加易读清晰
    
            while p != None and not found:
                if p.getData == content:
                    found = True
                else:
                    p = p.getnext()
            
            return found
    
        def remove(self, content):
            previous  = None
            current = self.head
            found = False
            while current != None and not found:
                if current.getData() == content:
                    found = True
                else:
                    previous = current
                    current = current.getnext()
            if found:
                if previous == None:
                    self.head = self.head.getnext()
                else:
                    previous.setNext(current.getnext())
    
        def append(self, content):  # 在末尾加
            newNode = node(content)
            current = self.head
            previous = None
            while current != None:
                previous = current
                current = current.getnext()
            if previous != None:
                previous.setNext(newNode)  # 注意这是函数而不是参数不能用等于,而且修改对象(这里是node)的参数也只能通过方法
            else:
                current.head = newNode  # 一定要区分上面的的if
    
        def pop(self):  # 删掉链尾的元素
            current = self.head
            if current.getnext == None:
                print("Error: List is empty!")
            else:
                previous = None
                while current.getnext():
                    previous = current
                    current = current.getnext()
                previous.setNext(None)
        
        def printList(self):
            p = self.head
            while p:
                print(p.data)
                p = p.getnext()
    
    MyList = unorderList()
    MyList.add(1)
    MyList.add(2)
    MyList.add(3)
    MyList.add(4)
    MyList.pop()
    MyList.append(1)  # pop和append抵消了
    MyList.remove(3)
    print("search answer is ", MyList.search(3))
    print("MyList's size is %d" % MyList.size())
    MyList.printList()
    
  • 相关阅读:
    L1和L2正则
    Python基础(一)
    消息分发
    StringList 自定义快速排序
    Delphi Length函数
    接口的委托实现(通过接口)
    接口委托实现--通过类的对象
    排序
    Socket编程(摘抄)
    Delphi线程同步
  • 原文地址:https://www.cnblogs.com/SKEZhi/p/13344026.html
Copyright © 2011-2022 走看看