有序List

  • 有序列表是指列表中的元素是有顺序的,例如从小到大或者从大到小的顺序。
  • OrderedList():创建一个新的有序表
  • add(item):添加元素
  • remove(item):删除item元素
  • search(item):查看item是否在有序表中,返回一个布尔值
  • isEmpty(): 返回一个布尔值,判断有序表是否为空
  • size():返回有序表的长度,即元素的个数
  • index(item):返回元素item的索引值
  • pop():删除最后的元素
  • pop(pos):删除指定位置的元素
class Node:
    def __init__(self, initdata):
        self.data = initdata
        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 OrderedList:
    def __init__(self):
        self.head = None
    
    def isEmpty(self):
        return self.head == None
        
    def size(self):
        count = 0
        current = self.head
        while current != None:
            current = current.getNext()
            count += 1
        return count
    
    def remove(self, item):
        current = self.head
        previous = None
        found = False
        while not found and current != None:
            if current.getData() == item:
                found = True
            else:
                previous = current
                current = current.getNext()
        
        if previous == None:
            self.head = current.getNext()
        else:
            previous.setNext(current.getNext())
            
    def add(self, item):
        '''和无序表不同'''
        temp = Node(item)
        
        previous = None
        current = self.head
        stop = False
        
        while current != None and not stop:
            if current.getData() > item:
                stop = True
            else:
                previous = current
                current = current.getNext()
                     
        if previous == None:
            temp.setNext(self.head)
            self.head = temp
        else:
            temp.setNext(current)
            previous.setNext(temp)      
            
    def search(self, item):
        '''和无序表不同,引入了提前终止条件(列表是升序)'''
        current = self.head
        stop = False
        found = False
        while not found and current != None and not stop:
            if current.getData() == item:
                found = True
            else:
                if current.getData() < item:
                    current = current.getNext()
                else:
                    stop = True
        return found
    
    def pop(self, pos=None):
        if self.isEmpty():
            print("list is empty")
        elif pos == None:
                current = self.head
                previous = None
                pre_previous = None
            
                while current != None:
                    pre_previous = previous
                    previous = current
                    current = current.getNext()
                pre_previous.setNext(current)
        else:
            current = self.head
            previous = None
            for i in range(pos):
                previous = current
                current = current.getNext()
            previous.setNext(current.getNext())
        
            
    def index(self, item):
        current = self.head
        count = 0
        found = False
        while not found and current != None:
            if current.getData() == item:
                found = True
            else:
                current = current.getNext()
                count += 1
        return count
    
    
mylist = OrderedList()
mylist.add(31)
mylist.add(77)
mylist.add(17)
mylist.add(93)
mylist.add(26)
mylist.add(54)

print(mylist.index(77))
print(mylist.size())
print(mylist.search(93))
print(mylist.search(31))

mylist.pop(pos=2)
print(mylist.search(31))
# mylist.remove(17)
print(mylist.size())
mylist.pop()
print(mylist.size())
4
6
True
True
False
5
4
m = OrderedList()
m.pop()
list is empty
  • 说明:上述方法中index()、pop()等是自己编写,自己目前检查没错,也可能存在一些特殊的例子,若有错误,欢迎指正!
  • 在这里插入图片描述
  • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值