B+树可以看作是B树的变形,对于存放在外存贮器上的字典,B+树比B树更为常用。
一个m阶的B+树满足下列条件∶
(1) 每个结点至多有m棵子树。
(2) 除根结点外,其它每个分支至少有m/2棵子树。
(3) 非叶结点的根结点至少有两棵子树。
(4) 有n棵子树的结点有n个关键码,叶结点中至少包含n/2个关键码。
(5) 叶结点都在同一层中,其中存放数据文件中记录的关键码及指向该记录的指针,或存放数据文件分块后每块的最大关键码及指向该块的指针。叶结点按关键码值大小顺序链接。可以把每个叶结点看成是一个基本索引块(直接指向数据文件中的记录)。
(6) 所有分支结点可看成是索引的索引。使结点中仅包含它的各个子结点中最大(或最小)关键码的分界值及指向子结点的指针。
树型结构都差不多吧,先学会二叉树,这是树中的最容易的树型结构.
1.对树型结构的定义.
2.创建树.
3.对树的遍历.
C#中的专业的树型表的控件TreeView
如果你要用控制台来完成要难点.不过不要紧,这个和C中的数据结构设计差不多.
我在这里二叉树的定义,创建,与遍历的介绍.如果你想更复杂的,可对二叉树的扩长.
/// <summary>
/// 定义结点类:
/// </summary>
class node
{
public char data;
public node lchild, rchild;
}
class BiThrTree
{
static public void CreateBiThrTree(ref node T)
{
char ch;
ch = (char)Console.Read();
if (ch == '\0' || ch=='\r'||ch=='\n')
{
T = null;
}
else
{
T = new node();
T.data = ch;
CreateBiThrTree(ref T.lchild);
CreateBiThrTree(ref T.rchild);
}
}
static public void PrePrint(node T)
{
if (T != null)
{
Console.Write(T.data + "\t");
PrePrint(T.lchild);
PrePrint(T.rchild);
}
}
static void Main()
{
node mytree = null;
Console.WriteLine("Please input nodes:");
CreateBiThrTree(ref mytree);
Console.WriteLine("\n按先序输出:\n");
PrePrint(mytree);
Console.WriteLine("\n按中序输出:\n");
MinPrint(mytree);
Console.WriteLine("\n按后序输出:\n");
StpPrint(mytree);
Console.Write("\n");
Console.ReadLine();
Console.ReadLine();
}
private static void MinPrint(node T)
{
if (T != null)
{
MinPrint(T.lchild);
Console.Write(T.data + "\t");
MinPrint(T.rchild);
}
//throw new Exception("The method or operation is not implemented.");
}
private static void StpPrint(node T)
{
if (T != null)
{
StpPrint(T.lchild);
StpPrint(T.rchild);
Console.Write(T.data+"\t");
}
//throw new Exception("The method or operation is not implemented.");
}
}