第一章 绪论
Posted chenlua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一章 绪论相关的知识,希望对你有一定的参考价值。
绪论
1.1 数据结构的基本概念
1.1.1 基本概念和术语
- 数据:是信息的载体,是描述事物客观属性的数、符号及所有能输入到计算机中并被计算机程序识别和处理的符号的集合
- 数据元素:是数据的基本单位,一个数据元素可由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位
- 数据对象:数据对象是性质相同的数据元素的结合是数据的一个子集合
- 数据类型:(1)原子类型(2)结构类型(3)抽象数据类型
- 抽象数据类型(ADT):是指一个数学模型及定义在该模型上的一组操作,抽象数据类型的定义取决于它的一组逻辑特性,与在计算机内部的表示和实现无关,通常用(数据对象、数据关系、基本操作集)这三元组来表示ADT,从而构成一个完整的数据结构定义。
1.1.2 数据结构三要素
数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合,三要素:逻辑结构、存储结构、数据的运算
-
数据的逻辑结构:数据元素之间的逻辑关系,与数据的存储无关,是独立于计算机的,数据的逻辑结构分为:线性结构和非线性结构。线性结构:字符串、队列、栈、线性表. 非线性结构:集合(数据元素关系一对一)、树(一对多)和图(多对多)
-
数据的逻辑结构通常包括集合、线性结构、树形结构和图状结构。
-
数据的存储结构(物理结构):有顺序存储、链式存储、索引存储、散列存储这四种
(1)顺序存储:把逻辑是哪个相邻的元素存储在物理位置也相邻的存储单元中
优点:随机存取 缺点:只能使用相邻的一整块存储单元、可能会产生较多的外部碎片
(2)链式存储:借助指示元素存储地址的指针来表示元素之间的逻辑关系
优点:不会出现外部碎片,充分利用所有存储单元 缺点:因存储指针而占用额外的存储空间,且只能实现顺序存储
(3)索引存储:在存储元素的同时建立附加的索引表,索引表中的每项称为索引项,一般形式是(关键字和地址)
优点:检索速度快 缺点:占用较多空间
(4)散列存储(Hash存储):根据元素的关键字直接计算出该元素的存储地址
-
数据的运算:包括运算的定义和实现,定义针对逻辑结构的,实现针对存储结构的
1.1.3 试题知识点整理
- 顺序表、哈希表和单链表表示几种数据结构,既可以描述逻辑结构、又描述存储结构和数据结构。有序表表示的队列是一种数据结构,栈是一种抽象数据类型,可以采用顺序或链式存储,只表示逻辑结构。
- 循环队列是用顺序表表示的队列是一种数据结构。
- 数据的逻辑结构独立于存储结构,而存储结构是逻辑结构在计算机上的映射,不能独立于逻辑结构存在。
- 在存储数据是,不仅要存储数据元素的值,还要存储数据元素之间的关系
- 链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续
1.2 算法和算法评价
1.2.1算法的基本概念
算法:它是指令的有限序列,具有5个特性:
(1)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成(算法运行的步数是有限的,运行时间也是有限的)
(2)确定性:对于相同的输入只能得出相同的输出
(3)可行性:算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的
(4)输入
(5)输出
好的算法应该考虑的目标:正确性、可读性、健壮性、效率、低存储
1.2.2 算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的
-
时间复杂度:指该语句被重复执行的次数
-
空间复杂度:S(n)定义为该算法所耗费的存储空间,是问题规模n的函数
-
常见的渐进时间复杂度
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
-
常用的时间复杂度
算法原地工作是指算法所需的辅助空间为常量即O(1)
1.2.3 试题知识点整理
-
程序不一定满足有穷性,而算法必须有穷,算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现
-
某算法的时间复杂度为O(n2),该算法的执行时间与n2成正比
-
类似i=i*2的,时间复杂度均为O(log2n)
-
阶乘n!,n*(n-1)······,共执行n次,时间复杂度O(n)
-
时间复杂度O(nlog2n)T(n)=T1(n) * T2(n)=O(n) * O(log2n)=O(nlog2n)
count = 0; for(k=1;k<=n;k*=2) for(j=1;j<=n;j++) count++;
-
m++执行了n(n+1)次
int m = 0,i,j; for(i=1;i<=n;i++) for(j=1;j<=2*i;j++) m++;
-
++i题型
int func(int n){ int i = 0,sum = 0; while(sum<n) sum+ = ++i; return i; }
循环变量为sum,将式子分解开来是++i;即sum = sum+i
sum是正整数之和,假设循环执行k次,那么(k+1)k/2<n时间复杂度为O(n1/2)
-
算法独立于计算机和程序设计语言
-
数据结构相同,对应的存储结构不一定相同,数据结构操作的实现与存储结构有关
-
打印机缓冲区先进先出的逻辑结构是队列
-
顺序表、哈希表和单链表表示几种数据结构,既描述逻辑结构,也描述存储关系和数据的运算;而有序表示指关键字有序的顺序表,可以链式存储也可顺序存储,仅描述数据之间的逻辑关系。
-
三种常见的数据结构时线性表、树、图或队列、栈
-
for(i=1,s=0;i<=n;i++){ t=1; for(j=1;j<=i;j++) t=t*j; s=s+t; }
时间复杂度为O(n2)
-
i = 1;j = 0; while(i+j<=n){ if(i>j) j++; else i++; }
? 时间复杂度为O(n)
1.2.4 时间复杂度专题讲解
常见的时间复杂度题型的解决办法
-
循环主题中的变量参与循环条件的判断
-
循环主体中的变量不参与循环条件判断
以上是关于第一章 绪论的主要内容,如果未能解决你的问题,请参考以下文章