算法与数据结构

数据结构、算法及线性表总结

独自空忆成欢 提交于 2020-03-28 19:09:16
数据结构、算法及线性表总结 本学期学习了数据结构这门课,为了能够理清学习历程,在此记录学习到的知识,以供参考。 一、本课程的思维导图(持续更新) 二、重要概念的笔记及个人解析 <font color=>第一章:绪论 1)数据结构的定义:数据结构是指所有数据元素以及数据元素之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合 (带结构的数据的集合) 2)逻辑结构的定义:逻辑结构是从数据元素的逻辑关系上描述数据的,它与数据的存储无关,是从具体问题中抽象出来的数学模型。 (用来描述数据之间有怎样的关系,或哪种类型的关系) 3)逻辑结构的类型:逻辑结构是多样复杂的,现阶段我们接触到的有 集合 、 线性结构 、 树形结构 以及 图形结构 。(目前学习到线性结构) 4)存储结构的定义:存储结构是数据元素及其关系在计算机存储器中的存储表示也称为物理结构,常用的有 顺序存储 、 链式存储 、 索引存储 和 哈希存储 四中存储结构。 5)顺序存储结构:用该结构存储数据元素,所有数据元素在存储器中占有一整块存储空间, 可将逻辑结构直接映射到存储结构 。(优点:存储效率高,没有额外占用的空间,还可以实现对元素的随机存取。缺点:不便于数据修改,一个元素的变动就可能使其他一系列元素也要进行移动) 6)链式存储结构:每一个数据元素占用的只是一个内存节点,每个节点单独分配,地址也不一定连续

校招准备-数据结构与算法

落爺英雄遲暮 提交于 2020-03-28 06:29:54
校招中最基础的一环,笔试与白板撸算法 CS中最基本的能力,这方面的准备十分必要,但是准备过程必定十分痛苦 虽常言道水滴石穿,但是多少小河小溪在石穿之前干涸! ----------------------------------- 每天2-3道算法题,完不成就晚上加班 ----------------------------------- 一次总计花一个小时时间学习: 1.找到对应知识点,梳理一遍,弄清楚难点 2.刷15-20分钟小题,来检测自己这块的掌握情况 3.刷20-30分钟对应的算法题 ---------------------------------------------- 结合算法导论,啊哈算法,王道数据结构等书籍; 数据结构(结合c,java与python语言) 1-线性表:链表的各种操作( 双链表的插入,删除 手写 );java中的应用; (6.7 链表,牛客做题) 关于删除链表节点:先解决当前节点后面的,再解决前面的 栈:定义,基本操作(初始化,判断为空,进栈,出栈,读栈顶元素,),顺序栈和链栈;应用 1-队列:定义,基本操作(初始化,判断为空,入队,出队,),顺序存储和链式存储,双端队列;应用 数组与矩阵:数组的各种基本操作,矩阵的压缩存储 1-字符串:字符串的基本操作与实现 堆:定义与基本操作,应用 1-树:二叉树的定义,基本性质,顺序存储,链式存储

C/C++ 数据结构之算法(面试)

独自空忆成欢 提交于 2020-03-27 08:16:46
数据结构中的排序算法。 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。 (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的。相反,如果发生改变,这种排序方法不稳定。 (3)排序算法的分类(分为5类):插入排序、选择排序、交换排序、归并排序和分配排序。 (4)排序算法两个基本操作:<1>比较关键字的大小。 <2>改变指向记录的指针或移动记录本身。 具体的排序方法: 插入排序 <1>插入排序(Insertion Sort)的思想:每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子记录中的适当位置,直到全部记录插入完成为止。 <2>常用的插入排序方法有直接插入排序和希尔排序。 (1)直接插入排序 <1>算法思路:把一个记录集(如一个数组)分成两部分,前半部分是有序区,后半部分是无序区;有序区一开始有一个元素r[0],无序区一开始是从r[1]到之后的所有元素;然后每次从无序区按顺序取一个元素r[i],拿到有序区中由后往前进行比较,每次比较时,有序区中比r[i]大的元素就往后移动一位,直到找到小于r[i]的元素,这时r[i]插到小元素的后面,则完成一趟直接插入排序。如此反复,从无序区不断取元素插入到有序区,直到无序区为空

数据结构与算法(6)——栈Stack

我们两清 提交于 2020-03-26 02:29:11
基础定义 什么是栈: 栈是一种有次序的数据项集合。在栈中,数据项的加入和移除都仅仅发生在同一端,这一端叫栈顶(top),没有操作的另一端叫栈底(base)。 特性: 后进先出,先进后出 栈的基本操作 这里需要知道在python里面是没有栈的,但是我们可以模拟一个栈。 首先我们需要定义的一些栈的基本操作: Stack() 创建一个空栈,不包含任何数据项 push(item) 将item加入栈顶,无返回值 pop() 将栈顶数据项移除,并返回,栈被修改 peek() 查看栈顶数据项,返回栈顶数据项但不移除,且不修改栈 isEmpty() 返回栈是否为空 size() 返回栈中有多少个数据项 这里,我们可以用list类型实现一个栈的操作: 1 class Stack: 2 ''' 3 自己定义的一个栈 4   栈顶是尾端,也可以将栈顶设为尾端 5 ''' 6 def __init__(self): 7 self.items =[] 8 def isEmpty(self): 9 return self.items==[] 10 def push(self,item): 11 self.items.append(item) 12 def pop(self): 13 self.items.pop() 14 def peek(self): 15 return self.items[len

day03 【List、Set、数据结构、Collections】

。_饼干妹妹 提交于 2020-03-26 01:56:35
day03 【List、Set、数据结构、Collections】 主要内容 数据结构 List集合 Set集合 Collections 教学目标 [ ] 能够说出List集合特点 [ ] 能够说出常见的数据结构 [ ] 能够说出数组结构特点 [ ] 能够说出栈结构特点 [ ] 能够说出队列结构特点 [ ] 能够说出单向链表结构特点 [ ] 能够说出Set集合的特点 [ ] 能够说出哈希表的特点 [ ] 使用HashSet集合存储自定义元素 [ ] 能够说出可变参数的格式 [ ] 能够使用集合工具类 [ ] 能够使用Comparator比较器进行排序 第一章 数据结构 2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。 现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗?而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。 我们java是面向对象的语言,就好似自动档轿车,C语言好似手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A点 开到 B点

每个程序员都必须掌握的 8 种数据结构!

不想你离开。 提交于 2020-03-24 12:27:28
作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表 链表是一种顺序结构

每个程序员都必须掌握的 8 种数据结构!

我只是一个虾纸丫 提交于 2020-03-24 11:40:47
3 月,跳不动了?>>> 作者:IT-Evan https://www.cnblogs.com/IT-Evan/p/12444968.html 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。 在本文中,我将简要解释每个程序员必须知道的8种常用数据结构。 1.数组 数组是固定大小的结构,可以容纳相同数据类型的项目。它可以是整数数组,浮点数数组,字符串数组或什至是数组数组(例如二维数组)。数组已建立索引,这意味着可以进行随机访问。 Fig 1. Visualization of basic Terminology of Arrays 数组运算 · 遍历:遍历所有元素并进行打印。 · 插入:将一个或多个元素插入数组。 · 删除:从数组中删除元素 · 搜索:在数组中搜索元素。您可以按元素的值或索引搜索元素 · 更新:在给定索引处更新现有元素的值 数组的应用 · 用作构建其他数据结构的基础,例如数组列表,堆,哈希表,向量和矩阵。 · 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。 2.链表

Java基础--常用API--集合类相关API

£可爱£侵袭症+ 提交于 2020-03-23 06:07:00
一、泛型   1、泛型的本质是将类型参数化,即将数据类型作为参数。     2、泛型可以在编译期进行检查,其所有的强制转换是隐式且自动的,提高了代码的安全性。      3、泛型可以用在类(泛型类)、接口(泛型接口)、方法(泛型方法)的创建。       4、泛型的类型参数只能为引用类型,不能为基本类型。 二、常用集合类 1、体系分类:   (1)Collection体系: Set、List、Queue。     Set:元素无序且不可重复。HashSet,TreeSet。     List:元素有序且可重复。LinkedList,ArrayList。     Queue:队列,先进先出。Deque。   (2)Map体系:HashMap、TreeMap。 2、分类如下 3、集合与数组的区别 三、Collection集合 1、相关方法: 2、迭代器   (1)使用Iterator接口,不能直接new,使用集合的方法去调用。即Iterator it = c.iterator();     (2) java.util.Iterator; 其使用流程为问,取,删(不必须)。      (3)方法:     boolean hasNext();问操作,查询当前集合是否还有元素。     Object next();取操作,取出集合元素。     Iterator remove() ;删操作

第一章学习心得

元气小坏坏 提交于 2020-03-22 18:06:27
心得体会:初步了解了数据结构与算法原理以及一些思想,算法的空间复杂度和时间复杂度,知道了要想弄清楚一个算法的实现,首先要知道这个算法的大致原理。 本学期的目标:认真完成作业,坚持上机操作,用实践检验代码。通过学习数据结构提高自己解决问题的效率。 目前存在的苦难:数据结构比较抽象,书本上各种概念比较复杂。 下一阶段的目标:多钻研书上的代码,深入了解算法思想原理以及抽象结构 来源: https://www.cnblogs.com/lionbot/p/12547357.html

数据结构--树形结构

狂风中的少年 提交于 2020-03-22 05:10:30
今天在博客上看到这样一段代码,感觉挺有意思,代码如下: 1 public class Edge { 2 //Name of origin town 3 public Node origin; 4 //Name of destination town 5 public Node destination; 6 //Route weight to destination 7 public int weight; 8 //next possible route 9 public Edge next; 10 //constructor 11 public Edge(Node origin, Node destination, int weight) { 12 this.origin = origin; 13 this.destination = destination; 14 this.weight = weight; 15 this.next = null; 16 } 17 18 public Edge next(Edge edge) { 19 this.next = edge; 20 return this; 21 } 22 } 23 24 graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new