数据结构与算法-C#版
疆~
这个作者很懒,什么都没留下…
展开
-
冒泡排序
用于整数数组的排序class Program { static void Main(string[] args) { int[] array = { 4, 6, 34, 75, 43, 7, 356, 2 }; BubbleSort(array ); for (int i ...原创 2018-11-16 00:01:38 · 210 阅读 · 0 评论 -
最优二叉树-哈夫曼树(Haffman)
最优二叉树,也称为哈夫曼树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。设二叉树具有n个带权值的叶子结点,则从根结点到每一个叶子结点的路径长度与该叶子结点权值的乘积之和称为二叉树路径长度,记做:WPL = W1L1 + W2L2 + ...... + WnLn;其中:n为二叉树中叶子结点的个数;Wk为第k个叶子的权值;Lk为第k个叶子结点的路径长度。根据哈夫曼...原创 2019-03-05 12:37:29 · 4596 阅读 · 0 评论 -
用顺序队列解决队列的编程问题
用顺序队列解决队列的编程问题:队列(Quene)是一种特殊的线性表,是一种只允许在表的一端进行插入操作而在另一端进行删除操作的线性表。把进行插入操作的表尾称为队尾(rear),把进行删除操作的头部称为队头(front)。当队列中没有数据元素时称为空队列。队列操作按照的原则:先进先出,后进后出。判断队列是否为满的操作只在存储结构为顺序结构时才需要,而在链式存储结构中不会对队列的长度有限...原创 2019-02-26 13:08:22 · 875 阅读 · 0 评论 -
解决数组的编程问题
目录特殊矩阵稀疏矩阵用顺序表存储稀疏矩阵的三元组:用十字链表存储稀疏矩阵的三元组:1.数组的定义数组是由n(n>=1)个相同类型的数据元素组成的有限序列,数组中的每一个数据通常为数据元素。数组中的元素可以通过下标随机访问,其中下标的个数由数组的维数决定。2.数组的特点数组中的数据元素数目是确定的。一旦定义了一个数组,其数据元素的数目不再增减。数组中的...原创 2019-03-02 12:44:07 · 1104 阅读 · 0 评论 -
用链队列解决队列的编程问题
用链队列解决队列的编程问题:队列的另外一种存储方式是链式存储,这样的队列称为链队列(Linked Quene)。 链式队列的结点结构: 链队列的结构示意图:初始化队列: front = ...原创 2019-02-27 10:34:15 · 338 阅读 · 0 评论 -
解决二叉树的编程问题
目录(一)二叉树定义(二)二叉树的相关术语(三)二叉树的主要性质二叉树的存储结构1.顺序存储结构2.二叉链式存储结构用链式存储结构表示二叉树(Binary Tree)代码实现:3.三叉链表存储结构二叉树的遍历方法及递归实现注意:如果中序遍历和后序遍历序列相同,则该树只有左子树没有右子树。如果中序遍历和先序遍历序列相同,则该树只有右子树没有左子树。1.先...原创 2019-03-04 14:08:54 · 925 阅读 · 0 评论 -
解决树和森林的编程问题
目录树的2个特点:树的常用相关术语:(一)树的四种表示方法:直观表示法,嵌套集合表示法,凹入表示法,广义表表示法(二)树的5种存储方式,即:多重链表表示法,双亲表示法,孩子链表表示法,双亲孩子表示法,孩子兄弟表示法1.多重链表表示法代码实现:2.双亲表示法3.孩子链表表示法:(查找孩子比较方便,但查找双亲比较困难,故适用于对孩子操作多的应用)4.双亲孩子表示法(...原创 2019-03-07 17:15:07 · 595 阅读 · 0 评论 -
解决图的编程问题(含有:深度优先搜索算法,广度优先搜索算法,Dijkstra最短路径算法)
(一)用邻接矩阵解决图的编程问题 (此代码里面含有Dijkstra最短路径算法,在最后面)using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 用邻接矩阵解决图的编程问题{ c...原创 2019-03-08 22:07:31 · 814 阅读 · 0 评论 -
直接选择排序
直接选择排序: 从待排序的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第1个记录交换位置;然后从不包括第一个位置上的记录序列中选择关键码最小(或最大)的记录并将它与序列中的第2个记录交换位置;如此重复,直到序列中只剩下一个记录为止。 通俗点就是:找到最小的数把它放在第一位,找到第二小的数把它放在第二位,以此类推直到最后一个数。 ...原创 2018-11-16 00:01:58 · 127 阅读 · 0 评论 -
用顺序存储解决串的编程问题
用顺序存储解决串的编程问题:串即字符串,是由0个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。一般记为:s="a1,a2,...,an" (n>=0)n为串的长度,当n=0时,称为空串。串中任意个连续的字符组成的子序列,称为该串的子串(substring),包含子串的串,相应的称为主串,串的第1个字符,在主串中的位置,叫子串的位置。串从数据结构上来说是一种特...原创 2019-03-01 15:17:44 · 415 阅读 · 0 评论 -
用链栈解决堆栈的编程问题
用链栈解决堆栈的编程问题:用链式存储结构存储的栈称为链栈(Linked Stack)。链栈通常用单链表来表示,它的实现是单链表的简化。由于链栈的操作只是在一端进行,为了操作方便,把栈顶设在链表的头部,并且不需要头结点。链栈的结点结构 data next 下面是链栈的结构示意图:代码实现:using System;namespace 用链栈解决堆栈的编程问...原创 2019-02-25 12:39:22 · 364 阅读 · 0 评论 -
用顺序栈解决堆栈的编程问题
用顺序栈解决堆栈的编程问题:堆栈(Stack)是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入,删除操作的一端称为栈顶,最下面的那一端称为栈底。栈的主要特点:先进后出。堆栈是一种特殊的线性表,所以线性表的两种特殊存储结构--顺序存储结构和链式存储结构也同样适用于堆栈。栈顶指示器top设在数组下标为0的端,top随着插入和删除而变化,当栈为空时,...原创 2019-02-25 10:26:45 · 681 阅读 · 0 评论 -
直接插入排序
直接插入排序 class Program { static void Main(string[] args) { int[] array = { 4, 6, 34, 75, 43, 7, 356, 2 }; InsertSort(array); for (int ...原创 2018-11-16 00:02:04 · 138 阅读 · 0 评论 -
希尔排序
希尔排序:class Program { static void Main(string[] args) { int[] array = { 4, 6, 34, 75, 43, 7, 356, 2 }; ShellSort(array); for ...原创 2018-11-16 00:01:42 · 116 阅读 · 0 评论 -
堆排序
堆排序的特点是:在排序过程中,将待排序数组看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中父结点和子结点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。 基本思想 :将待排序数组调整为一个大根堆。大根堆的堆顶元素就是这个堆中最大的元素。重复操作,直到无序区消失为止。 初始时,整个数组为无序区,每一次交换,都是将大根堆的堆顶元素...原创 2018-11-16 00:01:47 · 178 阅读 · 0 评论 -
快速排序算法
class Program { static void Main(string[] args) { int[] array = new int[] { 1, 24, 6, 7, 3, 78 }; Console.Write("快速排序:"); Sort.QuickSort(...原创 2018-11-16 00:01:52 · 188 阅读 · 0 评论 -
A*寻路算法-C#版
从起点 A 开始, 把它作为待处理的方格存入一个"开启列表", 开启列表就是一个等待检查方格的列表. 寻找起点 A 周围可以到达的方格, 将它们放入"开启列表", 并设置它们的"父方格"为 A. 从"开启列表"中删除起点 A, 并将起点 A 加入"关闭列表", "关闭列表"中存放的都是不需要再次检查的方格 图中浅绿色描边的方块表示已经加入 "开启列表" 等原创 2018-11-16 00:02:12 · 2110 阅读 · 1 评论 -
用顺序表解决线性表的编程问题
用顺序表解决线性表的编程问题 :数据结构在计算机中的表示称为存储结构。存储结构有顺序存储结构和链式存储结构。这里讨论顺序存储结构顺序表的存储结构可用C#中的一维数组来表示。数组的元素类型使用泛型,以实现不同数据类型的线性表间代码的重用;因为用数组存储顺序表,需预先为顺序表分配最大存储空间,用字段maxsize表示顺序表的最大长度;由于经常需要在顺序表中插入或删除数据元素,顺序表的实际表长是...原创 2019-02-23 19:58:19 · 520 阅读 · 0 评论 -
用单链表解决线性表的编程问题
用单链表解决线性表的编程问题 :链表分为单链表,双链表,循环列表等多种类型。在存储数据元素时,除了存储数据元素本身的信息外,还要存储与它相邻的数据元素的存储地址信息。这两部分信息组成该数据元素的存储映像,成为结点(Node)。把存储数据元素本身信息的域成为节点的数据域,把存储与它相邻数据元素的存储地址信息的域称为结点的引用域。如果结点的引用域只存储该结点直接后继结点的存储地址,则该链表...原创 2019-02-24 11:55:23 · 230 阅读 · 0 评论 -
用双向链表解决线性表的编程问题
用双向链表解决线性表的编程问题:双向链表:在结点中设连个引用域,一个保存直接前驱节点的地址,叫prev,一个直接后继结点的地址,叫next。双向链表相对单向链表只是多了一个字段prev。 代码实现:using System;namespace 用双向链表解决线性表的编程问题{ class Program { static void Main(...原创 2019-02-24 14:32:13 · 291 阅读 · 0 评论 -
数据结构与算法面试题
1,冒泡排序class Program { static void Main(string[] args) { int[] array = { 4, 6, 34, 75, 43, 7, 356, 2 }; BubbleSort(array ); for (int i = 0; ...原创 2019-06-24 20:37:18 · 1223 阅读 · 0 评论