《图解数据结构》(第二版)读书笔记

第一章:数据结构导论

1.1 数据和信息

    数据:指的是一种未经处理的原始文字(word),数字(number),符号(symbol),图像(graph)等,它所表达的是一种没有评估价值的基本元素或项目、

    信息:当数据经过处理(process),以特定的方式进行处整理,归纳甚至分析后,就成了“信息”。

1.2 算法

算法+数据结构 = 可执行程序

算法的5个条件:
    1.输入
       2.输出
    3.明确性
    4.有效性
    5.有限性

1.3 数据抽象化

    所谓数据类型,是指数据与作用在其上的运算所构成的集合体。数据类型也很多。

1.3.1 基本数据类型
    不同的语言包含的数据类型不同,不过基本就是那几类,整数,浮点数,双精度浮点数,布尔,字符等等。基本数据类型更好一层是指包含其他类型的数据类型,例如C++中的 结构(structure)类型,字符串类型,或者类(class)

1.3.2 抽象数据类型
   “抽象化”是指将现实世界的实体或概念转化成数据结构类型表示,以达到隐藏内部细节,指展示外观的目的。例如 堆栈(Stack)或者队列(Queue),链表(Linked List)

1.4 面向对象程序设计

    每一个对象可以通过对象的外部行为(behavior)和内部状态(state)来进行详细描述。行为代表着对象所显示出来的操作方法,状态则代表内部各特征的当前情况。

属性(attribute)是指对象的静态外观描述,例如一辆车子的颜色、大小等。或是抽象的内在,如车子引擎的马力,排气数等进行描述。

方法(method)是指对象中的动态响应,一种行为模式,可以用来代替一个对象功能。如车子开动,停止。

时间(event)是指对象可以针对外部事件做出的各种响应。

三个特性:
        封装性
        继承性
        多态性

1.5 递归算法

斐波那契数列

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)
	}
}
1.6 程序的效率分析

效率顾名思义就是研究如何以最短的时间,最小的存储空间来运算结果。衡量标准就是:时间复杂度(time complexity),和空间复杂度(space complexity) 。
时间复杂度:
O(1)
O(n)
O(log2n)
O(n
2)
O(n3)
O(2
n)
O(nlog2**n)

O(1)< O(log2n) < O(n)< O(nlog2n)< O(n2)< O(n3)< O(2**n)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值