当前位置:   article > 正文

数据结构图的遍历_常用数据结构

适合遍历的数据结构有哪些

5b2ed20a9e08887e38cce5c26038c751.png

八大数据结构分类:

57a466fcef2537771bd6a9f808d068d5.png

目录

  1. 数组
  2. 队列
  3. 链表
  4. 散列表

1、数组(略)

优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便

缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。

2、栈

定义:栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

fc3d0d6a8f61bcdd9365461b2350ebba.png
  1. //可以用js模拟栈:
  2. let stack = new Array(1,2,3);
  3. stack.pop();//3 出栈
  4. stack.pop();//2 出栈
  5. stack.pop();//1 出栈

3、队列

定义:队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队,示例图如下:

85dba91391f29f5cccd44f5b15207dfc.png
  1. //可以用js模拟队列:
  2. let queue = new Array('A','B','C');
  3. queue.shift();//A
  4. queue.shift();//B
  5. queue.shift();//C

4、树(已二叉树为例)

定义:是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  • 每个节点有零个或多个子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;

1)二叉树的遍历

1.1)深度优先遍历(Depth-First-Search)

  • 前序遍历:访问根–>遍历左子树–>遍历右子树;
  • 中序遍历:遍历左子树–>访问根–>遍历右子树;
  • 后序遍历:遍历左子树–>遍历右子树–>访问根;

1.2)广度遍历(Breadth-First-Search):按照层次一层层遍历

1ea7027f3ae069654b35e16131709ad4.png
  1. // 前序遍历(根左右):[ '-', '+', 'a', '*', 'b', 'c', '/', 'd', 'e' ]
  2. // 中序遍历(左根右):[ 'a', '+', 'b', '*', 'c', '-', 'd', '/', 'e' ]
  3. // 后序遍历(左右根):[ 'a', 'b', 'c', '*', '+', 'd', 'e', '/', '-' ]
  4. // 广度遍历(按层遍历):[ '-', '+', '/', 'a', '*', 'd', 'e', 'b', 'c' ]
  5. 解法有2种,代码太长,放github上。
  6. (1)、递归
  7. (2)、非递归

例子:github地址

5、链表

定义:链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

  1. /**
  2. * 一、单项链表
  3. * */
  4. // 节点
  5. function Node(data) {
  6. this.data = data;//存储数据
  7. this.next = null;//指向链表中下一个节点的指针
  8. }
  9. // 链表
  10. function SinglyList() {
  11. this._length = 0;//用于表示链表中的节点数量
  12. this.head = null;//分配一个节点作为链表的头
  13. }
  14. /**
  15. * 二、双项链表
  16. * */
  17. //节点
  18. function Node(value){
  19. this.data = value;//存储数据
  20. this.previous = null;//前指针
  21. this.next = null;//后指针
  22. }
  23. //链表
  24. function DoublyList(){
  25. this._length = 0;//链表长度
  26. this.head = null;//头指针
  27. this.tail = null;//尾指针
  28. }

例子:github地址

6、散列表

定义:散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

7、

定义:堆是一种比较特殊的数据结构,可以被看做一棵树的数组对象,具有以下的性质:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;
  • 堆总是一棵完全二叉树。

8、

定义:图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

参考文章:

Data Structures With JavaScript: Singly-Linked List and Doubly-Linked List​code.tutsplus.com
2c8d591a57b05ebebfbd18908a1af37e.png
人类身份验证 - SegmentFault​segmentfault.com 数据结构:八大数据结构分类_公众号:鄙人薛某-CSDN博客_数据结构​blog.csdn.net
b04466052afebfd5e0a32c5420bac517.png
人类身份验证 - SegmentFault​segmentfault.com 二叉树与 JavaScript - 前端 - 掘金​juejin.im
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/722430
推荐阅读
相关标签
  

闽ICP备14008679号