数据结构

目录

二分法

堆栈


二分法

二分法查找适用于数据量较大时,但是数据需要先排好顺序。主要思想是:(设查找的数组区间为array[low, high])

(1)确定该区间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间将缩小一半,递归查找即可。时间复杂度为:O(log2n)

l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

找到l中的72

可以实现的办法:

l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
for i in l:
    if i == 72:
        print(i)

用否循环可以实现,可是如果数据量特别大的时候,要找的元素在最后一个,这就需要从前向后一个一个的查找

这时我们可以用二分法查找:

l = [2,3,10,5,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
l.sort()
def func(l,aim):
    #取中间值的索引
    mid = (len(l)-1)//2   
    if l:
        if l[mid] == aim:
            print('呀,找到了',aim)
        elif l[mid] > aim:
            func(l[:mid],aim)
        elif l[mid] < aim:
            func(l[mid+1:],aim)
        else:
            print('找不到')
func(l,72)
结果:
呀,找到了 72

堆栈

是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除,堆栈,先进后出FILO—First-In/Last-Out)

利用堆栈的思想实现的问题:

1 计算文件夹的大小

import os
path = input('输入文件夹的绝对路径')
l = [path]
def file_size(path):
    size = 0
    #列表不为空,则一直循环,列表存u放所有的目录
    while l:
        path = l.pop() # E:\oldboy20\python脱产班20期
        lst = os.listdir(path) #path下的所有文件和文件夹
        for name in lst:
            #将path下的文件和文件夹做路径的拼接,取绝对路径
            path_son = os.path.join(path, name)
            if os.path.isfile(path_son):
                #是文件则将文件的大小计算出来,并累加
                size += os.path.getsize(path_son)
            else:
                #是目录则加入列表中
                l.append(path_son)
    return size
size = file_size(path)
print(size)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值