万物皆大道至简,数据结构与算法也一样,都是可以简简简单单单,所谓的简就是大家所说的套路:算法中的框架。下面将颠覆你对数据结构与算法的认识,来吧。
一、数据结构的存储方式
简单来说,数据结构的存储方式可分为两种:数组(顺序存储)和链表(链式存储)。其它的数据结构无非就是API不同,加上一系列功能的操作而单独成“构”,其实,本质都是数组合链表。对于学习来说,一定要有递归和统筹的思想,大道至简,无处不在。
数组:连续存储,可以随机访问,通过索引可以快速找到对应元素,相对来说节约存储空间。
链表:元素不连续,不能随机访问,靠指针指向下一个元素的位置。
二、数据结构的基本操作
基本操作无他:增删改查(也可以说是遍历+访问)罢了
各种数据结构的遍历+访问分为两种:线性和非线性
线性就是for/while迭代为代表,非线性就是递归为代表,无非就是以下几种框架:
数组遍历框架,典型的线性迭代结构:
void traverse(int[] arr){
for(int i=0;i<arr.length;i++){
迭代访问arr[i]
}
}链表遍历框架,兼具迭代个递归结构
class ListNode{
int val;
List Node next;
}
void traverse(ListNode head){
for(LisrNode p = head;p!=NULL;p=p->next){
//迭代访问p.val
}
}
void traverse(ListNode head){
//递归访问p.val
traverse(head->next);
}二叉树遍历框架,典型的非线性递归遍历结构:
class TreeNode{
int val;
TreeNode right,left;
}
void traverse(TreeNode root){
traverse(left);
traverse(right);
}多叉树的遍历框架
class TreeNode{
int val;
TreeNode[] children;
}
void traverse(TreeNode root){
for(TreeNode child:root.children){
traverse(child);
}
}图的框架
自己推导下引用:
(https://mp.weixin.qq.com/s/ZYaXOSVM3YBIeRWm7E_jcQ)
- 本文作者: 程序谭
- 本文链接: http://weike382.github.io/2020/04/29/数据结构与算法学习指南/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
