数据结构---C语言
文章平均质量分 84
初识数据结构
float_com
程序员小菜鸟一枚
展开
-
【平衡二叉树的平衡调整-----------理论】
根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是以下三种情况-1:结点左子树的高度小于结点右子树的高度0:结点左子树的高度等于结点右子树的高度1:结点左子树的高度大于结点右子树的高度。原创 2024-10-15 17:30:03 · 1226 阅读 · 2 评论 -
【树表的相关查找算法】-----二叉排序树
返回值:查找成功返回指向该结点的指针,否则返回NULL参数:T是二叉排序树的指向根结点的指针,key是要查找的关键字参数:参数:T 是指向二叉排序树的根结点指针的 二级指针注意递归调用时,使用(*T)的地址 即&(*T)(1)递归终止条件:如果当前树节点为空 (*T 为 NULL),则返回 false,表示没有找到待删除的关键字或树本身为空。(2)(2.1)如果待删除的关键字 key 大于当前节点的关键字,则递归到当前节点的右子树进行删除。原创 2024-10-08 09:36:44 · 94 阅读 · 2 评论 -
【查找算法概念】与【线性表的相关查找算法】
以查找21成功为实例:中点值大于key,缩短上半区间中间值小于key,缩短下半区间找到key值以非递减有序排列。原创 2024-10-07 17:46:09 · 1157 阅读 · 0 评论 -
【二叉树遍历算法应用】------补录
但要复制成的新树,应传入结点指针的地址,即二级指针,因为要修改结点指针的值(指向新开辟的结点空间):原本存在的树只是会遍历,不会被修改,故传入一级指针。:只进行遍历,不会修改树的结构,故传入一级指针。原创 2024-09-14 15:08:24 · 904 阅读 · 0 评论 -
【遍历二叉树】---先,中,后,层序遍历 及 先序建立整树
int10。原创 2024-09-13 22:50:36 · 1314 阅读 · 3 评论 -
【二叉树的性质与存储结构】
(2)通过存储表中的序号进行元素填入,得到对应的二叉树。(深度为k,每一层上至少有1个结点,总共k个结点)(如果1个结点都没有,就不可能有这么多层了)(1)先画出对应深度的满二叉树,并标号。结点按层序编号(从第。原创 2024-09-11 19:49:17 · 1112 阅读 · 0 评论 -
【树和二叉树的相关定义】概念
(1)二叉树的结构最简单,规律性最强;(2)可以证明,所有树都能转为唯一对应的二又树,不失一般性。(3)普通树(多又树)若不转化为二叉树,则运算很难实现二叉树在树结构的应用中起着非常重要的作用,因为对二又的许多操作算法简单,而任何树都可以与二叉树相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。每个结点最多有俩孩子(二叉树中不存在度大于2 的结点)子树有左右之分,其次序不能颠倒。二叉树可以是空集合,根可以有空的左子树或空的右子树。原创 2024-09-10 22:21:33 · 554 阅读 · 0 评论 -
【数组与广义表】(基本概念与思路)
COL每一列间的前驱后继关系:如a00** 在列上的后继为a10ROW每一行间的前驱后继关系:如a00在行上的后继为a01。原创 2024-09-10 19:41:14 · 712 阅读 · 0 评论 -
串的模式匹配算法
确定中所含第一次出现的位置(原创 2024-09-09 15:03:14 · 1098 阅读 · 0 评论 -
【串】比较常见的操作-------静态数组实现
用sub返回串s的第pos个字符起长度为len的子串。:传入空串Sub的指针,因为要在函数中往其中添加元素。原创 2024-09-07 10:57:57 · 299 阅读 · 0 评论 -
【串的相关概念】
注意这里的字符是任意字符:包括特殊字符和空格1.这里注意:index:即字符串的定位操作十分重要(若主串S存在与串T值相同的子串,则返回它在主串S中第一次出现的位置。原创 2024-09-05 20:07:32 · 1110 阅读 · 0 评论 -
【链式队列的实现】
一个完整的链式队列包含头指针,尾指针,头结点,一般结点这四个部分//<1>队列结点结构定义//队结点数据域,用来存储队列元素//队结点指针域,用来指向下一个队结点//QNode: 链队列结点类型,用来定义队结点//QNodePtr: 链队列结点指针类型,用来定义队结点指针//<2>队列链式定义//定义链队的头指针,尾指针}LinkQueue;//LinkQueue:通过LinkQueue定义链队列;通过 定义出的链队列 访问队列的头指针,尾指针。原创 2024-08-31 15:53:30 · 922 阅读 · 0 评论 -
【循环顺序队的实现】
先进先出的线性表在顺序队列中,我们使用头指针front指向队首元素;用尾指针rear指向队尾元素的下一个位置(当然这里的指针是用下标模拟出来的同时顺序队列中的元素当然是用数组来存储的抽象数据类型如下注意这里的传参,本篇使用指针传参,与图中c++的引用有所区别。原创 2024-08-29 18:29:55 · 1102 阅读 · 0 评论 -
【栈与递归】-------简单了解
若一个对象部分地包含它自己或用它自己给自己定义,则称这个对象是递归的例如:链表的结构树的结构等等若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。递归求n的阶乘1.能将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同不同的仅是处理的对象,且这些处理对象是变化有规律的2.可以通过上述转化而使问题简化3.必须有一个明确的递归出口,或称递归的边界。原创 2024-08-26 21:16:38 · 456 阅读 · 0 评论 -
【栈经典问题剖析】上
【代码】【栈经典问题剖析】上。原创 2024-09-01 19:46:38 · 293 阅读 · 0 评论 -
【两栈共享空间】------一种特殊的顺序栈
虽然顺序栈的存储已经十分方便,但是它有一个非常致命的缺陷:即必须事先确定数组存储空间的大小,万一不够用就需要动态扩容但对于两个相同类型的栈,我们可以做到最大限度的利用其事先开辟的存储空间,既让两栈共享空间两个栈共享同一个存储空间,这片空间不单独属于任何一个栈,某个栈需要的多一点,它就可能得到更多的存储空间包括了一号栈 与 二号栈的栈顶指针,以及容纳两个栈中元素的数组//1.共享栈的结构定义int top1;//栈1的栈顶指针(从数组的0开始)int top2;原创 2024-08-26 19:23:49 · 1058 阅读 · 0 评论 -
【链栈的实现】--------本质为不带头结点的 头插法建立起来的单链表;头指针即栈顶指针
/1.链栈的结构定义://实际上就是运算受限的单链表,只能在链表头部进行操作//StackNode:用来定义单个链栈的结点//*LinkStack:用来定义整个链栈(即链栈的头指针或者栈顶指针)在结构定义中,一个链栈结点里包含了,指针域,和存放栈元素数据域这两个部分而别名StackNode用来定义单个链栈结点LinkStack 用来定义链栈的头指针(栈顶指针)原创 2024-08-26 14:56:00 · 1590 阅读 · 0 评论 -
【顺序栈的实现2】--------用int类型的top模拟栈顶指针;且top指向栈顶元素
/1.顺序栈的结构(这里使用角标来模拟栈顶指针)//静态数组存放栈中元素,且栈中元素的个数不超过MAXSIZEint top;//角标模拟栈顶指针}SqStack;在结构定义中,一个顺序栈里包含了,栈顶指针,和存放栈元素的静态数组这两个部分而别名SqStack用来定义顺序栈SqStack* 用来表示指向栈的指针。原创 2024-08-21 17:41:56 · 987 阅读 · 0 评论 -
【顺序栈的实现1】--------含栈顶,栈底指针;栈顶指针指向栈顶元素的下一个位置
。原创 2024-08-20 19:17:49 · 1939 阅读 · 0 评论 -
栈与队列【特殊的线性表】概念
栈(stack)是一个特殊的线性表,是限定仅在一端(通常是表尾)进行插入和删除操作的线性表。又称为后进先出(LastIn First Out)的线性表,简称LIFO结构。队列(queue)是一种先进先出(First In First Out ----FIFO)的线性表。在表一端插入(表尾),在另一端(表头)删除队列 是仅在表尾进行插入、表头进行删除操作的线性表表尾(即an端)称为队尾;表头(即a1端)称为对头;栈与队列是两种常用的,重要的数据结构栈和队列是限定插入和删除。原创 2024-08-20 16:52:33 · 401 阅读 · 0 评论 -
【线性表】--------图书管理系统的单链表实现
引言:学习完链表,让我们实践一下吧,废话不多说直接上代码。原创 2024-08-19 16:32:33 · 509 阅读 · 0 评论 -
【线性表】------稀疏多项式加法运算 的 链式实现(带头结点)
多项式中指数由低到高排列每一项的系数非零的多项式//系数int expen;//指数//指针域//Polynomial:多项的与一般的链表结点相同,只不过稀疏多项式结点数据域分为指数和系数两部分。原创 2024-08-18 15:39:05 · 1249 阅读 · 0 评论 -
【线性表】内容总结
存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比(1)定义三个临时指针://pa用来遍历La//pb用来遍历Lb//pc用来遍历新链表Lc的每个结点(2)初始化pa,pb分别指向La,Lb的首元结点,pc指向新链表的头结点//新链表的头结点可以是La的头结点,也可以是Lb的头结点(3)依次从 La 或 Lb 中摘取元素值较小的结点插入到 Lc 表的最后,直至其中一个表变空为止(4)插入剩余段(注意释放没用的头结点)pa : pb;等价于if(pa!原创 2024-08-17 11:16:06 · 1007 阅读 · 0 评论 -
线性表【双向循环链表基本定义与操作】(带头结点)
双向循环链表的结构与双向链表完全一致,不同之处在于它的尾结点的next指针指向头结点,而头结点的prior指针指向尾结点,从而形成一个循环。//1.双向循环链表的结构定义(与双向链表完全一致)// 数据域//前驱和后继指针//HNode * 用来定义结点指针//HLinkList 用来定义链表指针。原创 2024-08-14 16:01:29 · 1349 阅读 · 0 评论 -
线性表【双向链表基本定义与操作】(带头结点)
该结点前驱元素的next域指向自己;后继元素的prior域指向自己在双向链表中有些操作(如:ListLength、GetElem,ClearList,Destroy等),因仅涉及一个方向的指针,故它们的算法与单链表的相同。但在插入、删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为 O(n)。//1.双向链表的结构定义多一个指向前驱的指针域// 数据域//前驱和后继指针//DNode * 用来定义结点指针//DLinkList 用来定义链表指针。原创 2024-08-12 21:29:22 · 751 阅读 · 0 评论 -
线性表【单链表的实现】(带头结点)
/结点数据域//结点指针域//注意这里的LinkList为自定义的结构体指针类型,与LNode*等价,最好用来定义头指针用LNode*来定义链表中的每个结点指针LinkList p;LNode* p;//定义结点指针p:两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LinkList L;//定义链表L(头指针):两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LNode* L;//数据域的学号部分//数据域的姓名部分int score//数据域的分数部分。原创 2024-08-06 00:31:27 · 1199 阅读 · 0 评论 -
线性表【链式存储结构】概念
对于每个数据元素ai数据元素信息后继元素的存储地址结点(Node)结点分为数据域和指针域两部分数据域:存储数据元素信息的域指针域:存储直接后继位置的域n个结点由指针链组成一个链表它是线性表的链式存储映像,称为线性表的链式存储结构。原创 2024-07-31 17:22:18 · 319 阅读 · 0 评论 -
线性表【顺序存储结构】
零个或多个数据元素的有限序列一般形式如a1, a2, a3, … , an表的大小为n,其中大小为0的表称为空表(empty list)元素ai在表中的位序为i(i从1开始取)表中的每个数据元素可以是简单类型(如整型),也可以是复合类型(如结构体类型)用一段地址连续的存储单元依次存储线性表的数据元素我们通常使用一维数组进行存储存储空间的起始位置:数组data(动态静态均可)表的最大容量:数组长度MaxSize线性表当前长度:lengh。原创 2024-07-28 18:38:27 · 630 阅读 · 0 评论 -
时间复杂度与空间复杂度
当我们把程序看做一辆马车时,时间复杂度就是衡量马车跑的快不快(程序的运行效率),空间复杂度就是衡量这匹马吃的多不多(程序所需的存储空间的规模)理想情况下我们需要的是**既不吃草还跑的快(时间复杂度和空间复杂度都很低)**的马车,但很显然这是很难做到的所以在程序设计中就有了时间换空间,空间换时间的概念那么什么是时间换空间呢,继续上面的比喻,这时我们就需要的是一辆**吃的少(省空间)且跑的慢(费时间)**的马车那么同理空间换时间,就是说我们需要一辆**吃得多(费空间)且跑的快(省时间)**的马车而在具体的程序设原创 2024-07-24 16:08:08 · 728 阅读 · 2 评论 -
数据结构与算法分析——引言
结构定义:通俗来讲就是某个数据结构在我们的程序中是怎么实现的---------比如链表的结构定义就是一种物理存储单元上非连续、非顺序的存储结构;数据元素 的逻辑顺序是通过链表中的指针链接次序实现的。结构操作:即某个数据结构都支持什么样的操作---------比如链表的插入,删除,遍历,查找等操作对于某个数据结构,虽然我们可能不知道这个数据结构是怎么实现的,但是只要我们了解了这个数据结构的相关性质,我们就可以去使用这个数据结构去进行一些相关的操作如图,存入和取出---------我们每次存入或者取出数据时会存原创 2024-07-22 23:40:03 · 390 阅读 · 0 评论
分享