第一章 绪论
知识点
-
了解数据结构研究的主要内容
- 逻辑结构 ->研究数据元素之间的客观联系。
- 存储结构->研究具有某种逻辑关系的数据在计算机存储器内的存储方式。
- 算法->研究如何在数据的各种关系(逻辑的和物理的)的基础上对数据实施一系列有效的基本操作。
逻辑结构+存储结构+算法
-
掌握数据结构中涉及的基本概念
-
数据:描述客观事物的数字、字符以及一切能够输入到计算机中,并且能被计算机程序处理的符号的集合
-
数据元素:数据这个集合中的一个一个的元素
-
数据对象:具有相同特性的数据元素的集合
-
结构:数据元素之间具有的关系(联系)
-
-
掌握算法的时间、空间复杂度及其分析的简易方法
-
时间复杂度
影响因素:- 问题的规模
- 编译程序功能的强弱以及所产生的机器代码质量的优劣
- 机器执行一条指令的时间长短
- 程序中哪些关键语句的执行次数
频度统计法
-
空间复杂度
影响因素:
算法本身占据的空间(输入/输出,指令,常数,变量等
算法要使用的辅助空间
-
4.内容小结
-
结构
- 逻辑结构
- 线性结构
线性表、数组、堆栈、队列、字符串、广义表、文件 - 非线性结构
树、二叉树、图
- 线性结构
- 存储结构
- 顺序存储结构
- 链式存储结构
- 索引结构
- 散列结构
- 逻辑结构
-
算法
-
算法的定义
- 用来解决某个特定课题的指令的集合
- 是由人们组织起来准备加以实施的一系列有限的基本步骤
-
算法的基本特征
- 输入、输出、有穷性、确定性、有效性
-
算法的描述
- 自然语言
- 某一具体的程序设计语言
- 自定义的符号语言
-
算法分析
- 算法分析是指对算法质量优劣的评价
- 算法分析的目的是改进算法质量
- 算法分析的前提是算法必须正确
- 除正确性外,通常从三个方面分析一个算法:
- 依据算法编写的程序在计算机中运行时间多少的度量,称之为时间复杂度。
- 依据算法编写的程序在计算机中占存储空间多少的度量,称之为空间复杂度。
- 其他方面。如算法的可读性、可移植性以及易测试性的好坏。
-
习题
-
设 n 为正整数。试确定下列各程序段中前置以记号 @ 的语句的频度:
(1)i=1; k=0; while ( i <= n-1) { @ k += 10 * i; i++; }
答案
n-1
(2)
i=1; k=0; do{ @ k +=10 * i; i++; } while(i <= n-1);
答案
n-1
(3)
i = 1; k = 0; while (i <= n-1) { i++; @ k+= 10 * i; }
答案
n-1
(4)
k=0; for( i=1; i <= n; i++) { for (j=i ; j <= n; j++) @ k++; }
答案
(n+1)n/2
(5)
for( i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { for (k = 1; k <= j; k++) @ x += delta; } }
答案
n(n-1)(n-2)/6
(6)
i=1; j=0; while (i+j<=n) { @ if (i>j ) j++ ; else i++ ; }
答案
n/2 (n为偶数) (n+1)/2 (n为奇数)
(7)
x=n; y=0; // n 是不小于1的常数 while (x >= (y+1)*(y+1)) { @ y++; }
答案
n^1/2
(8)
x=91; y=100; while (y>0 ) { @ if (x>100 ) { x -= 10; y--; } else x++; }
答案
1100
-
假设
n
为2
的乘幂,并且n > 2
,试求下列算法的时间复杂度及变量count
的值(以n
的函数形式表示)。int Time(int n){ count = 0; x = 2; while(x < n/2){ x *= 2; count++; } return (count); }//Time
答案
O(log2n) log2n-2
-
试写一个算法,自大至小依次输出顺序读入的三个整数
X
,Y
和Z
的值。
答案int Printf{ if(x < y){ t = x; x = y; y = t; } if(x < z){ t = x; x = z; z = t; } if(y < z){ t = y; y = z; z = t; } printf(x,y,z); }//Printf