![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
大话数据结构学习笔记
大话数据结构学习笔记大话数据结构学习笔记大话数据结构学习笔记
码农小飞飞
在手游开发的路上越走越远!
展开
-
大话数据结构 第9章 排序 直接插入排序
想想扑克斗地主,整理顺子的时候。直接插入排序(Straight insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1d原创 2021-06-04 16:15:04 · 150 阅读 · 0 评论 -
大话数据结构 第9章 排序 简单选择排序
简单选择排序算法: 简单选择排序法(Simple Selection Sort)就是通过 n-i 次关键字间的比较,从 n-i+1 个记录中选择出关键字最小的原创 2021-06-04 10:57:31 · 144 阅读 · 0 评论 -
大话数据结构 第9章 排序 冒泡排序
冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。冒泡排序初级版:原创 2021-06-03 11:10:53 · 279 阅读 · 0 评论 -
大话数据结构 第9章 排序 简介
假设含有 n 个记录的序列为 ,需确定 1,2......,n 的一种排序 ,使其相应的关键字满足 非递减(或非递增)关系,即使得序列成为一个按关键字有序的序列 ,这样的操作就称为排序。 我们再排序问题中,通常将数据元素称为记录。显然我们输入的是一个记录集合,输出的也是一个记录集合,所以说,可以将排序看成是线性表的一种操作。 排序的依据是关键字的大小关系,那么,对同一个记录集合,针对不同的关键字进行排序,可以得到不同序列。 主关键字,次关键字,甚至是若干数据...原创 2021-06-02 14:39:49 · 110 阅读 · 0 评论 -
大话数据结构 第八章 查找 有序表查找 插值查找
前面说了折半查找,那为什么是折半而不是四分之一或者别的呢?折半查找的代码中 mid 的赋值经过变换得到:也就是mid 等于最低下标low 加上最高下标 hign 与 low 的差的一半。算法科学家就是考虑将这个进行改进,改进为下面的计算方案:将改成了...原创 2020-11-23 10:52:02 · 105 阅读 · 0 评论 -
大话数据结构 第八章 查找 有序表查找 折半查找
折半查找(Binary Search)技术,又称为二分查找。它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储。折半查找的基本思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,知道查找成功,或所有查找区域无记录,查找失败为止。时间复杂度分析:我们将这个数组的查找过程绘制成一棵二叉树。从图上原创 2020-11-20 16:10:04 · 756 阅读 · 1 评论 -
大话数据结构 第八章 查找 顺序表查找
顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或第一个)记录,其关键字和给定值比较都不相等时,则表中没有所查的记录,查找不成功。顺序表查找算法:很简单,在数组中查找有没有关键字(key),当你需要查找复杂表结构的记录时,只需要把数组与关键字定义成你需要的表结构和数据类型即可。时间复杂度是O(n),原创 2020-11-17 20:14:25 · 134 阅读 · 0 评论 -
大话数据结构 第八章 查找 概述
我们需要在一些数据中查找我们需要的数据,所有这些需要别查的数据所在的集合,我们给他一个统称叫查找表。查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key)。对于那些可以识别多个数据元素(或记录)的关键字,我们称为次关键字(Second Key)。查找(Searching)就是根据给定的某个值,在查找表中确定原创 2020-11-17 16:48:40 · 125 阅读 · 0 评论 -
大话数据结构 第六章 树 遍历二叉树
二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序一次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树遍历方法1.前序遍历规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。2.中序遍历规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后访问根节点,最后中序遍历右子树。3.后续遍历规则是若树为空,则空操作返回,否则从左到右先叶子后结点的原创 2020-11-13 18:57:58 · 152 阅读 · 0 评论 -
大话数据结构 第六章 树 二叉树的定义
二叉树(Binary Tree) 是 n () 个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一颗子树都是可以的。 左子树和右子树是有序列的,次序不能任意颠倒。 即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。二叉树具有五种基本形态:空二叉树。 只有一个根节点。 根节点只有左原创 2020-11-13 15:29:09 · 283 阅读 · 0 评论 -
大话数据结构 第六章 树 Tree 简介
树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。树的定义其实就是我们在讲解栈时提到的递归的方法。也就是在树的定义中还用到了树的概念。对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点。2.m>0时,子树的个数没有限制,但它们一原创 2020-11-09 18:44:06 · 137 阅读 · 0 评论 -
大话数据结构 第五章 串(附C#实现)
串的定义:串(string)是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s= ""(n>=0),s 是串的名称,用双引号括起来的字符序列是串的值,引号不属于串的内容。(1<= i <= n) 可以是字母、数字或其他字符,i 就是该字符在串中的位置。(C#中 i 是0至n-1)。串中的字符数目 n 称为串的长度,定义中说道的“有限”是指长度 n 是一个有限的数值。零个字符的串称为空串,它的长度为零,可以用两个双引号""表示。所谓的序列,就说明串的相邻...原创 2020-08-24 14:36:25 · 225 阅读 · 0 评论 -
大话数据结构 第四章 栈与队列 队列
队列的定义:队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队列的顺序存储假设我们一个队列有n个元素,则顺序存储结构的队列需要建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端是队头。入队操作就是在队尾追加一个元素,不需要移动任何元素,时间复杂度为O(1)。出列是在队头,即下标为0的位置,所有元素都得向原创 2020-08-11 16:25:07 · 151 阅读 · 0 评论 -
大话数据结构 第四章 栈与队列 栈 栈的应用---递归
我们先看一个经典的斐波那契数列(Fibnacci)。应用题:兔子出生两个月就可以生兔子,每对兔子每月生一队兔子,假设兔子不死,一年后共多少对兔子?月 1 2 3 4 5 6 7 8 9 10 11 12 兔子对数 1 1 2 3 5 8 13 21 34 55 89 144 数学函数定义就是:我们先用常规的迭代实现前几位的斐波那契数列。原创 2020-08-10 15:43:32 · 207 阅读 · 0 评论 -
大话数据结构 第四章 栈与队列 栈 栈的链式存储结构及其实现
栈的链式存储结构,简称为链栈。 public class StackNode<T> { public T data; public StackNode<T> next; public StackNode() { data = default(T); } } public class LinkStack<T> { p原创 2020-08-10 14:27:51 · 122 阅读 · 0 评论 -
大话数据结构 第三章 栈与队列 栈 顺序存储结构(附C#栈实现)
栈的定义:栈(stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈底是固定的,最先进栈的只能在栈底。栈的插入操作,叫做进栈,也称压栈、入栈。类似子弹入弹夹。栈的删除操作,叫做出栈,也有的叫作弹栈。进栈出栈变化形式问,最先进栈的元素,是不是只能最后出栈?答案是不一定,要看具体情况。举例:原创 2020-08-07 17:19:14 · 171 阅读 · 0 评论 -
大话数据结构 第三章 线性表 静态链表 (附C#静态链表实现)
用数组描述的链表叫做静态链表。还有叫法是游标实现法。为了方便使用,我们可以把数组建立的大一些。另外我们对数组的第一个和最后一个元素作为特殊元素处理,不存数据。我们通常把未使用的数组元素称为备用链表。而数组第一个元素,即下标为 0 的元素的 cur 就存放备用链表的第一个结点的下标;而数组的最后一个元素的 cur 则存放第一个有数值的元素的下标,相当于单链表中的头结点的作用。 public class Node<T> { public T data;//原创 2020-08-07 11:26:46 · 136 阅读 · 0 评论 -
大话数据结构 第三章 线性表 线性表的链式存储结构(附C#单链表实现)
线性表的顺序存储结构,最大的缺点就是插入和删除时需要移动大量元素。线性表链式存储结构定义为了表示每个数据元素与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称做指针或链。这两部分信息组成数据元素的存储映像,称为结点(Node)。n个结点(的存储映像)链结成一个链表,即为线性表(,,...,)的链式存储结...原创 2020-08-06 15:47:12 · 252 阅读 · 0 评论 -
大话数据结构 第三章 线性表 简介
线性表的定义线性表(List):零个或多个数据元素的有限序列。①首先它是一个序列。元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。②线性表强调是有限的。若将线性表记为(,...,,,,...,),则表中领先于,领先于,称是的直接前驱元素,是的直接后继元素。当 i = 1,2,...,n-1时,有且仅有一个直接后继,当 i = 2,3,...,n时,有且仅有一个直接前驱。线性表元素的个数 n...原创 2020-08-05 15:33:19 · 159 阅读 · 0 评论 -
大话数据结构 第二章 算法 简介
算法定义算法定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法的特性1.输入和输出算法具有零个或多个输入。算法至少有一个或多个输出。2.有穷性有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。3.确定性确定性:算法的每一步骤都具有确定的含义,不会出现二义性。4.可行性可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。算法设计的.原创 2020-07-31 17:46:52 · 470 阅读 · 0 评论 -
大话数据结构 第一章 简介
基本观念和术语数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位。数据对象:是性质相同的数据元素的集合,是数据的子集。数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。逻辑结构与物理结构逻辑结构:是指数据对象数据之间的相互关系。1.集合结构集合结构:.原创 2020-07-31 15:36:20 · 136 阅读 · 0 评论