![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Sandm *
C , C++知识分享
展开
-
【数据结构】选择排序的细节和代码实现
【数据结构】选择排序的细节和代码实现。1>首先在待排序序列中找到最小元素和最大元素,分别存放到排序序列的起始位置和末位置。2>此时缩小区间范围,即 【begin,end】 变为 【begin+1,end-1】3>再从剩余待排序元素中继续寻找最小元素和最大元素,然后分别放到该待排序序列的起始位置和末位置。4>重复第二步与第三步,直到所有元素均排序完毕。原创 2022-11-08 16:52:23 · 559 阅读 · 0 评论 -
【数据结构】希尔排序
【数据结构】希尔排序; 1.先选定一个小于N的整数gap作为第一增量,然后将所有距离为 gap的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作… 2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。原创 2022-11-07 19:11:26 · 279 阅读 · 0 评论 -
【数据结构】插入排序的小细节和代码实现
插入排序的小细节和代码实现;在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。原创 2022-11-07 19:11:49 · 369 阅读 · 0 评论 -
【数据结构】堆 的增,删,查,改的实现
【数据结构】堆 的增,删,查,改的实现。原创 2022-10-22 09:52:03 · 323 阅读 · 0 评论 -
【数据结构】队列的 增,删,查,改 的实现
【数据结构】队列的 增,删,查,改 的实现。原创 2022-10-20 15:42:06 · 392 阅读 · 0 评论 -
【数据结构】栈 的 增,删,查,改 的实现
【数据结构】栈 的 增,删,查,改 的实现。原创 2022-10-19 16:10:04 · 463 阅读 · 0 评论 -
【数据结构】带头+双向+循环链表的 增,删,查,改 的实现
【数据结构】带头+双向+循环链表的 增,删,查,改 的实现。原创 2022-10-19 15:12:36 · 188 阅读 · 0 评论 -
【数据结构】单向不带头结点 非循环链表的 增,删,查,改 的实现
【数据结构】单向不带头结点 非循环链表的 增,删,查,改 的实现原创 2022-10-19 10:34:10 · 246 阅读 · 0 评论 -
【数据结构】顺序表(增,删,查,改)的实现
【数据结构】顺序表(增,删,查,改)的实现。原创 2022-10-17 18:44:01 · 191 阅读 · 0 评论 -
【数据结构】归并排序的递归与非递归形式
如图所示:先让左右子树去解决同样的问题,然后得到结果之后,再整合为整颗树的结果归并函数需要用到递归,而且还需要自定义一个归并函数的子函数 _MergeSort (),它的参数同主函数会有区别在这个子函数中完成递归的全过程,具体步骤如下:先在主函数 MergeSort ()中 malloc 一个数组空间,用以存放经过 归并 + 排序 后的有序表,然后调用子函数 _MergeSort ()在子函数 _MergeSort ()中,创建一个变量 mid 用来划分左子区间与右子区间,[ begin, mid ] [原创 2022-07-08 19:57:51 · 1143 阅读 · 0 评论 -
【数据结构】计数排序——不需要比较的排序
计数排序只能用于整数,计数排序函数的参数有俩个:一个是要进行处理操作的数组,另一个参数是数组中元素的个数因为是根据数组下标的相对位置取代替比较操作的,所以要 malloc 一个数组;但是要想确定 malloc 出空间的具体大小时,就要先在传入函数的数组中寻找最大的元素与最小的元素,二者的差再加上1,即确定了可以容纳这些数组中全部的元素,尽管可能会出现一些空间的剩余,但是无关紧要。分配好数组后不要忘记要初始化,将里面的元素全部初始化为 0;这里的初始化很重要,因为数组中的数据都是连续存放的,这里的相对位置是指原创 2022-07-08 10:39:46 · 215 阅读 · 0 评论 -
C语言中常见的优先级
1. 优先级:!= “大于” 算术运算符 “大于” 逻辑运算符2. 图像:原创 2022-05-27 09:32:29 · 311 阅读 · 0 评论 -
【数据结构】——有关栈的相关操作
#include "Stack.h"//栈结构的初始化void StackInit(ST *ps){ assert(ps); //初始化一般先置为 0 ps->top = 0; ps->a = NULL; ps->capacity = 0;}//栈的销毁void StackDestroy(ST *ps){ assert(ps); free(ps->a); ps->capacity = 0;...原创 2022-05-20 17:29:35 · 173 阅读 · 0 评论 -
【数据结构】C语言算法练习题——
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点原创 2022-05-19 21:17:15 · 1557 阅读 · 0 评论 -
【数据结构】C语言算法练习题——利用“快慢指针”去判断一个链表中是否带环
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true 。 否则,返回 false原创 2022-05-14 16:06:09 · 386 阅读 · 0 评论 -
【数据结构】C语言算法练习题——相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null原创 2022-05-14 15:08:31 · 186 阅读 · 0 评论 -
【数据结构】C语言算法练习题——判断链表是否“对称”
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。原创 2022-05-14 12:34:24 · 398 阅读 · 0 评论 -
【数据结构】C语言算法练习题——通过 “ 创建俩个链表与尾插操作 ” 去解决
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。原创 2022-05-12 16:01:47 · 166 阅读 · 0 评论 -
【数据结构】C语言算法练习题——利用“归并”去合并俩个有序链表
解题思路:1. 初学者对于此题的解答最容易想到就是将第一个链表中的结点与第二个链表中的结点逐一进行比较后进行多次“随机插入” 操作,但是该种算法容易想到,但是用代码实现起来又会很困难2. 所以我们想到用 “ 归并 ” 去求解。所谓归并就是每次都要从头比较第一个链表和第二个链表的头结点,然后取最小的结点尾插到新的链表(因为题目中要求是升序)原创 2022-05-11 15:41:34 · 268 阅读 · 0 评论 -
【数据结构】C语言算法练习题——利用快慢指针去求“输入一个链表,输出该链表 中倒数第k个结点”
输入一个链表,输出该链表中倒数第k个结点原创 2022-05-11 12:46:53 · 157 阅读 · 0 评论 -
【数据结构】C语言算法练习题——利用“快慢指针”去求返回一个单链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。原创 2022-05-11 12:22:39 · 283 阅读 · 0 评论 -
【数据结构】C语言算法练习题——利用“逐次头插操作”去进行反转单链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。原创 2022-05-10 21:29:55 · 183 阅读 · 0 评论 -
【数据结构】C语言练习题——双指针与单链表结合的相关题型
题目链接:力扣https://leetcode-cn.com/problems/remove-linked-list-elements/description/解题思路:1. 要先设出俩个指针变量 cur 与 prev ,使得这俩个指针在移动的时候始终保证 prev 在 cur 指针的前面2. prev 指针的存在就是为了可以将要删除掉元素的其左右俩个元素链接起来3. 如果一个单链表中全是要删除的数字,如图所示:其本质上是 “头删” 问题。错误原因:prev 在没有移动前原创 2022-05-05 16:10:06 · 210 阅读 · 0 评论 -
【数据结构】C语言练习题---去重算法,删除有序数组中的重复项
题目链接:力扣https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/解题思路:代码实现:int removeDuplicates(int* nums, int numsSize){ int up = 1; //注意这里开头是1 int down = 0; while (up < numsSize) { if (nums[up] != nums[原创 2022-04-24 16:10:35 · 1368 阅读 · 0 评论 -
【数据结构】C语言练习题----利用“双指针”的思想来移除元素
题目链接:原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。力扣https://leetcode-cn.com/problems/remove-element/解题思路:代码实现:int removeElement(int* nums, int numsSize, int val){int up = 0,down = 0;while (up < numsSize) //注意这里是up,而不是down{ if (nums[u原创 2022-04-24 15:07:38 · 1181 阅读 · 0 评论 -
【数据结构】C语言练习题——寻找缺失的数字
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?原创 2022-04-17 19:37:10 · 1609 阅读 · 0 评论