数据结构学习的笔记与思考

算法的选择

之前有一种想法,认为编程中用到的数据结构和算法都是很高深的,那才显得有水平,以为牛人们编程时都偏向高深难懂的选择。也一直想学习看看有哪些高深的算法,但最近的学习改变了我的看法,《程序设计实践》一书中的看法是其实常用的数据结构都是很简单的,也就是数组、链表、hash表、树。常用的算法就更少了,排序和查找是最常用的。其中排序也通常是快速排序就把问题搞定了。查找嘛就是二分查找法,但是要求数组有序。常用算法都有标准库提供的,平时知道怎么去找到使用方法也就可以了。所以没必要把数据结构想得那么高不可攀,给自己心理造成障碍。而且根据《程序设计实践》一书中的看法,选择简单的数据结构和简单的算法并不丢人,反而是值得称道的事情,因为能用简单的方法解决问题,那就意味着你程序设计会少出错,容易实现。

数据结构和算法谁是中心?

Robert.Sedgwick的《算法》中说数据结构是算法的副产物,而《程序设计实践》中认为其实知道了数据结构,算法就决定了,然后程序结构也随之决定。这两种观点中我不太理解第一种,算法的操作对象是数据结构,难道为了使用某种算法而专门去设计数据结构?我认为还是根据问题,对问题进行建模,找出合适的数据结构,最后再根据数据结构选择合适的算法。对此处有不同看法的读者,请留言探讨下。

关于递归

递归的思想很巧妙,但是难以理解,我学习了好几次,终于有所认识。递归看起来是自己调用自己,直觉上非常难以想象,但是联系到运算过程中的递归调用,也是一种调用而已,它每次递归时,系统在原来的函数栈上开辟一个栈,这个栈里有局部变量和保存本次递归的运算结果的变量,随着更多的递归,栈一层一层地累积起来,而调用的递归函数在程序运行时就放在了代码区里、且一直在那里不动,栈和递归函数不在一个地方,因此递归本质上不过是函数调用。当递归开始结束后,最上一层栈消亡,把结果传递给下一层的栈,这样栈一层一层地消失和往下传递运算结果,最终得到了最终结果。如果递归达到了10层以上,这事儿也就机器能忍受,人嘛肯定受不了。
递归在解决很多重复性的问题上非常有用,比如二叉树的遍历,二分查找,快速排序,归并排序,但是得注意两点:

  • 递归的终止条件一定要提供,不然递归绵绵无绝期而栈溢出
  • 递归代码相比循环会很简洁,但是递归层次太多也会发生栈溢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值