时至今日,程序已经不仅仅是数据结构和算法了,我们需要使用面向对象的思维方式来解决很多现实生活地问题, 这样的问题可以不使用算法也不使用数据结构。但是,我们依旧需要学习这门课程,因为在我的专业中,这属于必修课程,一个不会算法的程序员,注定是可以轻易被替代的,况且,作为研究生,还有更高层次的数字信号处理方面的算法在等着我。
看一个例子,展示程序设计者的功底:
#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; }
我们明显可以知道,第三种采用高斯公式解决问题的程序员是功底最好的(上面的程序是一个好的引子,但是对于数组命名成array是个不好的地方,c++11中,array是std中自带的容器,命名成其他的更好)。这也体现了,数据结构真的是为了之后算法做铺垫的基础课程,算法有很多,但是离不开的是数学本源,数学知识的基础,决定了你能做到哪一个层次。
不过很可惜,别说算法了,大多数人连基础语言的基本语法都不能随心所欲地驾驭,所以,还得花上大部分时间补习基础语法,这是一个慢慢累积的过程。