python高级(3)

1、栈跟队列
栈(也称下压栈,堆栈)
是仅允许在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom)。栈是一种后进先出(Last In First Out)的线性表,简称(LIFO)结构。
• 队列(queue)
是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

栈与队列的区别

○ 栈:后进先出
○ 队列:先进先出
它们都可以使用顺序存储结构和链式存储结构两种方式来实现。

2、排序
冒泡排序和选择排序
冒泡:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。

def Bubble_sort(list):
    n = len(list)
    #利用外层循环循环一次,内层循环循环一边的特性,每循环一次,找出一个最大值
    for i in range(n-1):
        #循环比较相邻两个数的大小,
        for j in range(n-1-i):
            #如果前面数大于后面数,就交换变量的值
            if list[j]>list[j+1]:
                list[j],list[j+1]=list[j+1],list[j]
if __name__ == '__main__':
    alist = [99,64,88,77,95,82]
    Bubble_sort(alist)
    print(alist)

选择:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置然后,再从剩余未排序元素中继续寻找最小(大)元素

def select_sort(list):
    n = len(alist)
    for i in range(n-1):
        #   给min_index设置最小值
        min_index = i
        #   遍历无序列表,去比较,i+1
        for  j in range(i+1,n):
            #   判断当前位置是否小于最小值,如果小于,记录位置
            if list[min_index]>list[j]:
                #记录其索引
                min_index = j
        if min_index != i :
            #数值交换
            list[min_index],list[i]=list[i],list[min_index]

if __name__ == '__main__':
    alist = [99,64,88,77,95,82]
    select_sort(alist)
    print(alist)

3、二分查找(Binary Search),又称折半查找。
二分查找的前提是符号表中的记录必须有序
• 在符号表中取中间记录作为比较对象,

□ 1. 若中间值和给定值相等,则查找成功;
□ 2. 若给定值小于中间值,则在左半区继续查找,否则在右半区进行查找;
□ 3. 不断重复直到成功或失败(循环)。


def Binary_search(list,item):
    first = 0                       #开始下标
    last = len(list)-1              #末尾下标
    while first<=last:
        mid = (first+last)//2       #将列表对折取中间值下标(取整)
        if list[mid] == item:       #如果查找的值等于对折后值,则查找成功
            return True
        elif item < list[mid]:  #如果查找的值在对折后值的左边,则下标-1
            last = mid - 1
        else:                    #如果查找的值在对折后值的右边,则下标+1
            first = mid + 1
    else:
        return False
if __name__ == '__main__':
    alist = [1,3,5,7,9,11,33,55,77,99,111]
    print(Binary_search(alist,33))

2、树(英语:tree)
是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构
它具有以下的特点

□ 每个节点有零个或多个子节点;
□ 没有父节点的节点称为根节点;
□ 每一个非根节点有且只有一个父节点;
□ 除了根节点外,每个子节点可以分为多个不相交的子树;

树的种类

这里是引用二叉树:
完全二叉树
平衡二叉树
排序二叉树

常见的一些树的应用场景

• 1. xml,html等,那么编写这些东西的解析器的时候,不可避免用到树
• 2. 路由协议就是使用了树的算法
• 3. mysql数据库索引(B+树)
• 4. 文件系统的目录结构
• 5. 很多经典的AI算法其实都是树搜索

树的两种重要的遍历模式是:
深度优先遍历

○ 先序遍历(preorder)
◊ 根节点->左子树->右子树
○ 中序遍历(inorder)
◊ 左子树->根节点->右子树
○ 后序遍历(postorder)
○ 左子树->右子树->根节点

广度优先遍历

○ 从树的root开始,从上到下从从左到右遍历整个树的节

3、tcp 和 udp

tcp 是传输控制协议,它是面向连接(三系握手)的,能保证数据的可靠性和准确性
udp 是用户数据报协议,全拼(User Datagram Protocol),它不面向连接,可以指定ip发送数据,不能保证数据的准确性和稳定性,得到数据会有可能产生错误或者丢失,但是udp传输速度快。
提示:udp每次只能发送少量的数据,每个数据包最大是64K

不同点:

tcp需要连接,udp不需要
tcp可以保证数据的准确性和有效性(数据包如果错乱会自动进行排序),udp保证不了
tcp超时重传,udp没有
tcp有应答机制,udp没有
tcp有流量控制,udp没有,udp没有流量控制如果死循环一直发送数据,会导致电脑卡死

tcp特点;

1、多数数据应用需要保证数据的准确性都采用的是 tcp,比如:文件上传和下载
2、udp 多数用在视频传输,比如qq视频等
3、udp 适合做广播,传输速度快,tcp 不适合做广播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值