数据结构绪论 |
您所在的位置:网站首页 › 数据结构严蔚敏电子版 › 数据结构绪论 |
整本书的知识点,点击右方链接:整本书笔记知识点 文章目录 一、绪论1.1、数据结构的研究内容1.2、基本概念和术语1.2.1、数据、数据结构、数据项和数据对象1.2.2数据结构a、逻辑结构b、存储结构(物理结构)(1)、顺序存储结构(2)、链式存储结构 1.2.3、数据类型和抽象数据类型a、数据类型b、抽象数据类型 1.3、抽象数据类型的表示与实现1.4、算法和算法分析1.4.1、算法的定义及特性1.4.2、评价算法优劣的基本标准1.4.3、算法的时间复杂度1.4.4、算法的空间复杂度 第一章总结第一章课后习题
一、绪论 1.1、数据结构的研究内容 数据的各种逻辑结构和物理结构,以及他们之间的相应关系对每种结构定义相适应的各种运算设计出相应的算法分析算法的效率 1.2、基本概念和术语 1.2.1、数据、数据结构、数据项和数据对象
根据例子理解:假设有两张表,上表为人员表,下表为课程表, 表的格式如下: 姓名性别身高课程代号小明男180A小红女180A小绿男180B 课程代号课程名A语文B数学这两张表就是数据 而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象 而每张表中的每一行就称为数据元素 而姓名,性别,身高,课程代号,课程名就称为数据项 1.2.2数据结构 数据结构包括逻辑结构和存储结构两个层次。 数据结构是相互之间存在一种或者多种特定关系的数据元素的集合 a、逻辑结构逻辑结构分为四种类型:集合结构,线性结构,树形结构,图形结构。 集合结构:数据元素同属一个集合,单个数据元素之间没有任何关系。 线性结构:类似于线性关系,线性结构中的数据元素之间是一对一的关系。 树形结构:树形结构中的数据元素之间存在一对多的关系。(各元素及元素关系所组成图形类似于树状图)。 图形结构:数据元素之间是多对多的关系。如下图所示。 b、存储结构(物理结构) 物理结构又叫存储结构,分为两种,一种是顺序存储结构一种是链式存储结构。 (1)、顺序存储结构顺序存储结构是把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的。之前学习的数组就是一种顺序存储结构。(如图所示) (2)、链式存储结构 链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。 根据指针找出相邻元素的位置 1.2.3、数据类型和抽象数据类型 a、数据类型 一般包括整型、实型、字符型等原子类型外,还有数组、结构体和指针等结构类型。 b、抽象数据类型抽象数据类型(Abstract Data Type,ADT),类似C语言中的结构体以及C++、java语言中的类。 通俗的讲,抽象数据类型,泛指除基本数据类型以外的数据类型。 1.3、抽象数据类型的表示与实现 抽象数据类型的概念与面向对象的思想是一致的。 1.4、算法和算法分析 算法 + 数据结构 = 程序 1.4.1、算法的定义及特性算法是为了解决某类问题而规定的一个有限长的操作序列。 一个算法必须满足以下五个重要特性: 有穷性、 确定性 、 可行性、 输入 、输出 1.4.2、评价算法优劣的基本标准正确性 、 可读性 、 健壮性 、 高效性 1.4.3、算法的时间复杂度详细可以看这个:一套图搞懂“时间复杂度” 看下列代码的时间复杂度: 最好、最坏和平均时间复杂度 最好时间复杂度,指的是算法计算量可能达到的最小值。最坏时间复杂度,指的是算法计算量可能达到的最大值。平均时间复杂度,是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值。 1.4.4、算法的空间复杂度空间复杂度只需要分析辅助变量所占的额外空间。 空间复杂度:S(n) = O(f(n)) 如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1) 举例: int i = 1; int j = 2; ++i; j++; int m = i + j;代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1) 我们再看一个代码: int []m = new int[n]; for (i = 1; i if (x > 100) { x = x - 10; y--; } else x++; }答案:O(1) 解释:程序的执行次数为常数阶。 (2) for (i = 0; i a[i][j] = 0; } }答案:O(m*n) 解释:语句a[i] [j]=0; 的执行次数为m*n。 3) s = 0; for (i = 0; i s += B[i][j]; sum = s; } }答案:O(n2) 解释:语句 s+=B[i] [j]; 的执行次数为n2。 (4) i = 1; while (i for (j = 1; j y++; }答案:O( n \sqrt{n} n ) 解释: x≥(y+1)*(y+1) = n≥(y+1)2 开根号: n ≥ ( y + 1 ) \sqrt{n}≥(y+1) n ≥(y+1) n − 1 ≥ y \sqrt{n}-1≥y n −1≥y 则 y ≤ n − 1 y≤\sqrt{n}-1 y≤n −1 x=n; //n>1 y=0; while( y ≤ n − 1 y≤\sqrt{n}-1 y≤n −1){ y++; } y++;执行了 n \sqrt{n} n 次。则时间复杂度为:O( n \sqrt{n} n ) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |