关于双向链表和二叉树链表的区别
双向链表和二叉树链表区别为:节点指针数量不同、访问方向权限不同、节点存储内容不同。双向链表和二叉树链表都能从链表中的任何一个结点出发能找到任何其他结点。都用来存放线性数组中的数据元素。
一、节点指针数量不同
1、双向链表:双向链表的每个数据结点中包含一个元素和两个指针。
2、二叉树链表:二叉树链表的每个数据结点中包含一个元素和只有一个指针。
二、访问方向权限不同
1、双向链表:双向链表除了首尾节点,其他节点都能访问他的前节点和后节点。双向链表节点两个指针分别指向前一节点和后一节点。
2、二叉树链表:二叉树链表是单向链表,只能指向前面节点。不能向后。二叉树链表的每个节点只能访问他的左右孩子节点,不能向上访问他的父节点。
三、节点存储内容不同
二叉树与双向链表都是一种极其重要的数据结构。它们与数组、向量、链表一样都是一种顺序容器,提供了按位置访问数据的方法。但是有一个缺点,它们都是按照位置来确定数据,想要通过值来查找数据,只能通过遍历的方式实现。而二叉树在很大程度上解决了这个缺点,二叉树是按值来保存元素,也按值来访问元素。而双向链表的每个节点都只能保存两个指针。
举例:
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。
下图为一个最基本的普通二叉树链表。
二叉树的存储
1,顺序存储
使用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引。
用数组顺序存储一般只适合完全二叉树,如果二叉树出现倾斜情况,采用顺序存储的方式将是十分浪费空间
比如上面的489没有的话
存储表现形式将是如下(^代表为空):
2,二叉链表存储
这个就跟双向链表有点儿像了
采用链式存储。由二叉树定义可知,二叉树的每个结点最多有两个孩子。因此,可以将结点数据结构定义为一个数据和两个指针域
下面为二叉树链表节点定义代码:
//定义结点代码:
typedef struct BiTNode{TElemType data;//数据struct BiTNode *lchild, *rchild;//左右孩子指针
} BiTNode, *BiTree;
下面为双向链表结构定义:
// C++ 64位双向链表
typedef struct LIST_ENTRY64 {ULONGLONG Flink;ULONGLONG Blink;} LIST_ENTRY64;
typedef LIST_ENTRY64 *PLIST_ENTRY64;// Delphi 64位双向链表PLIST_ENTRY64 =^LIST_ENTRY64;LIST_ENTRY64 =packed recordFlink:PVOID64;//ULONGLONG; //8ByteBlink:PVOID64;//ULONGLONG;end;// Delphi 32位双向链表PListEntry = ^TListEntry;_LIST_ENTRY = recordFlink: PListEntry;Blink: PListEntry;end;TListEntry = _LIST_ENTRY;LIST_ENTRY = _LIST_ENTRY;// C++ 32位双向链表typedef struct _LIST_ENTRY {struct _LIST_ENTRY *Flink;struct _LIST_ENTRY *Blink;} LIST_ENTRY,*PLIST_ENTRY,*RESTRICTED_POINTER PRLIST_ENTRY;
注:LIST_ENTRY 双向链表结构在WINDOWS中一般主要用于内核态
一句话总结:
双向链表是指除了首尾节点,其他节点都能访问他的前节点和后节点。二叉树链表就是二叉树,每个节点只能访问他的左右孩子节点,不能向上访问他的父节点,所以二叉树是单向的
关于双向链表和二叉树链表的区别相关推荐
- 【python】数据结构和算法 + 浅谈单链表与双链表的区别
有这么一句话说"程序=数据结构+算法",也有人说"如果把编程比作做菜,那么数据结构就好比食材(菜),算法就好比厨艺(做菜的技巧)". 当然这是笼统的说法,不过也 ...
- 红黑树和二叉树有什么区别?
红黑树和二叉树有什么区别? 什么是二叉树?什么是红黑树? 二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在分支大于 2 的节点,二叉树的数据结构如下图所示 这是一棵拥有 ...
- 数组和链表的区别浅析
1.链表是什么 链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素: 链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列, ...
- php数组和链表的区别,js里链表和数组的对比
1.链表是什么 链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素: 链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列, ...
- 算法与数据结构--数组和链表的区别
最近由于在找工作,经历了一些校招面试后,感觉在数据结构和操作系统上面,还有很多的欠缺.所以今天要学习一下数据结构.还是从面试的那到题开始. 数组和链表的区别? C和C++语言中用数组处理一组数据类型相 ...
- 数组和链表的区别以及应用场景
数组和链表的区别以及应用场景 首先我们要先理解什么是数组和链表 在计算机中要对给定的数据集进行若干处理,首要任务是把数据集的一部分(当数据量非常大时,可能只能一部分一部分地读取数据到内存中来处理)或全 ...
- 二叉树链表结构表示法
二叉树链表的结构声明: struct tree { int data; struct tree *left; stryct tree *right; }; typedef struct tree t ...
- 每日一题(41)—— 数组和链表的区别
数组和链表的区别: 数组:数据顺序存储,固定大小 连表:数据可以随机存储,大小可动态改变
- 20140617 数组和链表的区别
1.数组和链表的区别 逻辑结构方面: 数组:静态申请的连续的内存空间,编译阶段确定空间大小,运行阶段是不允许改变 链表:动态申请的内存空间,并不像数组一样需要事先申请好大小,链表是现用现申请就OK,根 ...
最新文章
- with(nolock)的用法
- python编程输入标准-揭秘python编程技巧
- 【Java 集合】Java 集合的线程安全性 ( 加锁同步 | java.utils 集合 | 集合属性 | java.util.concurrent 集合 | CopyOnWrite 机制 )
- ifconfig 命令介绍
- 修改MySQL字段为首字母大写
- python程序设计基础电子版_Python 程序设计基础(董付国 著)完整版PDF[6MB]
- 耶鲁计算机科学专业,Top3美国名校耶鲁大学录取 计算机科学专业
- PHP中abstract 和 interface的区别
- java运行时异常中文_JAVA——运行时异常(RuntimeException)
- c语言的class,Objective-C中Class的本质
- win10 快捷键 - 采矿篇
- 安卓app逆向破解脱壳教程
- 如何用python把pdf转为word_如何使用python将双栏pdf转换成word?
- 数字图像处理——灰度变换
- 海龟python词树_python海龟画树
- php多张图片制作成视频教程,如何将多张图片转换成视频?快速制作电子相册的方法...
- 高通滤波器与低通滤波器
- 【Go语言 · 学习笔记】
- vue 使用echarts实现3D饼图和环形图
- linux php环境搭建教程,linux php环境搭建教程