算法与数据结构

【Python数据结构与算法笔记day16】3. 链表+为什么需要链表 +链表的定义

白昼怎懂夜的黑 提交于 2020-02-02 08:12:33
文章目录 3. 链表 链表 为什么需要链表 链表的定义 3. 链表 链表 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 链表的定义 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。 来源: CSDN 作者: 汪雯琦 链接: https://blog.csdn.net/qq_35456045/article/details/104134192

归纳程序员必须掌握的核心算法(详细)

大城市里の小女人 提交于 2020-02-02 07:22:59
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我, 数据结构与算法应该要学习到哪个程度呢? ,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是 零散 的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家。大家也可以留言区补充。 一、算法最最基础 1、时间复杂度 2、空间复杂度 一般最先接触的就是时间复杂度和空间复杂度的学习了,这两个概念以及如何计算,是必须学的,也是必须最先学的,主要有最大复杂度、平均复杂度等,直接通过博客搜索学习即可。 文章推荐: 算法分析神器—时间复杂度 二、基础数据结构 1、线性表 列表(必学) 链表(必学) 跳跃表(知道原理,应用,最后自己实现一遍) 并查集(建议结合刷题学习) 不用说,链表、列表必须,不过重点是链表。 三分钟基础数据结构:如何轻松手写链表? 以后有面试官问你「跳跃表」,你就把这篇文章扔给他 2、栈与队列 栈(必学) 队列(必学) 优先队列、堆(必学) 多级反馈队列(原理与应用) 特别是优先队列,再刷题的时候,还是经常用到的,队列与栈,是最基本的数据结构,必学。可以通过博客来学习。相关文章: 三分钟基础知识:什么是栈?

数据结构经典十套卷之五

走远了吗. 提交于 2020-02-02 06:40:36
一、选择题 (20 分 ) 1 .数据的最小单位是( )。 (A) 数据项 (B) 数据类型 (C) 数据元素 (D) 数据变量 2 .设一组初始记录关键字序列为 (50 , 40 , 95 , 20 , 15 , 70 , 60 , 45) ,则以增量 d=4 的一趟 希尔排序 结束后前 4 条记录关键字为( )。 (A)40 , 50 , 20 , 95 (B)15 , 40 , 60 , 20 (C)15 , 20 , 40 , 45 (D)45 , 40 , 15 , 20 3 .设一组初始记录关键字序列为 (25 , 50 , 15 , 35 , 80 , 85 , 20 , 40 , 36 , 70) ,其中含有 5 个长度为 2 的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结果为( )。 (A) 15 , 25 , 35 , 50 , 20 , 40 , 80 , 85 , 36 , 70 (B) 15 , 25 , 35 , 50 , 80 , 20 , 85 , 40 , 70 , 36 (C) 15 , 25 , 35 , 50 , 80 , 85 , 20 , 36 , 40 , 70 (D) 15 , 25 , 35 , 50 , 80 , 20 , 36 , 40 , 70 , 85 4 .函数 substr(

【Python数据结构与算法笔记day17】3.1. 单向链表

左心房为你撑大大i 提交于 2020-02-02 04:56:00
文章目录 3.1. 单向链表 单向链表 节点实现 单链表的操作 单链表的实现 链表与顺序表的对比 3.1. 单向链表 单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。 表元素域elem用来存放具体的数据。 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。 节点实现 class SingleNode(object): """单链表的结点""" def __init__(self,item): # _item存放数据元素 self.item = item # _next是下一个节点的标识 self.next = None 单链表的操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历整个链表 add(item) 链表头部添加元素 append(item) 链表尾部添加元素 insert(pos, item) 指定位置添加元素 remove(item) 删除节点 search(item) 查找节点是否存在 单链表的实现 class SingleLinkList(object): """单链表""" def __init__(self

数据结构经典十套卷之六

狂风中的少年 提交于 2020-02-02 03:51:13
一、选择题 (30 分 ) 1 . 设一组权值集合 W={2 , 3 , 4 , 5 , 6} ,则由该权值集合构造的 哈夫曼树中带权路径长度之和 为( )。 (A)20 (B) 30 (C) 40 (D) 45 2 .执行一趟 快速排序 能够得到的序列是( )。 (A)[41 , 12 , 34 , 45 , 27] 55 [72 , 63] (B)[45 , 34 , 12 , 41] 55 [72 , 63 , 27] (C)[63 , 12 , 34 , 45 , 27] 55 [41 , 72] (D)[12 , 27 , 45 , 41] 55 [34 , 63 , 72] 3 .设一条单链表的头指针变量为 head 且该链表没有头结点,则其判空条件是( )。 (A) head==0 (B) head->next==0 (C)head->next==head (D)head!=0 4 .时间复杂度不受数据初始状态影响而恒为 O(nlog2n) 的是( )。 (A) 堆排序 (B) 冒泡排序 (C) 希尔排序 (D) 快速排序 5 . 设二叉树的先序遍历序列和后序遍历序列正好相反,则该二叉树满足的条件是( )。 解: DLR LRD (A) 空或只有一个结点 (B) 高度等于其结点数 (C) 任一结点无左孩子 (D) 任一结点无右孩子 6 .

[数据结构与算法]08 队列( Queue )以及队列实现的三种方式( Java 版)

三世轮回 提交于 2020-02-02 03:07:44
队列 说队列的时候,常常会想到栈,因为栈是后进先出,而队列则是先进先出. 关于栈,前面已经写过了: [数据结构与算法]05 Stack 经典面试题之判断字符串是否合法( Java 版) 这篇文章的主要焦点就在队列上了. 队列,你的第一反应是不是排队?不管是在食堂买饭,还是在银行办理业务,或者进高铁站的时候,都会排队. 排队有一个很明显的特点:早来的人,就会早点儿办完事情. 这就是队列:先进先出. 队列可以用数组实现,叫做顺序队列.也可以用链表实现,叫做链式队列. 在这里,分别用数组和链表来实现一下. 数组实现队列 使用数组来实现队列,相对来说还是比较简单的,因为数组和队列一样都是线性表结构. 废话不多说,咱们直接看代码 /** * 用数组实现队列 * @author 郑璐璐 * @date 2020-1-29 15:51:32 */ public class ArrayQueue { /** 数组:items,数组大小:n */ private String [ ] items ; private int n = 0 ; /** head表示队头下标,tail表示队尾下标 */ private int head = 0 ; private int tail = 0 ; /** 申请一个大小为capacity的数组 */ public ArrayQueue ( int

【Python数据结构与算法笔记day18】3.2. 单项循环链表

坚强是说给别人听的谎言 提交于 2020-02-02 02:55:00
文章目录 3.2. 单项循环链表 单向循环链表 操作 实现 3.2. 单项循环链表 单向循环链表 单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 操作 is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 insert(pos, item) 在指定位置pos添加节点 remove(item) 删除一个节点 search(item) 查找节点是否存在 实现 class Node ( object ) : """节点""" def __init__ ( self , item ) : self . item = item self . next = None class SinCycLinkedlist ( object ) : """单向循环链表""" def __init__ ( self ) : self . _head = None def is_empty ( self ) : """判断链表是否为空""" return self . _head == None def length ( self ) : """返回链表的长度""" # 如果链表为空,返回长度0 if self . is

【Python数据结构与算法笔记day19】3.3. 双向链表

时光怂恿深爱的人放手 提交于 2020-02-02 02:33:03
文章目录 3.3. 双向链表 双向链表 操作 实现 3.3. 双向链表 双向链表 一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。 操作 is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 insert(pos, item) 指定位置添加 remove(item) 删除节点 search(item) 查找节点是否存在 实现 class Node ( object ) : """双向链表节点""" def __init__ ( self , item ) : self . item = item self . next = None self . prev = None class DLinkList ( object ) : """双向链表""" def __init__ ( self ) : self . _head = None def is_empty ( self ) : """判断链表是否为空""" return self . _head == None def length ( self ) : """返回链表的长度"""

数据结构经典十套卷之八

末鹿安然 提交于 2020-02-02 02:02:45
一、选择题 (30 分 ) 1. 字符串的长度是指( )。 (A) 串中不同字符的个数 (B) 串中不同字母的个数 (C) 串中所含字符的个数 (D) 串中不同数字的个数 2. 建立一个长度为 n 的有序单链表的时间复杂度为( ) (A)O(n) (B) O(1) (C) O(n2) (D) O(log2n) 3. 两个字符串相等的充要条件是( )。 (A) 两个字符串的长度相等 (B) 两个字符串中对应位置上的字符相等 (C) 同时具备 (A) 和 (B) 两个条件 (D) 以上答案都不对 4. 设某散列表的长度为 100 ,散列函数 H(k)=k % P ,则 P 通常情况下最好选择( )。 解:实践 证明,当 P 取小于哈希表长的最大质数时,产生的哈希函数较好 (A)99 (B) 97 (C) 91 (D) 93 5. 在二叉排序树中插入一个关键字值的平均时间复杂度为( )。 在二叉排序树中插入一个结点的时间复杂度为( O(n) 最差 ) (A)O(n) (B) O(1og2n) (C) O(nlog2n) (D) O(n2) 6. 设一个顺序有序表 A[1:14] 中有 14 个元素,则采用二分法查找元素 A[4] 的过程中比较元素的顺序为 ( ) 。 解: 1 14 7 1 6 3 4 6 5 4 5 4 (A)A[1] , A[2] , A[3] , A[4] (B)A

【Python数据结构与算法笔记day22】5. 队列

我的梦境 提交于 2020-02-02 01:33:00
文章目录 5. 队列 队列 5. 队列 队列 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。 来源: CSDN 作者: 汪雯琦 链接: https://blog.csdn.net/qq_35456045/article/details/104134290