数据结构(C#版)笔记(三)

本文深入探讨了C#中的字符串处理机制,包括字符串驻留和数组特性,以及树和二叉树的基础概念与操作。揭示了字符串如何在CLR中高效存储,数组的内存布局,树的术语和基本操作,以及二叉树的定义和性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

25.字符串
在 C#中,创建串不能用 new 操作符,而是使用一种称为字符串驻留的机制。
这是因为 C#语言将 String 看作是基元类型。基元类型是被编译器直接支持的类
型,可以在源代码中用文本常量(Literal)来直接表达字符串。当 C#编译器对源代
码进行编译时,将文本常量字符串存放在托管模块的元数据中。而当 CLR 初始
化时, CLR 创建一个空的散列表,其中的键是字符串,值为指向托管堆中字符
串对象的引用。散列表就是哈希表,当 JIT
编译器编译方法时,它会在散列表中查找每一个文本常量字符串。如果找不到,
就会在托管堆中构造一个新的 String 对象(指向字符串),然后将该字符串和指
向该字符串对象的引用添加到散列表中;如果找到了,不会执行任何操作。

26.数组
数组总是在托管堆上分配空间,是引用类型。任何数组变量包含的是一个
指向数组的引用,而非数组本身。当数组中的元素的值类型时,该类型所需的内
存空间也作为数组的一部分而分配;当数组的元素是引用类型时,数组包含是只
是引用。Array 还继承了 ICloneable、IList、ICollection、IEnumerable 等接口。

27.树
树(Tree)是 n(n≥0)个相同类型的数据元素的有限集合。树中的数据元素叫结点(Node)
树的定义是递归的,用树来定义树。

28.树的相关术语
1、 结点(Node):表示树中的数据元素,由数据项和数据元素之间的关系组成。
2、 结点的度(Degree of Node):结点所拥有的子树的个数。
3、 树的度(Degree of Tree):树中各结点度的最大值。
4、 叶子结点(Leaf Node):度为 0 的结点,也叫终端结点。
5、 分支结点(Branch Node):度不为 0 的结点,也叫非终端结点或内部结点。
6、 孩子(Child):结点子树的根。
7、 双亲(Parent):结点的上层结点叫该结点的双亲。
8、 祖先(Ancestor):从根到该结点所经分支上的所有结点。
9、 子孙(Descendant):以某结点为根的子树中的任一结点。
10、 兄弟(Brother):同一双亲的孩子。
11、 结点的层次(Level of Node):从根结点到树中某结点所经路径上的分支
数称为该结点的层次
12、 堂兄弟(Sibling):同一层的双亲不同的结点。
13、 树的深度(Depth of Tree):树中结点的最大层次数。
14、 无序树(Unordered Tree):树中任意一个结点的各孩子结点之间的次序构 成无关紧要的树。通常树指无序树。
15、 有序树(Ordered Tree):树中任意一个结点的各孩子结点有严格排列次序
的树。二叉树是有序树,因为二叉树中每个孩子结点都确切定义为是该结点的左
孩子结点还是右孩子结点     
16、 森林(Forest): m(m≥0)棵树的集合。自然界中的树和森林的概念差别很
大,但在数据结构中树和森林的概念差别很小。从定义可知,一棵树有根结点和
m 个子树构成,若把树的根结点删除,则树变成了包含 m 棵树的森林。当然,根据定义,一棵树也可以称为森林。

29.树的基本操作通常有以下 10 种:
1、 Root():求树的根结点,如果树非空,返回根结点,否则返回空;
2、 Parent(t):求结点 t 的双亲结点。如果 t 的双亲结点存在,返回双亲结点,
否则返回空;
3、 Child(t,i):求结点 t 的第 i 个子结点。如果存在,返回第 i 个子结点,否
则返回空;
4、 RightSibling(t):求结点 t 第一个右边兄弟结点。如果存在,返回第一个
右边兄弟结点,否则返回空;
5、 Insert(s,t,i):把树 s 插入到树中作为结点 t 的第 i 棵子树。成功返回 true,
否则返回 false;
6、 Delete(t,i):删除结点 t 的第 i 棵子树。成功返回第 i 棵子树的根结点,否
则返回空;
7、 Traverse(TraverseType):按某种方式遍历树;
8、 Clear():清空树;
9、 IsEmpty():判断树是否为空树。如果是空树,返回 true,否则返回 false;
10、 GetDepth():求树的深度。如果树不为空,返回树的层次,否则返回 0。

30.二叉树
二叉树(Binary Tree)是 n(n≥0)个相同类型的结点的有限集合。
满二叉树(Full Binary Tree):如果一棵二叉树只有度为 0 的结点和度为 2
的结点,并且度为 0 的结点在同一层上,则这棵二叉树为满二叉树
完全二叉树(Complete Binary Tree):深度为 k,有 n 个结点的二叉
树当且仅当其每一个结点都与深度为 k,有 n 个结点的满二叉树中编号从 1 到 n的结点一一对应时,称为完全二叉树

31.二叉树的性质
理论知识参考博客:http://www.cnblogs.com/skywang12345/p/3576328.html

32.二叉树的存储结构
参考博客:https://www.cnblogs.com/yw-ah/p/5872516.html

33.二叉树的遍历
参考博客:https://www.cnblogs.com/VectorZhang/p/5603358.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值