数据结构
文章平均质量分 80
基于C语言的数据结构
问天要一物
只管去做
展开
-
数据结构--链表进阶面试题
的输入如下(你设计的程序。原创 2024-05-04 15:01:27 · 877 阅读 · 0 评论 -
数据结构--栈和队列
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作被称为进栈/压栈/入栈,入数据的地方为栈顶、出栈:栈的删除操作叫做出栈。出数据也在栈顶。出栈、入栈的过程我们可以想象为我们往羽毛球筒里放羽毛球和拿羽毛球,都是只能在一个口进出,是不是可以很形象的想象出来。下面我们来看一看栈是如何实现的。原创 2024-05-22 14:28:12 · 966 阅读 · 0 评论 -
数据结构--顺序表和链表的区别
顺序表和链表之间各有优劣,我们不能以偏概全,所以我们在使用时要关注任务的注重点,以此来确定我们要使用两者中的哪一个。原创 2024-05-10 20:13:19 · 386 阅读 · 1 评论 -
数据结构--二叉树(二)
链式二叉树是链式树集合中的一种,该树的每个根节点最多只有两个孩子节点,我们一般用左右孩子来称呼,在初学链式二叉树时,由于大家对链式二叉树的结构掌握还不够深入,为了降低本章的学习难度及成本,我们先手动创建一棵简易二叉树,快速进入二叉树的操作学习中,等所有基本操作大家都掌握后,我们再来了解如何创建链式二叉树。构建的二叉树结构如图;我们先来回顾一下二叉树的概念,二叉树是:1. 空树。2. 非空:根结点,根结点的左子树、根结点的右子树组成的。原创 2024-06-08 15:50:52 · 1075 阅读 · 0 评论 -
数据结构--树
在本节开始之前我们先来了解一下在树的学习中,我们需要了解哪些概念。叶节点或终端节点:度为0的节点称为叶节点;如上图:B、C、H、I...等结点为叶结点。。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的双亲节点;如上图:A是B的父结点。孩子节点或子节点:一个节点含有子树的根节点称为该节点的子节点;如上图:B是A的孩子结点。树的高度或深度:树中节点的最大层次;如上图:树的高度为4。非终端结点或分支结点:度不为0的结点;如上图:D、E、F、G...等结点为分支结点。原创 2024-05-27 21:08:19 · 647 阅读 · 0 评论 -
数据结构--二叉树
一棵二叉树是节点的一个有限集合,该集合或者为空或者由根节点加上两棵别称为左子树和柚子树的二叉树组成。从图中可以看出:1、二叉树不存在度大于2的节点。2、二叉树的子树有左右之分,次序不可颠倒,因此二叉树为有序树。原创 2024-06-01 11:57:49 · 880 阅读 · 0 评论 -
数据结构中的算法
什么是算法呢?算法是描述解决问题的方法。算法(Algorithm)这个单词最早出现在波斯数学家阿勒·花刺子密在公园825年(相当于我们中国的唐朝时期)所写的《印度数字算数》中。如今普遍认可的对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。现实世界中的问题千奇百怪,算法当然也就千变万化,没有通用的算法可以解决所有问题。甚至解决一个小问题,很优秀的算法却不一定适合它。指令能被人或机器等计算装置执行。原创 2024-05-01 17:23:57 · 1270 阅读 · 0 评论 -
基于C语言的数据结构--顺序表讲解及代码函数实现展示
数据结构是由“数据”和“结构”两个词组合而来,自然要以两个词分别去阐述。首先,什么是数据?数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据;也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0、1的形式表示。什么是结构?原创 2024-04-05 12:07:16 · 668 阅读 · 0 评论 -
数据结构--单链表
火车的车厢是独立存在的,且每节车厢都有车门,假设每节车厢的车门都被锁上了,并且需要不同的钥匙开锁,而每次只能携带一把钥匙,我们该如何从车头走到车尾呢?链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点,因此我们需要指针变量来保存下⼀个节点的位置。当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数据,也需要保存下⼀个节点的地址(当下⼀个节点为空时保存的地址为空)。原创 2024-04-17 20:30:03 · 410 阅读 · 0 评论 -
数据结构--单链表OJ题
给你单链表的头节点head,请你反转链表,并返回反转后的链表。解:这道题有递归和迭代两种反转链表的方式。如果是迭代的话,我们需要使用的是三指针法。首先保证链表不为空,然后创建三个指针(n1、n2、n3),开始时将n1赋值为NULL,n2赋值为head,n3赋值为head->next。随后进行链表遍历,先让n2->next = n1,然后n1 = n2、n2=n3、当n3!= NULL时,n3也向后移动一个节点,即n3 = n3->next。在循环结束后,n1就是我们新的头结点。原创 2024-05-02 16:27:00 · 782 阅读 · 0 评论 -
数据结构--顺序表经典OJ题
给你两个按排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你nums2到nums1中,使合并后的数组同样按排列。最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。设计实现一个时间复杂度为O(m + n)的算法解决此问题.解:对于这道题来说我们有多种思路,但是在限制了时间复杂度后,三变量就是最好的方法。原创 2024-05-02 15:33:12 · 558 阅读 · 0 评论 -
数据结构-- 基于顺序表的通讯录代码讲解
我们了解顺序表之后来一个比较简单的小项目来巩固一下.每一个函数我都进行了详细的补充, 各位可以仔细阅读。我将整个项目分为了Contact.h 、Contact.c和test.c三个文件中,其中Contact.h用于函数声明和结构体创建,Contact.c用于函数的实现,test.c用于测试代码。原创 2024-04-07 19:10:12 · 153 阅读 · 0 评论 -
数据结构--算法的复杂度
这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但是这种方法有很大的缺陷:1、必须依据算法事先编制好程序,这通常需要花费大量的时间和精力。如果编制出来发现它根本是很糟糕的算法,不是竹篮打水一场空吗?2、时间的比较依赖计算机硬件和软件等环境因素,有时会掩盖算法本身的优劣。3、算法的测试数据设计困难,并且程序的运行时间往往还与测试数据的规模有很大关系,效率高的算法在小的测试数据面前往往得不到体现。原创 2024-05-02 10:32:49 · 185 阅读 · 0 评论 -
数据结构--双向链表
这里单独讲解一个点,我们在创建“哨兵位”的时候使用的参数是一级指针的地址,并用二级指针接收,目的是创建一个节点的地址用作节点的链表头部,之后的其他函数均使用一级指针是为了防止头节点被修改。三个种类可以任意搭配,所以总共可以形成八种链表,但是最常用的是单向不带头不循环链表和双向带头循环链表。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。注意:这⾥的“带头”跟前⾯我们说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严。文件:DoubleListNode.h。原创 2024-04-21 13:27:16 · 337 阅读 · 0 评论