第一篇 基本概念 01 什么是数据结构 02 什么是算法 03 应用实例-最大子列和问题 第二篇 线性结构 01 线性表及其实现 02 堆栈 03 队列 04 应用实例-多项式加法运算 05 小白专场-多项式乘法与加法运算-c语言实现 05 小白专场-多项式乘法与加法运算-python语言实现 第三篇 树(上) 01 树与树的表示 02 二叉树及存储结构 03 二叉树的遍历 04 小白专场-树的同构-c语言实现 04 小白专场-树的同构-python语言实现 第三篇 树(中) 01 二叉搜索树…
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学想要转行机器学习,也确实掌握了一些机器学习模型原理并具备基础的编程功底,但是在笔试.面试的时候还会掉链子,大概率是数据结构和算法知识薄弱.数据结构和算法是程序员的内功心法和基本功.无论是人工智能还是其它计算机科学领域,掌握扎实的数据结构和算法知识,往往会助力不少! 北京大学公开课<数据结构与算法Pyth…
学习来源 北京大学-数据结构与算法Python版 目标 了解计算机科学.程序设计和问题解决的基本概念 计算机科学是对问题本身.问题的解决.以及问题求解过程中得出的解决方案的研究.面对一 个特定问题,计算机科学家的目标是得出一个算法(algorithm) ,写出一组解决该问题可能出现的任何情况的步步为营的指令.算法通过有限过程解决问题.算法是解决方案. 计算机科学可以被看作是对算法的研究. 可计算 抽象 理解什么是"抽象"以及抽象在问题解决过程中的作用 定义 抽象使我们能以一种区分所谓的…
算法的提出 算法的概念 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用. 算法是独立存在的一种解决问题的方法和思想. 对于算法而言,实现的语言并不重要,重要的是思想. 算法可以有不同的语言描述实现版本(如C描述.C++描述.Python描述等),我们现在是在用Python语言进行描述实现. 算法的五大特性 输入: 算法具有0个或多个…
一.数据结构与算法概述 数据结构与算法的定义 我们把现实中大量而且非常复杂的问题以特定的数据类型(个体)和特定的存储结构(个体的关系)保存到相应的主存储器(内存)中,以及在此基础上为实现某个功能而执行的相应操作,这个相应操作也叫做算法. 数据结构 = 个体 + 个体的关系 算法 = 对存储数据的操作 二.衡量算法的标准 时间复杂度 指的是大概程序执行的次数,并非程序执行的时间 空间复杂度 指的是程序执行过程中,大概所占有的最大内存 常用的查找 顺序查找 lowB for循环 时间复杂度 O(n)…
有两种结构类似于数组,但在添加和删除元素时更加可控,它们就是栈和队列. 第三章 栈 栈数据结构 栈是一种遵循后进先出(LIFO)原则的有序集合.新添加的或待删除的元素都保存在栈的同一端,称为栈顶,另一端就叫做栈底.在栈里, 新元素都靠近栈顶,旧元素都接近栈底. 栈也被用在编程语言的编译器和内存中保存变量.方法调用等. 创建栈 先声明这个类 function Stack(){ // 各种属性和方法的声明 } 选择数组这种数据结构来保存栈里的元素 let items = []; 为栈声明一些方法 p…
栈结构实现 栈可以用顺序表实现,也可以用链表实现. 栈的操作 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 is_empty() 判断栈是否为空 size() 返回栈的元素个数 这里我们用python的list来实现栈的操作 class Stack(object): """栈""" def __init__(self): self.__list = […
顺序表 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元素). 对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系. 这样的一组序列元素的组织形式,我们可以将其抽象为线性表.一个线性表是某类元素的一个集合,还记录着元素之间的一种顺序关系.线性表是最基本的数据结构之一…
什么是链表 顺序表的储存分为一体式结构和分离式结构,但总的来说存储数据的内存是一块连续的单元,每次申请前都要预估所需要的内存空间大小.这样就不能随意的增加我们需要的数据了.链接就是为了解决这个问题.它的数据存储方式是每插入一个数据,就在内存中申请一块存储空间来保存,那么新增加的数据如何和之前的数据保持关联呢?解决方法就是在原来的数据内存里保存新增加的数据的内存地址,这样就相当于用“一根线”把它们都串了起来,因此每次新插入一个数据,就要在内存中申请两个连续的空间,一个用来储存数据,一个用来储存下一…
ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本对象加r2的结果 -(self, Rational r2) #求出本对象减r2的结果 *(self, Rational r2) #求出本对象乘以r2的结果 /(self, Rational r2) #求出本对象除以r2的结果 num(self) #取出本对象的分子 den(self) #取出本对象的…