![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 79
Nevergive_
这个作者很懒,什么都没留下…
展开
-
直接插入,希尔,选择排序
创建2个变量begin和end,初始化两者begin=0 end=n-1(n为数据的数量),先假设最大数据的下标为begin,最小的数是下标为end的数,然后通过遍历数组,找到最大的和最小的,然后将最小的放在最后一个位置,将最大的数据放在第一个位置;的, 然后把后面的数字与其进行比较,如果小于第一个数字,两者就交换,完成该步操作后,前2个数据有序的,然后我们在将第3个数字,与前面两个数字从后往前去比较,如果。然后,对gap的值进行改变,再次重复上述分组和排序的工作。,那么这个位置,就是它应该在的位置。原创 2023-11-30 20:51:02 · 843 阅读 · 0 评论 -
快速排序 归并排序【递归实现】
然后我们将区间分为 [0,m-1] [m+1,n-1] ,在对两个区间分别进行单趟排序。该算法是采用分治法 (Divide and Conquer)的一个非常典型的应用。找到后,那么begin就暂停往前,并且交换keybegin的数据。begin是最前面位置的下标,end是最后一个位置的下标。若将两个有序表合并成一个有序表,称为二路归并。即先使每个子序列有序,再使子序列段间有序。将已有序的子序列合并,得到完全有序的序列。并返回现在相遇的位置下标 m,end往前去找比key小的。们从小往大依次放入tmp。原创 2023-12-01 12:59:27 · 905 阅读 · 1 评论 -
用栈实现队列【C语言+leetcode】
此时栈一 ,有五个数据,现在要实现将1给删除掉,由于栈要求要后进先出,那么如果我们将数据 全挪到栈2中,因为栈的特点,故我们先将5给挪到栈2的栈底,然后依次挪,挪到最后的时候,1就在栈2的栈顶,此时可以直接调用栈的函数进行删除,可以将栈2中的数据全删除掉。要插入数据时,不能插入到栈2中,如果插入到栈2,那么由于栈的性质,会插到数据1的前面,那么就打乱了顺序,故我们要插,只能插到栈1中,故将栈一命名为pushST。由于队列是由两个栈来构建的,判断是否为空,即判断两个栈是否为空。故将栈2命名为 popST。原创 2023-11-12 21:33:51 · 40 阅读 · 1 评论 -
用队列实现栈【c语言+leetcode】
初始化栈就意味着:要先创建好一个类型为Mystack的栈变量,创建好后,再将该变量中的两个队列变量给初始化(这里可以直接调用前面创建好的函数QueueInit)。先找到不为空的队列,然后在返回它的该队列的队尾所对应的数据 ,这里可以直接调用函数QueueBack来找到这个数据。细节:由于栈的数据通常只存放在一个队列里,故我们往空队列里进行数据的挪动.,然后,我们要将一个队列q1里的最后一个(第n个)数据给弄出去,可以先将。这里要求用队列实现栈的本质是,用队列的性质来实现栈的特点(后进先出)。原创 2023-11-12 21:34:18 · 44 阅读 · 1 评论 -
实现循环队列【C语言】
假设若开辟k个空间,这就会造成无法判断队列中什么时候满和空,因为当出现front=rear时,即有队列为空的情况,也有队列为满的情况。出现rear=front时,队列为满的情况,最开始初始化后,队列为空 ,那时也满足rear=front,那么无法分清楚空和满的情况。front是队列里第一个元素的下标(这里的第一个并不是常规顺序上的第一个,而是数组里剩余数据中第一个进入的数据),当出现3号这种情况时,在往里插入一个数据,rear若还是按照物理上的结构往后一步,则会出现数组越界访问,的办法来去解决这个问题。原创 2023-11-13 20:35:14 · 50 阅读 · 0 评论 -
堆的实现 堆排序 【用C语言实现】
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。根节点:该节点前面没有前驱节点 例如上图的A是根节点节点的度:一个节点所含有的子树个数为该节点的度 如上图中A的度是6叶节点:度为0的节点 如上图的B C H I P....等都是叶节点树的度:一颗树中,最大的节点的度是树的度 如上图:树的度为6树的深度或高度:树中节点的最大层次 如上图:树的高度为4。原创 2023-11-19 23:04:07 · 53 阅读 · 1 评论 -
栈和队列详解
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out,即后进先出)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。1.2用来实现栈的结构这里采用的是数组结构来实现的,因为数组实现栈的尾上插入时更方便,不需要创建指针,只要扩容一下就行。但是用链表也是可以的。数组的哪一端用来做栈顶呢?原创 2023-11-12 11:47:55 · 58 阅读 · 0 评论 -
解释为啥单链表中用2级指针,而双链表用1级指针
(plist)来访问,将链表里的结点赋给plist(则此处我们已经要改变plist,将第一个头结点赋给plist),故在此处我们应该将plist的地址给传进去。由于plist是一个一级指针,故传地址时要用2级指针来接受该地址。双链表中有哨兵位头结点,故我们不需要用外来的结构体指针变量来访问,可以借助自身的头结点就可以了。来访问链表,直接借助哨兵位头结点去访问。单链表中我们要借助之前创建好的。可以不用通过创建一个结构体指针。原创 2023-11-10 10:10:35 · 94 阅读 · 1 评论 -
详解双链表
双向意味:该链表中的任何一个结点都可以访问其前面和后面的结点。要是现这个功能,则该链表中要有2个指针变量,一个。原创 2023-11-06 20:55:01 · 73 阅读 · 1 评论 -
详解顺序表和单链表
;原创 2023-11-05 14:47:19 · 140 阅读 · 2 评论