关于树型结构与泛型,在线等

enaking 2020-10-11 03:01:48
大家好,最近我想写一个树型结构和泛型结合起来的一个东西
在我思路中,有Tree和TreeNode两个类,Tree类描述整个树型结构及方法,而TreeNode类代表其中一个节点。但我的节点是想适用到未来开发的各种类中。所以要用到泛型。现在我就比较乱,不知道怎么架构。始终理不清Tree、TreeNode与泛型的结合。对泛型写法不太了解。

并且后期我会把递归等常用的集成到里面,并且在递归中委托事件出去完成个性化业务。如下(代码写法不一定正确,只是想说清楚我的想法): 谢谢大家给个关键点的思路

Recurrence(T node)
{
foreach (nodeEach in node.Nodes )

委托事件ing
Recurrence(nodeEach )
委托事件ed

}
...全文
1734 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq77618 2020-10-12
  • 打赏
  • 举报
回复
学习到了,谢谢前辈的分享
threenewbee 2020-10-12
  • 打赏
  • 举报
回复
class Tree<T>
{
public Node<T> root;
}
class Node<T>
{
public T value;
public List<Node<T>> children;
}
wanghui0380 2020-10-12
  • 打赏
  • 举报
回复
这样把,我给个例子你就明白了
  public static class Linq
    {
        public static IEnumerable<T> Flatten<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector)
        {
            foreach (var x1 in source)
            {
                yield return x1;

                var res = selector(x1);
                foreach (var re in res)
                {
                    yield return re;
                }
            }

        }
    }
调用
TreeView tv = new TreeView();

            TreeNode node1 = new TreeNode("A");
            TreeNode node2 = new TreeNode("A1");
            node1.Nodes.Add(node2);

            

            tv.Nodes.Add(node1);

            var nodes = tv.Nodes.Cast<TreeNode>();

           var Flatten_nodes= nodes.Flatten(p => p.Nodes.Cast<TreeNode>());

           //打印所有的
            foreach (var flattenNode in Flatten_nodes)
            {
                Console.WriteLine(flattenNode.Text);
            }
你看这个调用过程,我们压根就不关心他是treeview还是treenode,我只是需要 odes.Flatten(p => p.Nodes.Cast<TreeNode>()). 你告诉我怎么找到下一级的IEnumerable<TreeNode>
正怒月神 2020-10-12
  • 打赏
  • 举报
回复
引用 7 楼 enaking 的回复:
[quote=引用 3 楼 wanghui0380 的回复:]无需任何多余的思考和封装,因为根本就不需要。你只关心nodes就好,tree不tree那是外观,同时所谓的node都是多余的,因为任何层级其实都是 ienumerable<T> ,我们不关心什么children不children,你只需要和slectmany一样告诉们下一步的ienumerable<T>怎么找就好 所以linq,selectmany本身就是。如果你觉着非要是个“树”,那么自己写个扩展方法写成HierarchicalSelectMany方法也未尝不可 https://www.google.com.hk/search?newwindow=1&safe=strict&source=hp&ei=UKWDX6maNpK5mAX6j4OgCw&q=C%23+linq+hierarchical+selectmany&oq=C%23+linq+hierarchical+selectmany&gs_lcp=CgZwc3ktYWIQAzoCCAA6BAgAEB46BggAEAcQHjoECAAQDToICAAQBxAeEBM6BAgAEBM6BggAEB4QEzoICAAQCBAeEBM6BggAEA0QHjoHCCEQChCgAVCWD1i1emCdfWgBcAB4AIABxgSIAbkzkgEKMi0xOC4yLjAuMpgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwipgpaK6K3sAhWSHKYKHfrHALQQ4dUDCAc&uact=5 我用google搜索了,这玩意就别相信百度了,博客园那波人还瞧不起这东西,不屑一写。(唯独写了这东西的是sp1234的“重量级查询控件”,这帖子你百度可以找到,我就不废那个力了) 来给我google的老外的扩展方法
public static class Linq
{
    public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
    {
        return selector(source).SelectMany(c => Flatten(c, selector))
                               .Concat(new[] { source });
    }
}
看明白了么,我们不关心啥tree,啥nodes,我们关心的是 hierarchical 层级数据,Flatten 扁平查询
引用 3 楼 wanghui0380 的回复:
无需任何多余的思考和封装,因为根本就不需要。你只关心nodes就好,tree不tree那是外观,同时所谓的node都是多余的,因为任何层级其实都是 ienumerable<T> ,我们不关心什么children不children,你只需要和slectmany一样告诉们下一步的ienumerable<T>怎么找就好 所以linq,selectmany本身就是。如果你觉着非要是个“树”,那么自己写个扩展方法写成HierarchicalSelectMany方法也未尝不可 https://www.google.com.hk/search?newwindow=1&safe=strict&source=hp&ei=UKWDX6maNpK5mAX6j4OgCw&q=C%23+linq+hierarchical+selectmany&oq=C%23+linq+hierarchical+selectmany&gs_lcp=CgZwc3ktYWIQAzoCCAA6BAgAEB46BggAEAcQHjoECAAQDToICAAQBxAeEBM6BAgAEBM6BggAEB4QEzoICAAQCBAeEBM6BggAEA0QHjoHCCEQChCgAVCWD1i1emCdfWgBcAB4AIABxgSIAbkzkgEKMi0xOC4yLjAuMpgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwipgpaK6K3sAhWSHKYKHfrHALQQ4dUDCAc&uact=5 我用google搜索了,这玩意就别相信百度了,博客园那波人还瞧不起这东西,不屑一写。(唯独写了这东西的是sp1234的“重量级查询控件”,这帖子你百度可以找到,我就不废那个力了) 来给我google的老外的扩展方法
public static class Linq
{
    public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
    {
        return selector(source).SelectMany(c => Flatten(c, selector))
                               .Concat(new[] { source });
    }
}
看明白了么,我们不关心啥tree,啥nodes,我们关心的是 hierarchical 层级数据,Flatten 扁平查询
我参考了一下treeview控件中的node结构,里面是一个TreeNode加一个TreeNodeCollection,所以我现在纠结中[/quote] 这个意思?
static void Main(string[] args)
        {
            //初始化T
            User user = new User() { Name = "tyler", Age = 2 };
            //创建node,并且实现act委托
            Node<User> node = new Node<User>();
            node.data = user;
            node.act = (x) => Console.WriteLine($"{x.Name}--{x.Age}");
            //调用
            node.ToDo();    //tyler--2

            //创建 child
            User user1 = new User() { Name = "t1", Age = 10 };
            Node<User> node1 = new Node<User>();
            node1.data = user1;
            node.Child = node1;
            node.Child.ToDo();  //t1--10

            Console.ReadLine();
        }

        public class Node<T>
        {
            public int Key { get; set; }
            public string Value { get; set; }
            public T data { get; set; }

            private Node<T> child;
            public Node<T> Child
            {
                get { return child; }
                set
                {
                    child = value;
                    //默认赋值act动作
                    if (child.act == null)
                        child.act = act;
                }
            }

            public Action<T> act;

            public void ToDo()
            {
                if (act != null)
                    act(data);
            }
        }
enaking 2020-10-12
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
上面是层级到扁平,同样的思路我们可以反向写扁平到层级的扩展方法。当然我们依然不关心啥tree和nodes 因为除非微软能给你统一 一个所谓的IHierarchicalData接口,否则都是白搭。因为tree是外观,我说菜单也是外观,sp1234说control也是外观。 微软没给统一层级描述接口,那么各家都自己弄。最后是web的treeview有自己的东西,winform的有自己的东西,control还有自己的东西。你自己在搞个你自己的东西? 所以我们依旧不封装,也无法封装。只能用外观,用访问者写临时扩展。这个不值得统一
我不是写一个外观,是数据结构,很多不同的对象,其集合起来是一个树的结构,如地区,部门,我就想把树结构的特性用在不同的对象上。
enaking 2020-10-12
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
无需任何多余的思考和封装,因为根本就不需要。你只关心nodes就好,tree不tree那是外观,同时所谓的node都是多余的,因为任何层级其实都是 ienumerable<T> ,我们不关心什么children不children,你只需要和slectmany一样告诉们下一步的ienumerable<T>怎么找就好 所以linq,selectmany本身就是。如果你觉着非要是个“树”,那么自己写个扩展方法写成HierarchicalSelectMany方法也未尝不可 https://www.google.com.hk/search?newwindow=1&safe=strict&source=hp&ei=UKWDX6maNpK5mAX6j4OgCw&q=C%23+linq+hierarchical+selectmany&oq=C%23+linq+hierarchical+selectmany&gs_lcp=CgZwc3ktYWIQAzoCCAA6BAgAEB46BggAEAcQHjoECAAQDToICAAQBxAeEBM6BAgAEBM6BggAEB4QEzoICAAQCBAeEBM6BggAEA0QHjoHCCEQChCgAVCWD1i1emCdfWgBcAB4AIABxgSIAbkzkgEKMi0xOC4yLjAuMpgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwipgpaK6K3sAhWSHKYKHfrHALQQ4dUDCAc&uact=5 我用google搜索了,这玩意就别相信百度了,博客园那波人还瞧不起这东西,不屑一写。(唯独写了这东西的是sp1234的“重量级查询控件”,这帖子你百度可以找到,我就不废那个力了) 来给我google的老外的扩展方法
public static class Linq
{
    public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
    {
        return selector(source).SelectMany(c => Flatten(c, selector))
                               .Concat(new[] { source });
    }
}
看明白了么,我们不关心啥tree,啥nodes,我们关心的是 hierarchical 层级数据,Flatten 扁平查询
引用 3 楼 wanghui0380 的回复:
无需任何多余的思考和封装,因为根本就不需要。你只关心nodes就好,tree不tree那是外观,同时所谓的node都是多余的,因为任何层级其实都是 ienumerable<T> ,我们不关心什么children不children,你只需要和slectmany一样告诉们下一步的ienumerable<T>怎么找就好 所以linq,selectmany本身就是。如果你觉着非要是个“树”,那么自己写个扩展方法写成HierarchicalSelectMany方法也未尝不可 https://www.google.com.hk/search?newwindow=1&safe=strict&source=hp&ei=UKWDX6maNpK5mAX6j4OgCw&q=C%23+linq+hierarchical+selectmany&oq=C%23+linq+hierarchical+selectmany&gs_lcp=CgZwc3ktYWIQAzoCCAA6BAgAEB46BggAEAcQHjoECAAQDToICAAQBxAeEBM6BAgAEBM6BggAEB4QEzoICAAQCBAeEBM6BggAEA0QHjoHCCEQChCgAVCWD1i1emCdfWgBcAB4AIABxgSIAbkzkgEKMi0xOC4yLjAuMpgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwipgpaK6K3sAhWSHKYKHfrHALQQ4dUDCAc&uact=5 我用google搜索了,这玩意就别相信百度了,博客园那波人还瞧不起这东西,不屑一写。(唯独写了这东西的是sp1234的“重量级查询控件”,这帖子你百度可以找到,我就不废那个力了) 来给我google的老外的扩展方法
public static class Linq
{
    public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
    {
        return selector(source).SelectMany(c => Flatten(c, selector))
                               .Concat(new[] { source });
    }
}
看明白了么,我们不关心啥tree,啥nodes,我们关心的是 hierarchical 层级数据,Flatten 扁平查询
我参考了一下treeview控件中的node结构,里面是一个TreeNode加一个TreeNodeCollection,所以我现在纠结中
正怒月神 2020-10-12
  • 打赏
  • 举报
回复
你要先明确,这个泛型在你的tree类里,代表的含义是什么? 是一个key,还是value,或者用来做什么呢?
wanghui0380 2020-10-12
  • 打赏
  • 举报
回复
一定要统一的化
public static IEnumerable<Node<T>> Hierarchize<T, TKey, TOrderKey>(
    this IEnumerable<T> elements, 
    TKey topMostKey, 
    Func<T, TKey> keySelector, 
    Func<T, TKey> parentKeySelector, 
    Func<T, TOrderKey> orderingKeySelector)
{
    var families = elements.ToLookup(parentKeySelector);
    var childrenFetcher = default(Func<TKey, IEnumerable<Node<T>>>);
    childrenFetcher = parentId => families[parentId]
        .OrderBy(orderingKeySelector)
        .Select(x => new Node<T>(x, childrenFetcher(keySelector(x))));

    return childrenFetcher(topMostKey);
}


public class Node<T>
{
    public T Value { get; private set; }
    public IList<Node<T>> Children { get; private set; }

    public Node(T value, IEnumerable<Node<T>> children)
    {
        this.Value = value;
        this.Children = new List<Node<T>>(children);
    }
}
其实就有些脱裤子的意思,先聚合到自己的临时Node<T>里,然后在写临外一个Cast 或makeXXXXTree方法在遍历和转换(当然你叫外观模式可以,你想弄成所谓的访问者模式也随便你)
wanghui0380 2020-10-12
  • 打赏
  • 举报
回复
上面是层级到扁平,同样的思路我们可以反向写扁平到层级的扩展方法。当然我们依然不关心啥tree和nodes 因为除非微软能给你统一 一个所谓的IHierarchicalData接口,否则都是白搭。因为tree是外观,我说菜单也是外观,sp1234说control也是外观。 微软没给统一层级描述接口,那么各家都自己弄。最后是web的treeview有自己的东西,winform的有自己的东西,control还有自己的东西。你自己在搞个你自己的东西? 所以我们依旧不封装,也无法封装。只能用外观,用访问者写临时扩展。这个不值得统一
wanghui0380 2020-10-12
  • 打赏
  • 举报
回复
无需任何多余的思考和封装,因为根本就不需要。你只关心nodes就好,tree不tree那是外观,同时所谓的node都是多余的,因为任何层级其实都是 ienumerable<T> ,我们不关心什么children不children,你只需要和slectmany一样告诉们下一步的ienumerable<T>怎么找就好 所以linq,selectmany本身就是。如果你觉着非要是个“树”,那么自己写个扩展方法写成HierarchicalSelectMany方法也未尝不可 https://www.google.com.hk/search?newwindow=1&safe=strict&source=hp&ei=UKWDX6maNpK5mAX6j4OgCw&q=C%23+linq+hierarchical+selectmany&oq=C%23+linq+hierarchical+selectmany&gs_lcp=CgZwc3ktYWIQAzoCCAA6BAgAEB46BggAEAcQHjoECAAQDToICAAQBxAeEBM6BAgAEBM6BggAEB4QEzoICAAQCBAeEBM6BggAEA0QHjoHCCEQChCgAVCWD1i1emCdfWgBcAB4AIABxgSIAbkzkgEKMi0xOC4yLjAuMpgBAKABAqABAaoBB2d3cy13aXo&sclient=psy-ab&ved=0ahUKEwipgpaK6K3sAhWSHKYKHfrHALQQ4dUDCAc&uact=5 我用google搜索了,这玩意就别相信百度了,博客园那波人还瞧不起这东西,不屑一写。(唯独写了这东西的是sp1234的“重量级查询控件”,这帖子你百度可以找到,我就不废那个力了) 来给我google的老外的扩展方法
public static class Linq
{
    public static IEnumerable<T> Flatten<T>(this T source, Func<T, IEnumerable<T>> selector)
    {
        return selector(source).SelectMany(c => Flatten(c, selector))
                               .Concat(new[] { source });
    }
}
看明白了么,我们不关心啥tree,啥nodes,我们关心的是 hierarchical 层级数据,Flatten 扁平查询
ziqi0716 2020-10-12
  • 打赏
  • 举报
回复
只需要一个TreeNode<T>对象就可以了呀,根节点也是个TreeNode嘛
public class TreeNode<T>
{
  public string Name {get;set;}
  public T Data {get;set}
  public TreeNode<T> LeftChild {get;set}
  public TreeNode<T> RightChild {get;set}
//其他方法和属性
}
enaking 2020-10-11
  • 打赏
  • 举报
回复
自己顶一下。。。。。。。。。。。
将数据结构与C#语言和.NET框架结合是本书的一大特点。本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.........................................................................................................13 本章小结................................................................................................................................20 习题一....................................................................................................................................20 第2章线性表.....................................................................................................................22 2.1 线性表的逻辑结构.........................................................................................................22 2.1.1 线性表的定义.....................................................................................................22 2.1.2 线性表的基本操作.............................................................................................22 2.2 顺序表.............................................................................................................................24 2.2.1 顺序表的定义.....................................................................................................24 2.2.2 顺序表的基本操作实现.....................................................................................29 2.2.3 顺序表应用举例.................................................................................................35 2.3 单链表.............................................................................................................................38 2.3.1 单链表的定义.....................................................................................................39 2.3.2 单链表的基本操作实现.....................................................................................46 2.3.3 单链表应用举例.................................................................................................56 2.4 其他链表.........................................................................................................................61 2.4.1 双向链表.............................................................................................................61 2.4.2循环链表..............................................................................................................64 2.5 C#中的线性表.................................................................................................................64 本章小结................................................................................................................................67 习题二....................................................................................................................................67 第3章栈和队列.................................................................................................................69 3.1 栈....................................................................................................................................69 3.1.1 栈的定义及基本运算.........................................................................................69 3.1.2 栈的存储和运算实现.........................................................................................70 3.1.3 栈的应用举例.....................................................................................................82 3.1.4 C#中的栈.............................................................................................................87 3.2 队列................................................................................................................................87 3.2.1队列的定义及基本运算......................................................................................87 数据结构(C#语言版) 目录 II 3.2.2 队列的存储和运算实现.....................................................................................89 3.2.3 队列的应用举例...............................................................................................103 3.2.4 C# 中的队列.....................................................................................................104 本章小结...............................................................................................................................105 习题三..................................................................................................................................105 第4章串和数组...............................................................................................................106 4.1 串..................................................................................................................................106 4.1.1 串的基本概念...................................................................................................106 4.1.2 串的存储及类定义...........................................................................................106 4.1.3 串的基本操作的实现.......................................................................................111 4.1.4 C#中的串...........................................................................................................115 4.2 数组...............................................................................................................................117 4.2.1 数组的逻辑结构...............................................................................................117 4.2.2 数组的内存映象...............................................................................................118 4.2.3 C#中的数组.......................................................................................................119 本章小结...............................................................................................................................121 习题四..................................................................................................................................121 第5章树和二叉树...........................................................................................................123 5.1 树..................................................................................................................................123 5.1.1 树的定义...........................................................................................................123 5.1.2 树的相关术语...................................................................................................124 5.1.3 树的逻辑表示...................................................................................................125 5.1.4 树的基本操作...................................................................................................126 5.2 二叉树...........................................................................................................................126 5.2.1 二叉树的定义...................................................................................................127 5.2.2 二叉树的性质...................................................................................................128 5.2.3 二叉树的存储结构...........................................................................................129 5.2.4二叉链表存储结构的类实现............................................................................132 5.2.5 二叉树的遍历...................................................................................................137 5.3 树与森林.......................................................................................................................141 5.3.2 树、森林与二叉树的转换...............................................................................144 5.3.3 树和森林的遍历...............................................................................................147 5.4哈夫曼树........................................................................................................................147 5.4.1哈夫曼树的基本概念........................................................................................147 5.4.2哈夫曼树类的实现............................................................................................149 5.4.3哈夫曼编码........................................................................................................153 5.5 应用举例...............................................................................................................154 5.6 C#中的树...............................................................................................................157 本章小结...............................................................................................................................158 习题五..................................................................................................................................159 第6章图...........................................................................................................................161 6.1 图的基本概念................................................................................................................161 6.1.1 图的定义.............................................................................................................161 6.1.2 图的基本术语...................................................................................................161 数据结构(C#语言版) 目录 III 6.1.3 图的基本操作...................................................................................................165 6.2 图的存储结构...............................................................................................................166 6.2.1邻接矩阵............................................................................................................167 6.2.2 邻接表...............................................................................................................172 6.3 图的遍历.......................................................................................................................185 6.3.1 深度优先遍历...................................................................................................185 6.3.2 广度优先遍历...................................................................................................188 6.4 图的应用.......................................................................................................................189 6.4.1 最小生成树.......................................................................................................189 6.4.2 最短路径...........................................................................................................199 6.4.3 拓扑排序...........................................................................................................207 本章小结...............................................................................................................................210 习题六..................................................................................................................................210 第7章排序.......................................................................................................................213 7.1 基本概念.......................................................................................................................213 7.2 简单排序方法...............................................................................................................214 7.2.1 直接插入排序...................................................................................................214 7.2.2 冒泡排序...........................................................................................................216 7.2.3 简单选择排序...................................................................................................217 7.3 快速排序.......................................................................................................................219 7.4 堆排序...........................................................................................................................222 7.5 归并排序.......................................................................................................................230 7.6 基数排序.......................................................................................................................232 7.6.1 多关键码排序...................................................................................................232 7.6.2 链式基数排序...................................................................................................233 7.7 各种排序方法的比较与讨论.......................................................................................235 7.8 C#中排序方法...............................................................................................................235 本章小结...............................................................................................................................236 习题七..................................................................................................................................236 第8章查找.......................................................................................................................238 8.1 基本概念和术语............................................................................................................238 8.2 静态查找表...................................................................................................................238 8.2.1 顺序查找...........................................................................................................238 8.2.2 有序表的折半查找...........................................................................................239 8.2.3 索引查找...........................................................................................................242 8.3 动态查找表...................................................................................................................243 8.4 哈希表...........................................................................................................................252 8.4.1 哈希表的基本概念...........................................................................................252 8.4.2 常用的哈希函数构造方法...............................................................................253 8.4.3 处理冲突的方法...............................................................................................254 8.5 C#中的查找方法...........................................................................................................256 本章小结...............................................................................................................................256 习题八..................................................................................................................................256 参考文献......................................................................................................................................257
将数据结构与C#语言和.NET框架结合是本书的一大特点。本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.........................................................................................................13 本章小结................................................................................................................................20 习题一....................................................................................................................................20 第2章线性表.....................................................................................................................22 2.1 线性表的逻辑结构.........................................................................................................22 2.1.1 线性表的定义.....................................................................................................22 2.1.2 线性表的基本操作.............................................................................................22 2.2 顺序表.............................................................................................................................24 2.2.1 顺序表的定义.....................................................................................................24 2.2.2 顺序表的基本操作实现.....................................................................................29 2.2.3 顺序表应用举例.................................................................................................35 2.3 单链表.............................................................................................................................38 2.3.1 单链表的定义.....................................................................................................39 2.3.2 单链表的基本操作实现.....................................................................................46 2.3.3 单链表应用举例.................................................................................................56 2.4 其他链表.........................................................................................................................61 2.4.1 双向链表.............................................................................................................61 2.4.2循环链表..............................................................................................................64 2.5 C#中的线性表.................................................................................................................64 本章小结................................................................................................................................67 习题二....................................................................................................................................67 第3章栈和队列.................................................................................................................69 3.1 栈....................................................................................................................................69 3.1.1 栈的定义及基本运算.........................................................................................69 3.1.2 栈的存储和运算实现.........................................................................................70 3.1.3 栈的应用举例.....................................................................................................82 3.1.4 C#中的栈.............................................................................................................87 3.2 队列................................................................................................................................87 3.2.1队列的定义及基本运算......................................................................................87 数据结构(C#语言版) 目录 II 3.2.2 队列的存储和运算实现.....................................................................................89 3.2.3 队列的应用举例...............................................................................................103 3.2.4 C# 中的队列.....................................................................................................104 本章小结...............................................................................................................................105 习题三..................................................................................................................................105 第4章串和数组...............................................................................................................106 4.1 串..................................................................................................................................106 4.1.1 串的基本概念...................................................................................................106 4.1.2 串的存储及类定义...........................................................................................106 4.1.3 串的基本操作的实现.......................................................................................111 4.1.4 C#中的串...........................................................................................................115 4.2 数组...............................................................................................................................117 4.2.1 数组的逻辑结构...............................................................................................117 4.2.2 数组的内存映象...............................................................................................118 4.2.3 C#中的数组.......................................................................................................119 本章小结...............................................................................................................................121 习题四..................................................................................................................................121 第5章树和二叉树...........................................................................................................123 5.1 树..................................................................................................................................123 5.1.1 树的定义...........................................................................................................123 5.1.2 树的相关术语...................................................................................................124 5.1.3 树的逻辑表示...................................................................................................125 5.1.4 树的基本操作...................................................................................................126 5.2 二叉树...........................................................................................................................126 5.2.1 二叉树的定义...................................................................................................127 5.2.2 二叉树的性质...................................................................................................128 5.2.3 二叉树的存储结构...........................................................................................129 5.2.4二叉链表存储结构的类实现............................................................................132 5.2.5 二叉树的遍历...................................................................................................137 5.3 树与森林.......................................................................................................................141 5.3.2 树、森林与二叉树的转换...............................................................................144 5.3.3 树和森林的遍历...............................................................................................147 5.4哈夫曼树........................................................................................................................147 5.4.1哈夫曼树的基本概念........................................................................................147 5.4.2哈夫曼树类的实现............................................................................................149 5.4.3哈夫曼编码........................................................................................................153 5.5 应用举例...............................................................................................................154 5.6 C#中的树...............................................................................................................157 本章小结...............................................................................................................................158 习题五..................................................................................................................................159 第6章图...........................................................................................................................161 6.1 图的基本概念................................................................................................................161 6.1.1 图的定义.............................................................................................................161 6.1.2 图的基本术语...................................................................................................161 数据结构(C#语言版) 目录 III 6.1.3 图的基本操作...................................................................................................165 6.2 图的存储结构...............................................................................................................166 6.2.1邻接矩阵............................................................................................................167 6.2.2 邻接表...............................................................................................................172 6.3 图的遍历.......................................................................................................................185 6.3.1 深度优先遍历...................................................................................................185 6.3.2 广度优先遍历...................................................................................................188 6.4 图的应用.......................................................................................................................189 6.4.1 最小生成树.......................................................................................................189 6.4.2 最短路径...........................................................................................................199 6.4.3 拓扑排序...........................................................................................................207 本章小结...............................................................................................................................210 习题六..................................................................................................................................210 第7章排序.......................................................................................................................213 7.1 基本概念.......................................................................................................................213 7.2 简单排序方法...............................................................................................................214 7.2.1 直接插入排序...................................................................................................214 7.2.2 冒泡排序...........................................................................................................216 7.2.3 简单选择排序...................................................................................................217 7.3 快速排序.......................................................................................................................219 7.4 堆排序...........................................................................................................................222 7.5 归并排序.......................................................................................................................230 7.6 基数排序.......................................................................................................................232 7.6.1 多关键码排序...................................................................................................232 7.6.2 链式基数排序...................................................................................................233 7.7 各种排序方法的比较与讨论.......................................................................................235 7.8 C#中排序方法...............................................................................................................235 本章小结...............................................................................................................................236 习题七..................................................................................................................................236 第8章查找.......................................................................................................................238 8.1 基本概念和术语............................................................................................................238 8.2 静态查找表...................................................................................................................238 8.2.1 顺序查找...........................................................................................................238 8.2.2 有序表的折半查找...........................................................................................239 8.2.3 索引查找...........................................................................................................242 8.3 动态查找表...................................................................................................................243 8.4 哈希表...........................................................................................................................252 8.4.1 哈希表的基本概念...........................................................................................252 8.4.2 常用的哈希函数构造方法...............................................................................253 8.4.3 处理冲突的方法...............................................................................................254 8.5 C#中的查找方法...........................................................................................................256 本章小结...............................................................................................................................256 习题八..................................................................................................................................256 参考文献......................................................................................................................................257
将数据结构与C#语言和.NET框架结合是本书的一大特点。本书分为8章,第1章介绍了数据结构和算法的基本概念及本书用到的数学和C#的知识;第2章至第6章分别讨论了线性表、栈和队列、串和数组、树型结构和图结构等常用的数据结构及其应用,以及在.NET框架中相应的数据结构;第7、8两章分别讨论了排序和查找常用的各种方法及其应用以及在.NET框架中相应的算法。 第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.....................

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧