- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华清远见教育集团 高端IT就业培训专家 华清远见教育集团 扫描大树或关注(微信号:farsight2013) 第一时间获取更多华清远见课程信息。 谢 谢! 华清远见教育集团 * * * * 第11章 嵌入式linux内核常见数据结构 本章的要求 熟悉内核中的链表 熟悉内核中的树 熟悉内核中的哈希表 链表 链表是一种常见的重要数据结构,它可以动态地进行存储分配,根据需要开辟内存单元,还可以方便地实现数据的增加和删除。链表中的每个元素都由两部分组成:数据域和指针域。 数据域用于存储数据元素的信息,指针域用于存储该元素的直接后继元素的地址。其整体结构就是用指针链接起来的线性表 链表 单向链表 单向链表的每个节点中除数据域以外还有一个指针域,用来指向其后续节点,其最后一个节点的指针域为空(NULL)。 单向链表由头指针唯一确定,因此单向链表可以用头指针的名字来命名,头指针指向单向链表的第一个节点。 在用C语言实现时,首先说明一个结构类型,在这个结构类型中包含一个(或多个)数据成员以及一个指针成员,如下所示。 typedef struct _link_node { element_type data; /* element_type为有效数据类型*/ struct _link_node *next; } link_node; typedef link_node *link_list; 链表 双向链 在单向链表中,每个节点中只包括一个指向下个节点的指针域,因此要在单向链表中插入一个新节点,就必须从链表头指针开始逐个遍历链表中的节点。双向链表与单向链表不同,它的每个节点中包括两个指针域,分别指向该节点的前一个节点和后一个节点,如下图: 链表 循环链表 单向链表的最后一个节点的指针域为空(NULL)。如果将这个指针利用起来,以指向单向链表的第一个节点,就能组成一个单向循环链表,如下图 树 树是由n (n ≥ 0)个节点组成的有限集合。如果n = 0,称为空树;如果n>0,则 ① 有一个特定的称之为根的节点,它只有直接后继,但没有直接前驱; ② 除根以外的其他节点划分为m (m ≥ 0)个互不相交的有限集合T0, T1, …, Tm-1,每个集合又是一棵树,并且称之为根的子树。每棵子树的根节点有且仅有一个直接前驱,但可以有0个或多个直接后继。 树 与树相关的定义如下。 ①节点:表示树中的元素,包括数据元素的内容及其指向其子树的分支。 ② 节点的度:节点的分支数。 ③ 终端节点(叶子):度为0的节点。 ④ 非终端节点:度不为0的节点。 ⑤ 节点的层次:树中根节点的层次为1,根节点子树的根为第2层,依此类推。 树 与树相关的定义如下。 ⑥ 树的度:树中所有节点度的最大值。 ⑦ 树的深度:树中所有节点层次的最大值。 ⑧ 有序树、无序树:如果树中每棵子树从左向右的排列拥有一定的顺序,不得互换,则称为有序树,否则称为无序树。 ⑨ 森林:是m(m≥0)棵互不相交的树的集合。 二叉树 二叉树是一种有序树,它是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。它的特点是每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉树 二叉树的性质 : 二叉树第i(i≥1)层上的节点最多为2i-1个。 深度为k(k≥1)的二叉树最多有2k-1个节点。 在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一。 总节点数为各类节点之和:n = n0 + n1 + n2 总节点数为所有子节点数加一:n = n1 + 2*n2 + 1 故得:n0 = n2 + 1 ; 满二叉树 :深度为k(k≥1)时有2k-1个节点的二叉树。 完全二叉树 :只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。 具有n个节点的完全二叉树的深度为 (log2n)+1或『log2(n+1)。 二叉树 二叉树的存储 : 顺序存储结构 :完全二叉树节点的编号方法是从上到下,从左到右,根节点为1号节点。设完全二叉树的节点数为n,某节点编号为i 当i>1(不是根节点)时,有父节点,其编号为i/2」; 当2*i≤n时,有左孩子,其编号为2*i ,否则没有左孩子,本身是叶节点; 当2*i+1≤n时,有右孩子,其编号为2*i+1 ,否则没有右孩子; 当i为奇数且不为1时,有左兄弟,其编号为i-1,否则没有左兄弟; 当i为偶数且小于n时,有右兄弟,其编号为i+1,否则没有右兄弟; 二叉树 有n个节点的完全二叉树可以用有n+1个元素的数组进行顺序存储,节点号和数组下标一一对应,下标为零的元素不用。 利用以上特性,
文档评论(0)