数据:指的是一种未经处理的原始文字(word),数字(number),符号(symbol),图像(graph)等,它所表达的是一种没有评估价值的基本元素或项目、
信息:当数据经过处理(process),以特定的方式进行处整理,归纳甚至分析后,就成了“信息”。
算法+数据结构 = 可执行程序
算法的5个条件:
1.输入
2.输出
3.明确性
4.有效性
5.有限性
所谓数据类型,是指数据与作用在其上的运算所构成的集合体。数据类型也很多。
1.3.1 基本数据类型
不同的语言包含的数据类型不同,不过基本就是那几类,整数,浮点数,双精度浮点数,布尔,字符等等。基本数据类型更好一层是指包含其他类型的数据类型,例如C++中的 结构(structure)类型,字符串类型,或者类(class)
1.3.2 抽象数据类型
“抽象化”是指将现实世界的实体或概念转化成数据结构类型表示,以达到隐藏内部细节,指展示外观的目的。例如 堆栈(Stack)或者队列(Queue),链表(Linked List)
每一个对象可以通过对象的外部行为(behavior)和内部状态(state)来进行详细描述。行为代表着对象所显示出来的操作方法,状态则代表内部各特征的当前情况。
属性(attribute)是指对象的静态外观描述,例如一辆车子的颜色、大小等。或是抽象的内在,如车子引擎的马力,排气数等进行描述。
方法(method)是指对象中的动态响应,一种行为模式,可以用来代替一个对象功能。如车子开动,停止。
时间(event)是指对象可以针对外部事件做出的各种响应。
三个特性:
封装性
继承性
多态性
斐波那契数列
int fib(int n)
{
if(n == 0)
return 0 ;
else if(n==1)
return 1;
else
return fib(n-1)+fib(n-2);
}
汉诺塔
此问题可以分成3个步骤:
步骤1:将n-1个盘子,从木桩1移动到木桩2。
步骤2:将第n个最大盘子,从木桩1移动到木桩3。
步骤3:将n-1个盘子,从木桩2移动到木桩3。
总的移动次数是2的n次方减一。
void hanoi(int n , int p1 , int p2 , int p3)
{
if (n==1)
printf("盘子从 %d 移动到 &d\n",p1,p3)
else
{
hanoi(int n , int p1 , int p3 , int p2)
printf("盘子从 %d 移动到 &d\n",p1,p3)
hanoi(int n , int p2 , int p1 , int p3)
}
}
效率顾名思义就是研究如何以最短的时间,最小的存储空间来运算结果。衡量标准就是:时间复杂度(time complexity),和空间复杂度(space complexity) 。
时间复杂度:
O(1)
O(n)
O(log2**n)
O(n**2)
O(n**3)
O(2**n)
O(nlog2**n)
O(1)< O(log2**n) < O(n)< O(nlog2**n)< O(n**2)< O(n**3)< O(2**n)