
【数据结构学习】
文章平均质量分 81
学好编程,数据结构是必不可少的哦!
@@永恒
心中如有目标,只管一路前行。
展开
-
数据结构之排序 三
一、归并排序基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。1.1 递归方法静态图归并递归方法 代码://归并递归函数void _MergeSort(int* a,int left,int right,int* temp){ //不...原创 2022-05-18 19:57:16 · 357 阅读 · 2 评论 -
数据结构之排序 二
目录一、冒泡排序1.1 动态图1.2 代码1.3 优化1.4 特性1.5 三种排序的比较二、快速排序2.1 hoare版本静态图2.2 单趟 容易出现的问题2.2.1 特殊场景一2.2.2特殊场景二:2.3 单趟 正确的代码为(hoare版本)2.4 整体代码(递归)2.5 递归分析2.6 特性2.7 快速排序有序数组优化:三数取中法2.7.1 问题1:那么有什么方法可以解决快速排序有序数组的问题呢?2.7.2 问题2:为什么要解决..原创 2022-05-14 20:05:32 · 501 阅读 · 7 评论 -
数据结构之排序 一
一、 直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。举例: 如我们玩扑克牌时,就用了插入排序的思想 动态图:代码:void InsertSort(int* a,int n){ //比较的次数为n-2次 for (int i = 0;i < n-1;i++) { int end = i; int x = a[end+1].原创 2022-05-13 14:03:54 · 1150 阅读 · 6 评论 -
数据结构之二叉树基础相关oj题
一、单值二叉树965. 单值二叉树 - 力扣(LeetCode) (leetcode-cn.com)题目:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。思路一:在左右子树都存在的情况下,用根和左右子树相比较,如果都相等,则再比较根的左子树和其左右子树是否相等,直到其根为空,右子树也是如此。代码:/** * Definition for a binary tree node. * stru原创 2022-04-26 22:57:48 · 1359 阅读 · 6 评论 -
数据结构之二叉树 二
一、堆排序(1)方式一思路:建立堆,然后获取堆顶元素,再插入数组,在进行堆顶与最后一个元素交换,删除最后一个元素,从堆顶向下调整找到次大或次小的元素,依次重复//堆排序方式一:void HeapSort(int* arr,int n){ HP hp; HeapInit(&hp); int i = 0; //排成升序,建立一个n个元素的小堆,每次取堆顶的元素,堆顶的元素每次都是最小的,然后删除堆顶元素,之后就是次小的在堆顶 for (i = 0;i < n;i++) {原创 2022-05-07 14:20:39 · 671 阅读 · 0 评论 -
数据结构之二叉树 一
一、树的概念及其结构树是一种非线性的数据结构,它由n(n>=0)个有限节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。(1)有一个特殊的结点,称为根节点,根节点没有前驱结点。(2)除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、...、Tm,其中每一个集合Ti(1<=i<=m)又是一颗结构与树类似的子树。每颗子树的根节点有且只有一个前驱,可以有0个或多个后继,因此,树是递归定义的。生活中的..原创 2022-04-17 13:08:30 · 1266 阅读 · 1 评论 -
栈和队列的应用
数据结构之栈和队列的应用原创 2023-01-26 19:37:37 · 748 阅读 · 0 评论 -
数据结构之循环队列
目录一、循环队列的概念二、设计循环队列思路一:数组实现思路二:链表实现一、循环队列的概念为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。环形队列可以使用数组实现,也可以使用循环链表实现。重点:循环队列,无论使用数组实现还是链表实现,都要多开一个空间,也就意味着,要是一个存.原创 2022-04-12 21:23:26 · 7462 阅读 · 6 评论 -
数据结构之队列
一、队列(1)队列的概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出(FIFO)的原则。入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为对头如图:二、队列的实现队列既可以用数组和也可以用链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,每次删除队头,后面的元素就要向前移动,所以效率比较低(1)问题1:结构体和指针变量传参 1.当我们创建的只是一个指针变量的时候,如果我们要改变这个指针变..原创 2022-04-11 23:14:02 · 2425 阅读 · 10 评论 -
数据结构之栈
一、栈(1)栈的概念:是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出或者先进后出的原则。如图:(2)压栈:栈的插入操作叫做进栈、压栈或者入栈,从栈顶压入数据 出栈:栈的删除操作叫做出栈。出数据也在栈顶如图 进栈:如图 出栈:(3)栈的实现:栈的 实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小如图 ...原创 2022-04-08 15:26:22 · 3012 阅读 · 4 评论 -
王道第二章链表相关oj题及之后的练习(详解)
此篇为参考王道即力扣相关的题目以及自己的思路,只为参考,只是本人的学习思路原创 2022-08-22 09:58:30 · 437 阅读 · 0 评论 -
链表相关oj题 三
一、环形链表II142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际..原创 2022-04-04 15:43:47 · 958 阅读 · 9 评论 -
链表相关oj题 二
一、分割链表86. 分隔链表https://leetcode-cn.com/problems/partition-list/题目:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。图解:代码:struct ListNode* partition(struct ListNode* head, int x){ //新建立俩个链表,链表1为less(..原创 2022-03-29 20:48:33 · 1157 阅读 · 3 评论 -
链表相关oj题 一
203. 移除链表元素 - 力扣(LeetCode) (leetcode-cn.com)题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。图解分析:代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; ...原创 2022-03-27 16:16:04 · 868 阅读 · 4 评论 -
带头结点双向循环 -- 双向链表
一、双向链表初始化图解:phead链表的最后一个节点要指向第一个节点,第一个节点要指向最后一个节点,而第一个节点和最后一个节点都是第一个节点,所以phead->next = phead->prev = phead;代码:LTNode* InitList(){ //带头节点,循环链表 //哨兵位头结点 LTNode* phead = (LTNode*)malloc(sizeof(LTNode)); phead->next = phead->prev = phe原创 2022-04-06 15:05:56 · 3159 阅读 · 8 评论 -
无头节点--单链表
目录一、单链表打印:二、增容三、单链表尾插四、单链表头插五、单链表尾删六、单链表头删七、单链表的查找八、单链表在pos之后插入X九、单链表在pos之前插入X十、删除pos位置十一、删除pos之后的位置十二、销毁链表总代码:Slistexe.hSlistexe.ctest.c部分运行结果:一、单链表打印://打印void SListprint(SL* phead){ SL* cur = phead; whil...原创 2022-04-01 17:39:24 · 2092 阅读 · 9 评论 -
数据结构之顺序表
定义:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。静态顺序表:#define N 1000typedef int SLDataType;//重新定义容易更改类型//静态顺序表 typedef struct SeqList{ SLDataType a[N]; int size;//表示数组存储了多少个数据}SL;动态顺序表:typedef int SLDataType;//动态顺序表 typ原创 2022-03-23 20:01:12 · 1682 阅读 · 2 评论