• python-数据结构代码 检索


    def sequentialSearch(alist,item):
        pos = 0
        found = False
        while pos < len(alist) and not found:
            if alist[pos] == item:
                found = True
            else:
                pos = pos + 1
        return found
    
    def binarySearch(alist,item):
        first = 0
        last = len(alist)-1
        found = False
        while first<=last and not found:
            midpoint = (first + last)//2
            if alist[midpoint] == item:
                found = True
            else:
                if item < alist[midpoint]:
                    last = midpoint - 1
                else:
                    first = midpoint + 1
        return found
    
    def diguiBinarySearch(alist,item):
        if len(alist) == 0:
            return False
        else:
            midpoint = len(alist)//2
            if alist[midpoint] == item:
                return True
            else:
                if item<alist[midpoint]:
                    return diguiBinarySearch(alist[:midpoint],item)
                else:
                    return diguiBinarySearch(alist[midpoint+1:],item)
    
    def hash(astring,tablesize):
        sum = 0
        for pos in range(len(astring)):
            sum = sum + ord(astring[pos])
        return sum%tablesize
    
    class HashTable:
        def __init__(self):
            self.size = 11
            self.slots = [None] * self.size
            self.data = [None] * self.size    
    
        def put(self,key,data):
            hashvalue = self.hashfunction(key,len(self.slots))
            if self.slots[hashvalue] == None:
                self.slots[hashvalue] = key
                self.data[hashvalue] = data
            else:
                if self.slots[hashvalue] == key:
                    self.data[hashvalue] = data #replace
                else:
                    nextslot = self.rehash(hashvalue,len(self.slots))
                    while self.slots[nextslot] != None and self.slots[nextslot] != key:
                        nextslot = self.rehash(nextslot,len(self.slots))
                    if self.slots[nextslot] == None:
                        self.slots[nextslot] = key
                        self.data[nextslot] = data
                    else:
                        self.data[nextslot] = data #replace
    
        def hashfunction(self,key,size):
            return key%size
    
        def rehash(self,oldhash,size):
            return (oldhash+1)%size
    
        def get(self,key):
            startslot = self.hashfunction(key,len(self.slots))
            data = None
            stop = False
            found = False
            position = startslot
            while self.slots[position] != None and not found and not stop:
                if self.slots[position] == key:
                    found = True
                    data = self.data[position]
                else:
                    position = self.rehash(position,len(self.slots))
                    if position == startslot:
                        stop = True
            return data
    
        def __getitem__(self,key):
            return self.get(key)
    
        def __setitem__(self,key,data):
            self.put(key,data)
    
    H=HashTable()
    H[54]="cat"
    H[26]="dog"
    H[93]="lion"
    H[17]="tiger"
    H[77]="bird"
    H[31]="cow"
    H[44]="goat"
    H[55]="pig"
    H[20]="chicken"
    #print(H.slots)
    #print(H.data)
    #print(H[20])
    H[20]='duck'
    print(H[20])
    print(H.data)
    print(H[99])
    # testlist = [1, 2, 32, 8, 17, 19, 42, 13, 0]
    # print(sequentialSearch(testlist, 3))
    # print(sequentialSearch(testlist, 13))
    
    # testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
    # print(binarySearch(testlist, 3))
    # print(binarySearch(testlist, 13))
  • 相关阅读:
    git
    zabbix监控的硬件及网站分析
    zabbix监控web网站
    linux iptables小记
    python画折线图
    开发总结
    JWT的一个demo
    在ASP.NET Core的过滤器中使用依赖注入
    消息队列的一些概念
    删除旧文件的批处理程序
  • 原文地址:https://www.cnblogs.com/lely/p/10060101.html
Copyright © 2020-2023  润新知