![](https://img-blog.csdnimg.cn/20210209230035635.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
大话数据结构
文章平均质量分 63
开始学习数据结构,从抄书开始吧
不大好吧
love & peace
展开
-
二叉树的建立
将二叉树中每个结点的空指针引出一个虚结点,其值为一特定值,比如”#“。这种处理后的二叉树称为原二叉树的扩展二叉树。前序遍历序列建立二叉树:void CreateBiTree(BiTree *T){ TElemType ch; scanf("%c",&ch); if(ch=="#") *T=NULL; else{ *T=(BiTree)malloc(sizeof(BiTNode)); if(!*T) exit(OVERFLOW) /*没有空间,溢出*/; (*T)原创 2022-02-05 15:02:27 · 542 阅读 · 0 评论 -
【查找算法(一)】有序表查找
二分查找前提是线性表中的记录必须关键码有序,线性表必须采取顺序存储。基本思想:在有序表中,取中间记录为比较对象,若给定值与中间记录的关键字相等,则查找成功;若小于,则在中间记录的左半区继续查找;若大于,则在右半区继续查找。不断重复上述过程,直到查找成功,或所查区域无记录,查找失败为止。时间复杂度:O(logn)示例代码:int Binary_Search(int *a,int n,int key){ int low,high,mid; /*首位用作哨兵*/ low=1; high=n;原创 2022-02-05 13:47:51 · 1064 阅读 · 0 评论 -
【排序算法(二)】希尔排序
希尔排序将待排序的记录分割成子序列,整体序列是基本有序的,再在这些子序列中进行直接插入排序。所谓基本有序,就是小的关键字基本在前面,大的基本在后面。如何将记录分割成子序列:跳跃分割的策略。将相距某个增量的记录组成一个子序列。希尔排序是基于直接插入排序的以下两点性质而提出的改进方法:1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。2.插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。希尔排序是将待排序的数组元素 按下标的一定增量分组,分成多个子序列原创 2022-02-03 22:04:30 · 744 阅读 · 0 评论 -
【排序算法(一)】各种排序算法的主要方式和复杂度分析
概念1,排序:按关键字有序的序列2,稳定性:假设ki=kj(1<=i,j<=n,i≠j),且在排序前ri领先于rj(即i<j),如果排序后ri依然领先于rj,则称所用的排序方法是稳定的,否则就是不稳定的。3,内排序:排序过程中,将待排的所有记录全部放在内存中。性能指标:①时间性能:关键字比较次数和记录移动次数(都尽可能少)②辅助空间③算法的复杂度:算法本身的复杂度(?)4,外排序:由于记录的个数太多,不能同时放置在内存中,整个排序需要在内外存之间多次进行数据交换才能实现。原创 2022-02-03 00:04:52 · 940 阅读 · 0 评论 -
遍历二叉树
二叉树遍历traversing binary tree原理二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树遍历方法1,前序遍历若二叉树为空.,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子2,中序遍历若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。3,后序遍历若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树原创 2021-02-10 23:07:07 · 103 阅读 · 0 评论 -
二叉树
二叉树Binary Tree的定义二叉树Binary Tree是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成。对于在某个阶段都是两种结果的情形,比如开和关、0和1、真和假、上和下、对与错、正面与反面等,都适合用二叉树来建模。二叉树的特点:每个结点最多有两棵子树,所以二叉树中不存在度大于2 的结点左子树和右子树都是有顺序的,次序不能颠倒即使树中某结点只有一棵子树,也要区分它是左子树还是右子树二叉树具原创 2021-01-28 16:48:55 · 212 阅读 · 0 评论 -
树
树Tree的定义1,树是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根 Root的结点当n>1时,其余结点可分为m(m>0)个互不相交的有限集合 T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树SubTree。说明:n>0时根结点是唯一的,不可能存在多个根结点m>0时,子树的个数没有限制,但他们一定是互不相交的。如下图所示的,就不符合树的定义,因为它们都有相交的子树2,结点分类...原创 2021-01-26 14:45:48 · 131 阅读 · 0 评论 -
串
串string的定义1,串是由零个或多个字符组成的有限序列,又名字符串。串中的字符数目n称为串的长度,零个字符的串称为空串(null string)。2,空格串:只包含空格的串。注意其和空串的区别:空格串是有内容有长度的,而且可以不止一个空格3,子串和主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串。子串在主串中的位置就是子串的第一个字符在主串中的序号。串的比较串的比较是通过组成串的字符的编码来进行的,而字符的编码指的是字符在对应字符集中的符号。ASCII原创 2021-01-25 16:09:05 · 114 阅读 · 0 评论 -
队列
队列queue 的定义1,只允许在一端进行插入操作,而在另一端进行删除操作的线性表。2,先进先出 FIFO,允许插入的一端称为队尾,允许删除的一端称为队头。抽象数据类型ADT 队列(Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系。Operation InitQueue (*Q):初始化操作,建立一个空队列Q。 DestroyQueue (*Q): 若队列Q存在,则销毁它。 ClearQueue (*Q): 将队列Q清空。 QueueEmpty (Q原创 2021-01-21 17:34:40 · 136 阅读 · 0 评论 -
栈
栈 stack的定义1,栈是限定仅在表尾进行插入和删除操作的线性表2,允许插入和删除的一端称为栈顶 top,另一端称为栈底 bottom,不含任何数据元素的栈称为空栈。 栈又称为 后进先出 LIFO 的线性表。注意:栈是一种特殊的线性表3,插入操作,叫做进栈,也叫压栈,入栈;删除操作,叫做出栈,也叫弹栈。4,进栈出栈的变化形式最重要的是保证是栈顶元素出栈就行,而不是对元素进行的时间进行限制。栈的抽象数据类型ADT 栈( stack )Data 同线性表。元素具有相同的类型,相邻元素具有前原创 2021-01-20 17:47:43 · 188 阅读 · 0 评论 -
双向链表
结构1,/*线性表的双向链表存储结构*/typedef struct DulNode{ ElemType data; struct DulNode *prior; struct DulNode *next;} DulNode, *DuLinkList;2,图解循环 + 头结点 空链表非空循环 + 带头结点 双向链表3,某一个结点,它的后继的前驱,前驱的后继,都是自己p->next->prior = p = p->prior->next;...原创 2021-01-20 10:15:39 · 65 阅读 · 0 评论 -
循环链表
一,定义将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。循环链表可以从任意一个结点出发,访问到链表的全部结点。图解(第一张为空表):二,指向终端结点的尾指针用指向终端结点的尾指针来表示循环列表,查找开始结点和终端结点都很方便。若终端结点用尾指针rear指示,则查找终端结点是O(1),而开始结点,其实就是rear->next->next,其时间复杂度也是O(1)。三,合并两个循环列表p = re原创 2021-01-15 16:31:55 · 260 阅读 · 0 评论 -
静态链表
静态链表1,定义用数组描述的链表叫做静态链表 ,也叫游标实现法/*线性表的静态链表存储结构*/#define MAXSIZE 1000typedef struct{ ElemType data; //游标为0时表示无指向 int cur;}Component,StaticLinkList[MAXSIZE];说明:数组的第一个和最后一个元素作为特殊元素处理。不存数据。数组的第一个元素,即下标为0的元素的cur存放备用链表的第一个结点的下标;数组的最后一个元素的cur则存放第一个有数值的原创 2021-01-15 15:09:25 · 224 阅读 · 0 评论 -
单链表
一,链式存储结构的一些基本概念在链式结构中,除了要存数据元素之外,还要存储它的后继元素的存储地址。为了表示每个数据元素ai与其后继数据元素ai+1之间的逻辑关系,对于ai来说,除了存储其本身的信息之外,还需要存储一个指示其直接后继的信息。存储数据元素信息的域叫数据域,存储直接后继位置的域叫指针域,指针域中存储的信息称做指针或链接,这两部分信息组成数据元素ai的存储映像,称为结点(Node)。n个结点链接成一个链表,即为线性表的链式存储结构。因为此链表的每个结点中只包含一个指针域,所以叫做单链表。链表原创 2021-01-15 10:47:53 · 515 阅读 · 1 评论 -
线性表的顺序存储结构
一,什么是线性表零个或多个数据元素的有限序列说明:它是一个序列,即,元素之间是有顺序的。(第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继)线性表强调有限。二,数学语言定义三,线性表的抽象数据类型(ADT)ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,.....,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素;除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素原创 2021-01-13 17:00:32 · 5991 阅读 · 0 评论 -
算法
1,数据结构与算法关系总之密不可分2,算法定义算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。3,算法的特性输入输出零个或多个输入,至少一个或多个输出。有穷性算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。确定性算法的每一步骤都具有确定的含义,不会出现二义性。可行性算法的每一步都可行,即,每一步都能够通过执行有限次数完成。4,算法设计的要求正确性算法至少应该具有输入、输出和加工处理无歧义原创 2020-12-24 09:38:01 · 228 阅读 · 0 评论 -
绪论
《大话数据结构》第一章 绪论:数据结构的一些概念原创 2020-12-23 15:28:56 · 67 阅读 · 0 评论