数据结构前两章学习总结
第一章 绪论
主要内容:
一.数据结构的基本概念
1.数据: 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
2.数据对象: 数据对象是性质相同的数据元素的集合,数据的一个子集。
3.数据元素: 数据元素是数据的基本单位,也叫做节点或记录。在计算机程序中通常作为一个整体进行考虑和处理。(一个数据元素可由若干个数据项组成.)
4.数据项: 数据项是数据的不可分割的最小单位。(一个数据元素可由若干个数据项组成.)
5.数据类型: 一个值的集合以及定义在此集合上的一组操作的总称。
1)原子类型:其值不可再分的数据类型,包括整型、字符型等。
2)结构类型:由若干成分按某种结构组成的,其值可再分的数据类型。这些成分可以是原子类型,也可以是结构类型。
3)抽象数据类型(Abstract Data Type,简写ADT):抽象数据组织和与之相关的操作.
6.数据结构: 相互之间存在一种或多种特定关系的数据元素的集合,主要包
括三方面的内容:(逻辑结构、存储结构、数据的运算)。
数据结构构成:逻辑结构→存储结构→数据运算
数据的逻辑结构:
指数据元素之间的逻辑关系,它与数据的存储无关,是独立于计算机的。主要是分为(线性结构、非线性结构)两大类。
①线性结构:结构中的数据之间只存在一对一的关系,主要代表有(线性表、队列、栈、数组)。
它有四个基本特征:第一个元素,最后一个元素,前驱元素,后继元素
②非线性结构:存在着一对多的关系,它又可以多对多的关系,主要有(集合、树、图)。
数据的存储结构:
数据的存储结构分为四类:
1)顺序存储结构: 把逻辑上相邻的元素存储在物理位置也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。
2)链式存储结构: 不要求逻辑上相邻的元素在物理位置上也相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系3)索引存储结构: 在存储元素信息的同时,还建立附加的索引表(索引项的一般形式一般是<关键字,地址>。关键字标识唯一 一个节点:
地址作为指向节点的指针。)4)散列存储结构: 根据元素的关键字直接计算出该元素的存储地址
算法的基本概念
重要特征:
有穷性,确定性,可行性,输入,输出。
优秀算法的标准
准确性,可读性,健壮性,效率与低存储量需求。
算法效率的度量
①时间复杂度定义:一般情况下,算法中基本操作的重复次数作为问题规模 n 的某个函数 f(n),算法的时间度量记作 T(n)=O(f(n)),表示随着问题规模 n 的增大,算法执行时间增长率和 f(n)的增长率相同,称为时间复杂度。
(时间复杂度取决于:问题的规模、待处理的数据初态)
②空间复杂度:S(n)定义为该算法所耗费的存储空间,是问题规模 n 的函数。
规律: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<…<O(nk)<O(2n)<O(n!)
第二章:线性表
概念:线性表 是 数据结构 的一种,一个线性表是n个具有相同特性的数据元素的 有限序列 。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(大部分线性表)
特点:
1.除第一个元素外,每一个元素都有一个直接前驱元素,除最后一个元素外,每一个元素都有一个直接后驱元素2.数据元素是组成数据的基本单位,是数据集合的个体,在计算机中通常作为整体进行处理,也称结点或记录。3.数据项是有独立含义的数据最小单位,也称项或字段数据对象是性质相同的数据元素的集合,是数据的一个子集4.线性表由有限个元素组成,且由同类型数据元素组成,每一个数据元素都属于同一个数据对象
分类:
1. 顺序表
用一段地址连续的存储单元依次存储线性表的数据元素。顺序存储结构在逻辑结构和物理存储结构中都是依次序互相紧挨着。每个数据元素的地址=首元素的地址+一个该数据类型所占空间大小*数组下标。(优点:
查询速度快,时间复杂度为O(1)
缺点:
1.插入元素速度慢,时间复杂度为O(n)
2.表中元素个数需要提前定义
)
顺序表的时间复杂度如下:
不论数据元素量N有多大,只需要get(i)一次就拿到对的元素,所以时间复杂度为O(1)。
每一次插入,都需要把i的位置后面的元素移动一次,随着元素N的增大,移动的元素也越多,时间复杂度为O(n)。
每一次删除,都需要把i的位置后面的元素移动一次,随着元素的N的增大,移动的元素也越多,时间复杂度O(n)。
2.链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。它不像顺序表那样连续存储元素,而是在每一个节点里存到下一个节点的指针。(优点:内存空间不连续,头插头删效率高,没有空间限制,不会溢出,可以存储很多元素
缺点:不支持随机访问,查找效率低,需遍历查找)
2.1 单链表:单链表是链表的一种,它是由多个结点组成的,每一个结点由一个数据域和一个指针域组成,数据域是用来存储数据,指针域是用来指向下一个结点,头结点的数据域不存储数据,尾结点的指针域是空的。
2.2双链表:
双链表也,也是链表的一种,也是由多个结点组成的,每一个结点由一个数据域和两个指针域组成的,数据域是用来存储数据,两个指针域是用来指向上一个结点和下一个结点,头结点没有指向上一个结点也不存储数据,尾结点没有指向一下一个结点但是它指向上一个节点和存储数据List)(LinkedList使用)
链表的时间复杂度如下 :
- 每一次查询都需要从链表的头部开始一次向后查找,随着数据元素N的增多比较的元素越多时间复杂度为O(n)。
- 每一次插入需要找到i位置的前一个元素,然后在插入数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
- 每一次移除需要找到i位置的前一个元素,然后在移除数据,随着数据元素的增多,查找的元素越多,时间复杂度为O(n)。
数据结构前两章学习总结相关推荐
- 汇编语言 王爽 第四版 前两章学习心得
博客开篇 从大学入学开始,心里就萌生了写博客的想法,奈何自己太懒惰,一直没有付诸于行动.工作后,最近上班还算清闲,故又萌生出了写博客的想法.千里之行,始于足下.谨以此篇博客作为自己的博客开端,文中不足 ...
- 阅读《大型网站技术架构》前两章心得体会及总结
最近阅读了<大型网站技术架构>这一本书,对于这一行业刚入门的菜鸟来说,虽然只读了前两章,却让我感受颇深,同时也学习和见识到了很多之前不了解.不明白的东西. 通过阅读前两章,我才真正的初步明 ...
- 吃瓜Task01(西瓜书前两章)
目录 第1章 绪论 第2章 模型评估与选择 第1章 绪论 1.1机器学习:研究关于"学习算法"的学问 => 在计算机上从数据(经验)中产生"模型"的算法 ...
- 阅读WPF揭秘前两章探索Silverlight运行的基本原理和RIA工作流程的密码(二)
2.8 编译:将XAML与过程式代码混合使用 WPF允许用任何一种.NET语言完全以过程式代码编写应用程序.另外,一些简单的应用程序可以完全写在XAML中,这多亏了在第9章中提到的数据绑定特性,以及 ...
- 数据结构教程(Java语言描述)前两章总结
一.关于数据结构方面 数据结构是计算机存储,组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或存储效率.数据结构往往同高效的 ...
- 『嗨威说』数据结构 - 第七章学习内容小结
本文基本索引目录: 一.查找的基本概念和专业术语 二.顺序查找算法 三.二分查找算法 四.二叉排序树算法 五.平衡二叉树算法 六.B树简介 七.散列表查找 八.作业例题展示 九.自我总 ...
- 【西瓜书笔记】前两章
第一章 机器学习基于数据,数据集中的一个微观个体成为示例或样本,横向.纵向称为属性或特征,属性取值为属性值,所有特征取值张成的空间为样本空间.输入空间.在这种空间中能找到任意示例的坐标,因此可以吧示例 ...
- usaco前两章小结
usaco 暑假老师有推荐做但是那个题目太长了,而且·大部分都是废话做起来特别慢,而且当时自己基本上什么都不懂,太难了所以看了题解做了两题就放弃了. 转眼就上学了,因为想学习acm所以就胡乱找题做但是 ...
- 《Metasploit魔鬼训练营》环境搭建与前两章经历体会
本人信息安全专业,这学期想学习渗透测试,就在b站上看推荐书籍,无意间发现了这本书,在国内也算比较出名,就买了一本仔细学习.开始是以故事的形式,我们作为公司新人,初次了解metasploit的结构.体系 ...
最新文章
- linux支持的machine-types
- 数据库命名规则(转)
- Markdown拾遗
- 【Spring Boot 分享】开源项目【8个】
- 一文带你吃透Vue生命周期(结合案例通俗易懂)
- 工业物联网再起云涌,大咖共叙破圈之道
- MasterPage 变化了的 ClientID ctl00_
- 乌鲁木齐高新区大数据产业首个惠农项目落地
- 算法设计与分析基础——假币问题(三分法)
- 计算机,通信,自动化等方向期刊排名
- 使用栈完成高级计算器
- HTML网页中显示图片(相对路径 绝对路径)
- 雨落无声-开博啦........
- 亚马逊广告投放策略卖家们知多少?
- vue-cli-service build 环境设置
- MySQL当中的约束条件
- 数组逆时针旋转 90 度
- Policy Evaluation之Doubly Robust论文讲解
- easypoi导入图片_原生POI / EasyPOI 简单上手使用
- java类添加单元测试代码_如何在java中单元测试时跳过一段代码