零、启航,新的目标!
1、问题
为什么要学习数据结构这门课程?
2、常见问题
- 语言学习结束之后是否有能力进行项目开发?
- 当面对一个问题的时候如何思考解决方案?
- 如何评判代码效率的高低好坏?
- 怎样才能提高自己的编程能力?
- 。。。
3、数据结构课程的意义
- 培养专业的程序设计思维
- 训练使用程序语言描述解决方案的能力
- 计算机专业的基础课程
- 算法分析专业课的先修课程
4、数据结构==算法设计 ? ? ?
5、另一个值得思考的问题
现代的程序设计语言开发包中都有数据结构和常用算法的完整实现,是不是掌握如何使用就可以了?
6、知其然,知其所以然!
- 排序的时候,如何选择排序算法?
- 单链表就够用了,为什么还要双向链表?
- 最短路径的算法很有名,为什么很少在项目中使用?
- 递归就是函数自己调用自己,这样诡异的做法有什么用?
7、不下降序列问题
8、专业程序员的培养路线
9、数据结构的基础功底在职场竞争中的作用
- 对于职场新人
- 大型软件企业招聘必考数据结构
- 对于职场老鸟
- 提出并实现解决问题的关键方案是价值的体现
10、启航,新的目标!
- 课程目标
- 创建可复用的数据结构软件库
- 分析并优化C++课程中创建的实用类
- 使用的技术
- C++面向对象技术
- C++模板技术
- C++异常处理技术
一、理解程序的本质
1、问题
为什么会有各种各样的程序存在?程序的本质是什么?
2、理解程序的本质
- 程序是为了解决实际问题而存在的从本质上而言,程序是解决问题的步骤描述
- 一小步的进阶:理解实际问题!
- 确认问题类型
- 如:数值计算,求最小值个数
- 确认求解步骤
- 如:打开文件,读数据,关闭文件,计算和
- 确认问题类型
3、问题
如何判断问题求解步骤的好坏?
4、实例分析:判断求解步骤的好坏
/*
问题:给定一个整数 n,编程求解 1 + 2 + 3 + ... + n 的和。
*/
#include <iostream>
using namespace std;
long sum1(int n)
{
long ret = 0;
int* array = new int[n];
for(int i=0; i<n; i++)
{
array[i] = i + 1;
}
for(int i=0; i<n; i++)
{
ret += array[i];
}
delete[] array;
return ret;
}
long sum2(int n)
{
long ret = 0;
for(int i=1; i<=n; i++)
{
ret += i;
}
return ret;
}
long sum3(int n)
{
long ret = 0;
if( n > 0 )
{
ret = (1 + n) * n / 2;
}
return ret;
}
int main()
{
cout << "sum1(100) = " << sum1(100) << endl;
cout << "sum2(100) = " << sum2(100) << endl;
cout << "sum3(100) = " << sum3(100) << endl;
return 0;
}
5、程序评鉴初探
- 用尽量少的时间解决问题
- 用尽量少的步骤解决问题
- 用尽量少的内存解决问题
优秀的开发者追求高质量的代码!