美文网首页
有序链表

有序链表

作者: 疯了个魔 | 来源:发表于2019-01-03 22:44 被阅读0次

    有序链表:17,26,31,54,77,93。由于 17 是最小项,它占据第一位置。同样,由于 93 是最大的,它占据最后的位置。
    排序通常是升序或降序。

    有序链表的抽象数据类型

    下面给出了一些可能的无序链表操作:

    操作 描述 返回值
    OrderedList 创建一个新的空链表,不需要参数 返回一个空链表
    add(item) 向链表中添加一个新项,需要 item 作为参数 不返回任何内容
    remove(item) 从链表中删除该项,需要 item 作为参数并修改链表
    search(item) 搜索链表中的项目,需要 item 作为参数 返回一个布尔值
    isEmpty() 检查链表是否为空,不需要参数 返回布尔值
    size() 返回链表中的项数,不需要参数 返回一个整数
    append(item) 将一个新项添加到链表的末尾,使其成为集合中的最后一项,需要 item 作为参数 不返回任何内容
    index(item) 返回项在链表中的位置,需要 item 作为参数 返回索引
    pop() 删除链表中的最后一个项 返回删除项
    pop(pos) 删除位置 pos 处的项,需要 pos 作为参数 返回删除项

    python实现有序链表

    创建有序链表

    class OrderedList:
        def __init__(self):
            self.head = None
    

    isEmpty和sizeremove方法同无序链表的实现方式一致,searchadd

    有序链表搜索

    搜索无序链表时需要我们一次遍历一个节点,直到找到我们正在寻找的节点或者没找到节点(None)。事实证明,相同的方法在有序链表中也有效。然而,在项不在链表中的情况下,我们可以利用该顺序来尽快停止搜索。
    下图展示了搜索45的过程:从链表的头部开始遍历,首先与 17 进行比较。由于 17 不是我们正在寻找的项,移动到下一个节点 26 。再次,这不是我们想要的,继续到 31,然后再到 54 。在这一点上,有一些不同。由于 54 不是我们正在寻找的项,我们以前的方法是继续向前迭代。然而,由于这是有序列表,一旦节点中的值变得大于我们正在搜索的项,搜索就可以停止并返回 False 。该项不可能存在于后面的链表中。

    有序链表搜索
    def search(self,item):
        current = self.head
        found = False
        stop = False
        
        while current != None and not found and not stop:
            if current.getData() == item
                found = True
            else:
                if current.getData > item:
                    stop = True
                else:
                    current = current.getNext()
    
        return found
    

    有序链表中添加项

    对于无序列表,add 方法可以简单地将新节点放置在链表的头部。 这是最简单的访问点。 不幸的是,这将不再适用于有序列表。需要在现有的有序列表中查找新项所属的特定位置。

    有序链表添加项
    如图,假设我们有由 17,26,54,77,93 组成的有序列表,并且我们要添加值31add 方法必须确定新项属于 2654 之间。
    def add(self,item):
        current = self.head
        previous = None
        stop = False
        
        while current != None and not stop:
            if current.getData() > item:
                stop = True
            else:
                previous = current
                current = current.getNext()
        
        temp = Node(item)
        if previous == None:
            temp.setNext(self.head)
            self.head = temp
        else:
            temp.setNext(current)
            previous.setNext(temp)
    

    相关文章

      网友评论

          本文标题:有序链表

          本文链接:https://www.haomeiwen.com/subject/wqlcrqtx.html