数据结构学习笔记
Roy Summy
这个作者很懒,什么都没留下…
展开
-
C# 实现二叉排序树
目录二叉排序树介绍创建思路删除节点思路情况一:删除的节点是叶子节点情况二:删除的节点有一个子节点情况三:删除的节点有两个子节点完整代码二叉排序树介绍BST(Binary Sort Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大[注] 如果有相同的值,可以将该节点放在左子节点或右子节点(根据创建算法不同自行决定)创建思路class Node{ void Add(待添加节点 node) { 如果node为空,直接返回原创 2020-11-06 23:26:52 · 558 阅读 · 0 评论 -
二叉树的应用 堆排序, 赫夫曼树
目录堆排序介绍堆排序的基本思想构造初始堆赫夫曼树基本介绍几个概念堆排序介绍堆排序是利用堆这种数据结构而设计的排序算法,堆排序是一种选择排序,最坏、最好、平均时间复杂度均为O(nlogn)堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆。不要求节点左右孩子的大小关系。每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。以大顶堆为例,按层序进行编号,映射到数组中可以得到 arr[i] >= arr[2i+1] arr[i] >= arr[2i原创 2020-11-04 20:14:09 · 216 阅读 · 0 评论 -
二叉树,顺序存储二叉树,线索二叉树
目录二叉树介绍遍历结点代码前序遍历中序遍历后序遍历查找前序中序后序删除代码顺序存储二叉树介绍代码线索化二叉树介绍代码补充全部代码二叉树顺序存储二叉树线索二叉树二叉树介绍每个节点最多只能有两个子节点子节点分为左子节点和右子节点遍历[注]:可以把打印当前节点信息的位置当作一种方法来记忆, 例如先打印当前节点信息然后遍历左右子节点即为前序遍历结点代码class Node{ public int ID { get; set; } public string Name { get原创 2020-10-19 20:56:14 · 227 阅读 · 0 评论 -
C#实现哈希表
哈希表介绍散列表(Hash Table,也叫哈希表),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问记录,从而加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。实际需求有一个公司,当有新的员工报到时,要求将该员工的信息加入(ID,姓名…),当输入该员工的 ID 时,要求查找到该员工的所有信息。代码using System;namespace HashTableDemo{ class Program原创 2020-10-01 14:17:04 · 1241 阅读 · 0 评论 -
查找算法(二分查找,插值查找,斐波那契查找)
目录二分查找思路代码插值查找思路代码斐波那契查找(黄金分割法查找)思路代码二分查找思路首先确定该数组中间的下标。 mid = (left + right) / 2然后让需要查找的数 findVal 和 arr[mid] 进行比较,如果findVal > arr[mid],说明要查找的数在mid的右边,递归向右;如果findVal < arr[mid],说明要查找的数在mid的左边,递归向左;如果findVal == arr[mid],返回下标。结束条件 left > ri原创 2020-09-29 20:45:15 · 153 阅读 · 0 评论 -
排序算法2(快速排序,归并排序,基数排序)
排序算法2目录排序算法2归并排序主要思想代码快速排序主要思想代码基数排序主要思想代码所有代码归并排序主要思想利用分治策略将数组切分至只剩一个元素,再按顺序合并到辅助数组中,最后将数据复制到待排序的数组即可。代码static void MergeSort(int[] arr, int left, int right, int[] temp){ if (left < right) { int mid = (left + right) / 2; //中间索引原创 2020-09-22 20:16:06 · 149 阅读 · 0 评论 -
排序算法1(冒泡排序、选择排序、插入排序、希尔排序)
排序算法1目录排序算法1冒泡排序主要思想代码优化代码选择排序主要思想代码插入排序主要思想代码希尔排序主要思想代码使用希尔排序对冒泡进行优化代码冒泡排序主要思想对排序序列从前向后,依次比较相邻元素的值,如果逆序则交换。代码static void BubbleSort(int[] arr){ for (int i = 0; i < arr.Length - 1; i++) { for (int j = 0; j < arr.Length - i - 1;原创 2020-09-12 22:47:57 · 160 阅读 · 0 评论 -
C#递归使用及八皇后问题
递归简单使用(寻找路径)题目描述如图所示的地图,有颜色的区域代表有墙体,无法通过,现需要从a点到达b点,通过递归来查找可行路径代码using System;namespace MazeExample{ class Program { static void Main(string[] args) { //创建一个二维数组模拟迷宫 int[,] map = new int[8, 7];原创 2020-09-10 23:15:30 · 419 阅读 · 0 评论 -
C#实现中缀表达式转后缀表达式以及运算
思路中缀表达式转后缀表达式初始化两个栈,运算符栈s1和储存中间结果的栈s2从左到右扫描中缀表达式遇到数字则压入s2中遇到运算符{– 1.如果s1为空,或栈顶运算符为左括号,则直接将此运算符压入s1– 2.若优先级比栈顶运算符高,也压入s1– 3.否则,将栈顶的运算符弹出并压入s2中,再次转到 4.1 与s1中新的栈顶运算符比较}遇到括号{–1. 如果是左括号,则直接压入s1–2. 如果是右括号,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将这一对括号丢弃}原创 2020-09-10 23:00:08 · 1069 阅读 · 0 评论 -
c# 实现栈
栈目录栈简要介绍图解内部成员成员代码构造器IsFullIsEmptyPush(int value)Pop()Peek()完整代码补充(链表实现栈)尾插法单链表实现栈头插法单链表实现栈简要介绍栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端称为栈顶。另一端为固定的一端,称作栈底。遵循先入后出(FILO)的原则图解内部成员[注]本例使用数组存储数据,链表实现栈代码在最后修饰符变量名含义private inttop指原创 2020-09-09 16:12:27 · 1506 阅读 · 0 评论 -
C# 实现双向链表
双向链表目录双向链表节点代码代码框架思路遍历直接添加到链表末尾依据编号顺序添加修改删除节点代码 class Node { public int ID { get; set; } public string Name { get; set; } public string NickName { get; set; } public Node Next { get; set; } public Node Pre原创 2020-09-08 18:59:42 · 1370 阅读 · 0 评论 -
C#实现单向环形链表及约瑟夫问题
环形链表目录环形链表节点代码实现思路代码约瑟夫(Josephu)问题题目描述思路代码节点代码 class Node { public int ID { get; set; } public Node Next { get; set; } public Node(int iniID) { this.ID = iniID; } }实现思路在类体中创建一个 first 节点,原创 2020-09-08 18:25:49 · 535 阅读 · 0 评论 -
c# 实现单链表
单链表(Linked List)原创 2020-09-07 18:46:41 · 565 阅读 · 0 评论 -
c#实现稀疏数组(SparseArray)
稀疏数组基本原理当一个数组中大部分元素是一个相同元素时,可以使用稀疏数组来保存该数组,从而减少空间占用。处理方法1、记录数组一共有几行几列,有多少个不同的值2、把具有不同值的元素的行数、列数以及值记录在一个小规模的数组中,从而缩小程序规模样例在稀疏数组中,第0行的三个数分别代表原始数组的总行数、总列数以及有效值的个数,其余行的数据分别代表有效值所在的行、列以及值。代码转换至稀疏数组static int[,] CompressArray(int[,] originalArr){原创 2020-09-03 23:11:40 · 738 阅读 · 0 评论 -
C#实现队列及环形队列(数组)
队列(Queue)介绍队列是一种有序列表,只允许对队尾(rear)进行删除操作,对队首(front)进行删除操作,即先入先出(FIFO)。实现队列需要的内部元素元素含义maxSize代表能够存储的数据的个数front指向队首rear指向队尾array[]用于存储数据void Enqueue(int n)将元素n入队int Dequeue()将队尾元素出队,同时元素个数-1int Peek()返回队尾元素,元素个数不变bool原创 2020-09-04 23:16:30 · 2911 阅读 · 0 评论