算法的框架思维

从十大排序算法解题思路中我们可以抽取一些共同的属性,有从整体到细节再到整体的分治自顶向下的递归,自底向上从抽象到具体的迭代等框架思维是通用的,不只是学习数据结构和算法,学习其他任何知识都是高效的。

一、数据结构的种类

在我认为数据结构的存储方式只有两种:数组和链表,数组是顺序存储,查找快,增删较复杂,需要扩容,而链表是链式存储,查找慢,增删简单,不需要扩容。有可能好多人会问还有哈希表、栈队列堆树图等各种数据结构呢?我们看待一个问题得研究它的源头,这些都是在链表、数组或者链表+数组上的特殊操作罢了。

比如队列栈数据结构可以用链表或者数组实现,哈希表的底层实现就是数组+链表,树用数组实现就是堆,比如前面我们介绍过的堆排序,就是在数组上进行操作的,用链表实现的树也有红黑树、B树等。我们都知道图有两种表示,邻接表就是一种链表,而邻接矩阵是用二维数组表示。

综上所述,数据结构的种类有很多,甚至你也可以发明自己的数据结构,但底层实现一定是数组、链表或者两者的组合。

二、数据结构的基本操作

对于任何数据结构,其基本操作⽆⾮遍历 + 访问,再具体⼀点就是:增删查改。

如何遍历 + 访问?我们仍然从最⾼层来看,各种数据结构的遍历 + 访问⽆⾮两种形式:线性的和⾮线性的。

线性就是 for/while迭代为代表,⾮线性就是递归为代表。

⾸先要明确的是,数据结构是⼯具,算法是通过合适的⼯具解决特定问题的⽅法。也就是说,学习算法之前,最起码得了解那些常⽤的数据结构,了解它们的特性和缺陷。


三、数据结构的基本框架

二叉树的框架

```Java
class TreeNode {
            int val;
            TreeNode left, right;
        }
        void traverse(TreeNode root) {
            // 前序遍历代码位置
            traverse(root.left);
            // 中序遍历代码位置
            traverse(root.right);
            // 后序遍历代码位置
        }
```

单链表的框架节点减少一个就可以了,至于数组的框架简单的循环就可以解决。

刷题可以先刷二叉树,因为⼆叉树是最容易培养框架思维的,⽽且⼤部分算法技巧,本质上都是树的遍历问题。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值