
数据结构
文章平均质量分 86
数据结构初阶
只是雪豹
我是咸鱼
展开
-
几种排序的实现
当a[end]大于此前i下标的元素的值时,将其调整,将end位置的值移动到end后面一个位置,同时end–,如果是小于的,那就直接跳出循环,就代表了前面的所有值都是升序的。就是,第一次摸牌我们把它放在第一张,第二次就和第一张比较,比它大就放在他的后面,否则就放在他的前面,摸第三张的时候先和后面大的一张牌开始比较,依次向前。我们将小于中间位置的值的放在左边,大于的放在右边,然后再对左边进行一样的划分,右边也是,用递归实现即可。我们将第二个元素开始向后遍历,i=1,令end=i-1,并且保存a[i]的值。原创 2023-12-09 17:31:00 · 643 阅读 · 42 评论 -
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
我们首先定义一个结构来存放二叉树的节点结构体里分别存放左子节点和右子节点以及节点存放的数据}BTNode;原创 2023-12-03 16:06:51 · 747 阅读 · 34 评论 -
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。原创 2023-12-02 17:28:08 · 606 阅读 · 23 评论 -
树和二叉树的基本概念和堆的实现
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。1.有一个特殊的结点,称为根结点,根节点没有前驱结点2.除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1原创 2023-12-02 16:11:59 · 350 阅读 · 11 评论 -
用队列和栈分别实现栈和队列
然后我们将不为空的那个队列里面的除了队尾元素的所有元素都统统放入为空的那个队列里面,知道不为空队列里面只剩下一个元素,先存储这个元素,然后就直接将他删除,最后返回这个元素。我们知道,栈的增加和删除元素都是从栈顶进行操作的,并且遵循先进后后出的原则,但是队列是遵循先进先出的规则,增加元素从队尾增加,删除元素从队首删除。这里题目中的查找队首元素也可以搭配使用,当pop栈为空时,队首元素就是push栈的栈底元素,pop栈不为空时,就是pop栈的栈顶元素。原创 2023-11-26 14:27:26 · 478 阅读 · 35 评论 -
循环队列的实现(附完整代码)
我们在前面的解题构思中就知道,当front和rear相等时,循环队列就为空了,所以我们直接返回obj->front==obj->rear,如果队列为空,就返回 1,队列不为空就返回0。也就是说,循环队列中我们如果在栈满了之后还想存储值,也是可以的,但是就要反复地使用之前用过的空间,会将其覆盖,所以尾指针rear和头指针front的位置的下标是会有覆盖的变化的。你可以看到,队列为空时,按照题目的意思,front的位置时为rear+1的,在上图中,其实front的位置是0,rear的位置是3。原创 2023-11-25 19:45:09 · 568 阅读 · 24 评论 -
栈和队列的实现(详解+图解!文末附完整代码)
当capacity和top相等时其实是有两种情况的,一种时为空,另一种是栈满,,我们在这里就用一个三目操作符,如果为0,就将capacity初始化为4,否则将capacity的原来的值乘2,然后动态开辟realloc一块新的空间,大小就是newcapacity,这样我们就完成了扩容。在后面的增删查改等操作我们需要断言,为了增加代码的可读性,我们直接写一个函数 ,更加容易理解,如果栈顶元素下标为0,那么这个栈就为空 ,所以直接return top等于 0这个表达式的值,为空则返回 1,不为空则返回0。原创 2023-11-25 16:43:04 · 719 阅读 · 31 评论 -
链表的实现(文末附完整代码)
我们创建一个tail和prev,然后用循环将tail遍历到最后一个节点,循环的终止条件时tail->next为空,条件满足时就将tail赋予prev,当跳出循环时,prev就是尾节点的前一个节点,我们直接将tail给free掉,将其置空,这样尾节点就被删除了。头插比较简单,我们直接将新节点的next等于链表的第一个节点即可,也就是*pplist,我们传进来的是**pplist,是节点地址的地址,所以我们需要解引用一次才能将地址给newnode的next。原创 2023-11-12 21:06:55 · 3259 阅读 · 49 评论 -
数据结构之顺序表的实现(详解!附完整代码)
首先为了方便顺序表的灵活运用,我们用typedef来在头文件中定义int为SLDateType,如果下次是字符型的数据,我们只需要在这里将int改为char,后续的代码就不用更改,其次我们定义一个结构体为顺序表。在这里的插入数据,我们首先要将知道pos位置,而且pos位置要是大于等于0,小于等于size的,因为头插就是下标为0的位置,尾插就是下标为size的位置,之前的头插尾插我们可以直接用这个函数。同样的我们首先检查容量,并且要将所有的数据后移一位,再将数据x插入数组下标为0的位置,同时size++原创 2023-11-08 18:38:22 · 1770 阅读 · 60 评论