首页 > 技术文章 > 数据结构的操作

controller666 2021-03-10 21:00 原文

1、对数据结构的认识
       对于任何数据结构,其基本操作⽆⾮遍历 + 访问,再具体⼀点就是:增删查改。
数据结构种类很多,但它们存在的⽬的都是在不同的应⽤场景,尽可能⾼效地增删查改。
2、如何遍历 + 访问?
我们仍然从最⾼层来看,各种数据结构的遍历 + 访问⽆⾮:
两种形式:线性的和⾮线性的。
线性就是 for/while 迭代为代表,⾮线性就是递归为代表。
再具体⼀步,⽆⾮以下⼏种框架:
数组遍历框架,典型的线性迭代结构:
void traverse(int[] arr) { 
    for (int i = 0; i < arr.length; i++) {
     // 迭代访问 arr[i] 
  } 
}
链表遍历框架,兼具迭代和递归结构:
/* 基本的单链表节点 */ 
class ListNode { 
       int val; 
       ListNode next; 
}
//迭代访问
void traverse(ListNode head) { for (ListNode p = head; p != null; p = p.next) { // 迭代访问p.val } }
//递归访问
void traverse(ListNode head) { // 递归访问 head.val traverse(head.next) }
⼆叉树遍历框架,典型的⾮线性递归遍历结构:
/* 基本的⼆叉树节点 */ 
class TreeNode { 
       int val; 
       TreeNode left, right; 
 }
void traverse(TreeNode root) {
       traverse(root.left);
       traverse(root.right);
 }
⼆叉树框架可以扩展为 N 叉树的遍历框架:
/* 基本的 N 叉树节点 */ 
    class TreeNode {
        int val;
        TreeNode[] children;
    }

    void traverse(TreeNode root) {
        for (TreeNode child : root.children) traverse(child)
    }

 

推荐阅读