1.1 引子
- 什么是数据结构?CS界至今无标准定义。精心选择的数据结构可以带来效率最优的算法。
1.2 数据结构
- 数据结构:
数据的对象集合、组织方式(逻辑&物理)、操作集合及实现算法。(数据的对象、组织与操作均可从逻辑和物理两方面观察,计算机处理信息的关键是将逻辑信息集映射到计算机的物理器件上形成物理器件的状态集) - 抽象数据类型(ADT):
数据的对象集合和操作集合。(抽象是计算机求解问题的基本方式及重要手段,可使一种设计对应多种应用场景)
1.3 算法
- 算法不是程序,一个显然的区别是程序可以无限运行(如操作系统), 但算法必须在有限步后终止。更重要的区别是算法是抽象的,程序是具体的。
- 算法复杂度:空间复杂度S(n)和时间复杂度T(n)。
- 精确地比较程序执行的步数无意义,因为两种算法中每步执行的时间可能不同。故在比较算法时,只考虑宏观渐进性质( 如上界T(n)=O(f(n)) )。
- 面对 复杂度的算法时,本能反应是优化为 。
1.4 应用实例
- 求解“最大子列和”的在线算法启示我们,让计算机记住一些关键的中间计算结果避免重复计算可大大提高算法的效率。采用分而治之的算法或许可得时间复杂度为 的算法。
1.5 习题
(1)习题1.9 有序数组的插入(20 分)
链接:https://pintia.cn/problem-sets/434/problems/965573204499779584
代码:顺序表中插入元素
bool Insert( List L, ElementType X ){ /*L的元素递减有序*/
Position pos, i;
if(L->Last==MAXSIZE-1)
return false; /*满载,失败*/
for(i=0; i<=L->Last; i++){
if(X==L->Data[i]){
return false; /*元素已存在,失败*/
}
else if(X>L->Data[i]){
break; /*找到首个较小元素,插入此处*/
}
}
pos = i; /*X为最小值时pos亦为i*/
for(i=L->Last; i>=pos; i--){
L->Data[i+1] = L->Data[i];
}
L->Data[pos] = X;
L->Last++;
return true;
}