其他分享
首页 > 其他分享> > 数据结构的基本操作:增删查改

数据结构的基本操作:增删查改

作者:互联网

转:

数据结构的基本操作:增删查改

上一篇我们讲了《数据结构的存储方式》,这篇文章将给大家讲述数据结构的基础操作-增删查改。

对于任何数据结构,其基本操作⽆⾮遍历 + 访问,再具体⼀点就是:增删 查改。 数据结构种类很多,但它们存在的⽬的都是在不同的应⽤场景,尽可能⾼效 地增删查改。

话说这不就是数据结构的使命么? 如何遍历 + 访问?我们仍然从最⾼层来看,各种数据结构的遍历 + 访问⽆ ⾮两种形式:线性的和⾮线性的。 线性就是 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 叉树的遍历框架:

/* 基本的 N 叉树节点 */ 
class TreeNode { 
int val; TreeNode[] children; 
}
void traverse(TreeNode root) { 
for (TreeNode child : root.children) 
traverse(child)
 }

N 叉树的遍历⼜可以扩展为图的遍历,因为图就是好⼏ N 叉棵树的结合 体。你说图是可能出现环的?这个很好办,⽤个布尔数组 visited 做标记就 ⾏了,这⾥就不写代码了。

所谓框架,就是套路。不管增删查改,这些代码都是永远⽆法脱离的结构, 你可以把这个结构作为⼤纲,根据具体问题在框架上添加代码就⾏了,以后会具体举例。(点击获取java数据结构算法视频教程全套)

{{o.name}} {{m.name}}

转:

数据结构的基本操作:增删查改

标签:traverse,遍历,TreeNode,查改,增删,基本操作,数据结构
来源: https://www.cnblogs.com/wangtcc/p/14493366.html