当前位置: 首页 > news >正文

数据结构基础知识(2)

内容接自《数据结构基础知识(1)》。。。

链表的分类

单链表

      单链表是一种链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。图中阴影区域表示数据域,空白区表示指针域。而且最后一个指针域为空。

循环链表

      循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表又分为单循环链表和多重链的循环链表。

双链表

       双链表也称为双向链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。双链表的灵活度要比单链表好一些,但开支要大一些(存在两个指针)。

顺序表与链表的比较

       顺序表存储位置是相邻连续的,可以随即访问的一种数据结构,一个顺序表在使用前必须指定起长度,一旦分配内存,则在使用中不可以动态的更改。他的优点是访问数据是比较方便,可以随即的访问表中的任何一个数据。

       链表是通过指针来描述元素关系的一种数据结构,他可以是物理地址不连续的物理空间。不能随即访问链表元素,必须从表头开始,一步一步搜索元素。它的优点是:对于数组,可以动态的改变数据的长度,分配物理空间。

       在使用中:如果一个数组在使用中,查询比较多,而插入,删除数据比较少,数组的长度不变时,选顺序表比较合理。如果插入,删除,长度不定的数组,可以选链表。

树(Tree)

树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:

(1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。

(2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。

(3)K中各结点,对关系N来说可以有m个后继(m>=0)。

树具有以下特点:

(1)    每个节点有零个或多个子节点。

(2)    每个子节点只有一个父节点。

(3)    没有父节点的节点称为根节点。

关于树的一些术语
        节点的度:一个节点含有的子树的个数称为该节点的度(有多少个孩子)

        叶节点或终端节点:度为零的节点称为叶节点;

        非终端节点或分支节点:度不为零的节点;

        双亲节点或父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;

        孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;

        兄弟节点:具有相同父节点的节点互称为兄弟节点;

        树的高度或深度:定义一棵树的根结点层次为1,其他节点的层次是其父结点层次加1。一棵树中所有结点的层次的最大值称为这棵树的深度。节点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;

        树的度:一棵树中,最大的节点的度称为树的度;最大

        节点的祖先:从根到该节点所经分支上的所有节点;往上

        子孙:以某节点为根的子树中任一节点都称为该节点的子孙。往下

        森林:由m(m>=0)棵互不相交的树的集合称为森林;

树的遍历

       树的遍历分为:前序遍历、后序遍历、层次遍历。前序遍历的遍历顺序是先访问根结点,再访问叶子结点;后序遍历的遍历顺序是先访问叶子结点,再访问根结点;而层次遍历则是按层次进行遍历。

2,3,4保存到所定义的队列中;

二叉树

         二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树又分为满二叉树、完全二叉树、非完全二叉树等。

图(Graph)

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

图的遍历

        图的遍历分为深度优先遍历和广度优先遍历。深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止。

       广度优先遍历方法描述为:从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。

转载于:https://www.cnblogs.com/Ph-one/p/6396774.html

相关文章:

  • 软考之操作系统(1)
  • 高效编程之互斥锁和自旋锁的一些知识
  • 信号量,互斥锁,自旋锁
  • 全双工和半双工
  • spi和I2c的速率
  • 以太网接口
  • 变量分类
  • C语言8大经典排序算法(1)
  • C语言8大经典排序算法(2)
  • O(n²)、O(n)、O(1)、O(nlogn)
  • tcp与socket关系
  • linux怎么区别文本文件和二进制文件
  • Linux下的文件及文件后缀名
  • CCT之CAMERA TUNNING调试学习总结
  • linux内核的三种主要调度策略
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • canvas绘制圆角头像
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • IP路由与转发
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript设计模式系列一:工厂模式
  • JavaScript新鲜事·第5期
  • nfs客户端进程变D,延伸linux的lock
  • node入门
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python大佬养成计划----difflib模块
  • Shell编程
  • 回顾2016
  • 技术:超级实用的电脑小技巧
  • 解析带emoji和链接的聊天系统消息
  • 面试遇到的一些题
  • 前端技术周刊 2019-02-11 Serverless
  • 入口文件开始,分析Vue源码实现
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 再谈express与koa的对比
  • ​configparser --- 配置文件解析器​
  • ​iOS安全加固方法及实现
  • #include到底该写在哪
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Lua:Lua调用C++生成的DLL库
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)Nginx简介和安装教程
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C++17) std算法之执行策略 execution
  • (c语言)strcpy函数用法
  • (Forward) Music Player: From UI Proposal to Code
  • (zt)最盛行的警世狂言(爆笑)
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)linux下的时间函数使用
  • (转)四层和七层负载均衡的区别