用链表实现有序表

有序表就是表中的元素是按一定的逻辑顺序排列的,如按照数字大小排列,或字符的大小排列等等。
使用链表进行一个构造由小到大排列的有序表。当加入新的数据时,需要对当前表中的数据进行比较,找到第一个比自己大的值,然后再插入。当进行搜索时,只要当前值比要搜索值大,则无需进行后面部分的遍历,直接返回False。

class Node:
    def __init__(self,item):
        self.item=item
        self.next=None
#假设有序表的顺序为数值由小到大排列
class orderedList:
    def __init__(self,node=None):
        self.__head=node
        
    def add(self,item):
        node=Node(item)
        if self.__head==None:
            self.__head=node
            return
        if item<self.__head.item:
            node.next=self.__head
            self.__head=node
        else:
            prev=None
            cur=self.__head
            while cur!=None:
                if item<cur.item:
                    node.next=cur
                    prev.next=node
                    break
                else:
                    prev=cur
                    cur=cur.next
            if cur==None:
                prev.next=node
                
    def search(self,item):
        if self.__head==None:
            return False
        cur=self.__head
        while cur!=None:
            if cur.item==item:
                return True
            elif cur.item<item:
                cur=cur.next
            else:
                return False        
            
    def travel(self):
        if self.__head==None:
            print(None)
        else:
            cur=self.__head
            while cur!=None:
                print(cur.item)
                cur=cur.next

验证

ordered=orderedList()
ordered.add(2)
ordered.add(0)
ordered.add(5)
ordered.add(3)
ordered.add(7)
ordered.add(4)
ordered.travel()
print(ordered.search(4))
########输出#########
0
2
3
4
5
7
True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值