文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】万字详解快速排序、归并排序(下)

4.2快排的优化二:小区间优化为什么要用小区间优化,最重要的原因就是递归的程度越深,其被分成的数目越多,子问题越多,在此时我们可以利用插入排序进行优化。代码示例:void QuickSort4(int* a, int begin, int end) { //子区间相等只有一个值或者不存在那么就是递归结束的子问题 if (begin >= end) return; //小区间...

【C语言 - 数据结构】万字详解快速排序、归并排序(下)
文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】万字详解快速排序、归并排序(上)

一、快速排序的概念1.1快排的定义快速排序简称快排,快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。1.2快排的动态图1.3快速排序的几种版本介绍快排的基....

【C语言 - 数据结构】万字详解快速排序、归并排序(上)
文章 2022-11-26 来自:开发者社区

(端午特别版)【C语言 - 数据结构】排序(上)

一、排序的概念及其运用1.1排序的概念  排序的严格定义:假设含有 个记录的序列为{r1,r2. ... ... .rn}其相应的别为 ,其相应的关键字分别为{k1, k2, ……kn},需确定1,2,……n 的一种排列p1, p2, ……pn,使其相应的关键字满足 kpl<=kp2<=……<=kpn(非递减或者非递增)关系,即使得序列成为一个按关键字的序列(rp1,....

(端午特别版)【C语言 - 数据结构】排序(上)
文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】树、二叉树(下篇)(下)

3.3怎么求第k层节点的个数?核心思路:递归返回第k-1层左右结点相加的值int BTreekLeafSize(BTNode* root, int k) { assert(k >= 1); if (root == NULL) return 0; if (k == 1) return 1; return BTreekLeafSize(r...

【C语言 - 数据结构】树、二叉树(下篇)(下)
文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】树、二叉树(下篇)(上)

一、二叉树的遍历原理1.1原理:二叉树的遍历(traveing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有的结点,使每个结点都被访问一次,且仅被访问一次。这里有两个关键词:访问和次序。1.2.1访问访问其实是要根据实际的需要来确定具体做什么,比如对每个结点进行相关计算,输出打印等,它算作是一个抽象操作。在这里我们可以简单地假定就是输出结点的数据信息。1.2.2次序....

【C语言 - 数据结构】树、二叉树(下篇)(上)
文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】树、二叉树(上篇)

一、树概念及结构1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 ·有一个特殊的结点,称为根结点,根节点没有前驱结点·除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一棵结构....

【C语言 - 数据结构】树、二叉树(上篇)
文章 2022-11-26 来自:开发者社区

【C语言 - 数据结构】浅析栈和队列

一、栈、队列以及双端队列的概念1.1栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶 1.2队列的概念及结构队列:只允许在一端进行插入....

【C语言 - 数据结构】浅析栈和队列
文章 2022-11-26 来自:开发者社区

《C语言数据结构》———链表进阶之双向链表

一、双向链表的概念1、概念:概念:双向链表是每个结点除后继指针外还有⼀个前驱指针。双向链表也有带头结点结构和不带头结点结构两种,带头结点的双向链表更为常用;另外,双向链表也可以有循环和非循环两种结构,循环结构的双向链表更为常用。二、双向链表的实现头文件List.h#pragma once #include<stdio.h> #include<assert.h> #incl....

《C语言数据结构》———链表进阶之双向链表
文章 2022-11-26 来自:开发者社区

[C语言 / 数据结构初阶]链表初阶

一、链表的概念概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 注:1、从上图中可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续。2、从现实中的结点一般是通过malloc函数申请的,所以其内存分配是在堆区。3、从堆上申请的空间,是按照一定的策略来分配的,则一个节点的大小为8个字节。二、链表的分类实际中链表的结构非常多样,以下....

[C语言 / 数据结构初阶]链表初阶
文章 2022-11-24 来自:开发者社区

数据结构(初阶)—— C语言实现双向带头循环链表(2)

10.双链表删除pos位置的结点 //双向带头循环链表pos位置删除 void ListErase(LTNode* pos) { assert(pos); LTNode* posPrev = pos->prev;//找到pos的前一个位置 LTNode* posNext = pos->next;//和pos的后一个位置 //把前一个结点和后一个结点链接起来 p...

数据结构(初阶)—— C语言实现双向带头循环链表(2)

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注