• 路飞学城Python-Day171


    Evernote Export

    线性结构:
    python的列表操作
    列表是如何存储的:顺序存储的,是一块连续的内存,内存是一堆格子,列表是一串连续的编号
    32位机器上一个整数占4个字节
    数组和列表有2点不同,1.数组的元素类型要求是相同的;2.数组长度固定
    列表:1.python中列表的元素类型可以不同(python列表中存储的不是数值而是地址);2.python列表会根据输入的长度自动根据序列来递增列表
    列表的append时间复杂度是O(1)
    列表的插入和删除的时间复杂度是O(n)
    栈的结构:
    栈是一个数据集合,可以理解为只能在一端插入或进行删除操作的列表
    栈的特点:后进先出LIFO(last in first out)
    栈的概念:栈顶、栈底
    栈的基本操作:
        进栈(压栈):push
        出栈:pop
        取栈顶:gettop
    栈的应用
    括号匹配问题:给一个字符串,其中包括小括号、中括号、大括号、求该字符串中的括号是否匹配
    队列
    队列是一个数据集合,仅允许在列表的一端进行插入,另一端进行删除
    进行插入的一端称为队尾(rear),插入动作称为进队或入队
    进行删除的一端称为队头(front),删除动作称为出队
    队列的性质:先进先出(First-in, First-out)
    迷宫的两种方式
    栈-深度优先搜索
    思路:从一个节点开始,任意找下一个能走的点,当找不到能走的点,退回上一个点寻找是否有其他方向的点
    使用栈存储当前路径
    队列-广度优先搜索
    思路:从一个节点开始,寻找所有接下来能继续走的点,继续寻找,直到找到出口
    使用队列存储当前正在考虑的节点
    链表
    链表是一种线性数据结构,链表是由一系列节点组成的元素集合。
    每个节点包含两个部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接,最终串联成一个链表。
    创建链表:
        头插法
        尾插法
    复杂度分析
    按元素值查找O(n)
    按下标查找O(n)
    在某一元素中插入O(1)
    删除元素O(1)
    链表在插入和删除的操作上明显快于顺序表
    链表的内存快于灵活的分配:试利用链表重新实现栈和队列
    链表这种链式存储的数据结构对树和图的结构有很大的启发性
    哈希表(散列表)
    哈希表通过哈希函数来计算数据存储位置的数据结构,通常支持一下操作
    insert(key,value):插入键值对(key,value)
    get(key):如果存在键为key的键值则返回其value,否则返回空值
    delete(key):删除key的键值对
    直接寻址表
    当关键字的全域U比较小时,直接寻址是一种简单而有效的方法
    直接寻址的技术缺点:
    当域U很大时,需要消耗大量内存,很不实际
    如果域U很大而实际出现的key很少,则大量空间被浪费
    无法处理关键字不是数字的情况
    哈希表,是一种线性表的存储结构。哈希表由一个直接寻址表和一个哈希函数组成,哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标
    假设有一个长度为7的哈希表,哈希函数h(k) = k%7,元素集合{14,22,3,5}的存储方式如下图
    哈希冲突
    由于哈希的大小是有限的,而要存储的值的总数量是无限的,因此对于任何哈希函数,都会出现两个不同的值但是映射到同个位置上的情况,这种情况称为哈希冲突
    解决哈希冲突方法
    1.开放寻址法:如果哈希函数返回的位置已经有值,则可以向后探查新的位置来存储这个值
    线性查探:如果位置被占用,则探查i+1,i+2...
    二次查探:如果位置i被占用,则探查i+1^2,i-1^2,i+2^2,i-2^2
    二度哈希:有n个哈希函数,当使用第一个哈希函数h1发生冲突时,则尝试使用 h2,h3...
    2.拉链法:哈希表每个位置都连接一个链表,当冲突发生时,冲突的元素将被加到该位置链表的最后
    树与二叉树
    树是一种结构,比如目录结构
    树是一种可以递归定义的数据结构
    树是由n个节点组成的集合
        如果n=0,那这是一颗空树
        如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树
    二叉搜索树
    二叉搜索树是一颗二叉树且满足性质:设x是二叉树的一个节点。如果y是x左子树的一个节点,那么y.key<=x.key
    如果y是x右子树的一个节点,那么y.key>=x.key
    二叉搜索树的操作:查询、插入、删除
     
     
     
     
     
     
     
     
     
     
     
     
     
    Win a contest, win a challenge
  • 相关阅读:
    在代码里面和在manifest里面配置去标头;
    textview实现跑马灯的效果
    下载完apk安装包后实现自动安装;
    xlistview刷新加载
    handler结合子线程实现pulltorefresh刷新加载;
    百度定位,发起定位
    商品条形码(JBarcode)Java版(二)
    商品条形码(JBarcode)
    Intellij IDEA 鼠标悬浮放上去提示参数
    MySQL 正则表达式,部分不同于Java或者JS正则
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/10098961.html
Copyright © 2020-2023  润新知