数据结构与算法笔记
文章平均质量分 67
清晨白米稀饭.
少年偏爱摇摇欲坠的日落黄,殊不知此刻正拥有的,是一生中最明媚的曙光
展开
-
二叉树的基本概念
二叉树的基本概念一、树概念及结构1.1树的概念1.2 树的相关概念二、二叉树概念及结构2.1概念2.2 特殊的二叉树2.3 二叉树的性质一、树概念及结构1.1树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i原创 2022-02-24 15:38:29 · 909 阅读 · 6 评论 -
栈的增删查(C语言实现)
栈的增删查(C语言实现)一、栈的概念及结构二、栈的实现2.1、初始化栈与栈的销毁2.2、入栈与出栈2.3、取栈顶2.4、检测栈是否为空,如果为空返回非零结果,如果不为空返回0与获取栈中有效元素个数三、总代码块3.1、Stack.h3.2、Stack.c3.3、Tast.c一、栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操原创 2022-01-16 23:52:37 · 1170 阅读 · 4 评论 -
队列的增删查(C语言实现)
#define _CRT_SECURE_NO_WARNINGS 1#include"Queue.h"void QueueInit(Queue* q){ assert(q); q->head = NULL; q->tail = NULL;}void QueueDestroy(Queue* q)//销毁掉队列{ assert(q); Queue* cur = q->head; while (cur) { q->head = q->head->ne原创 2022-01-16 23:35:35 · 1297 阅读 · 2 评论 -
顺序表的优缺点
顺序表的优缺点一、顺序表的优缺点1.1、优点1.2、缺点二、链表(双向带头循环链表)2.1、优点2.2、缺点一、顺序表的优缺点1.1、优点支持随机访问(下标访问)。需要随机访问结构支持算法可以很好的适用。cpu高速缓存命中率高。1.2、缺点头部中间插入删除时间效率低。O(N)连续的物理空间,空间不够了以后需要增容。a、增容有一定程度消耗。b、为了避免频繁增容,一般我们都按倍数去增,用不完可能存在一定的空间浪费。二、链表(双向带头循环链表)2.1、优点任意位置插入 删除效率高原创 2022-01-13 18:58:37 · 2440 阅读 · 2 评论 -
cpu高速缓存命中率
cpu高速缓存命中率一、cpu高速缓存命中率一、cpu高速缓存命中率从硬件上来说存储体系的分布如下:其中磁盘和远程二级存储是不带电存储,而主存、高速缓存和寄存器是带电存储。我们的数据是从内存向上,先到L3,再到L2,再到L1,最后到寄存器进行CPU计算。缓存基本上来说就是把后面的数据加载到离自己近的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,一个主流的CPU的Cache Line 是 64 Bytes(原创 2022-01-13 18:48:51 · 2398 阅读 · 1 评论 -
带头双向循环链表增删查分析及代码实现(C语言实现)
带头双向循环链表分析及代码实现(C语言)一、带头双向循环链表结构二、代码2.1、创建一个带头双向循环链表2.2、开辟一个新的空间及打印链表2.3、链表尾插2.4、链表尾删2.5、链表头插2.6、链表头删2.7链表的查找2.8、在链表pos位置插入X2.9、删除pos位置上的数据2.10、链表的销毁三、完整代码块一、带头双向循环链表结构带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势原创 2022-01-11 14:40:36 · 403 阅读 · 0 评论 -
环形链表(求入环节点——解题思路)
环形链表(求入环节点——解题思路)一、OJ题二、证明三、代码一、OJ题给定一个链表,返回链表开始入环的第一个节点:https://leetcode-cn.com/problems/linked-list-cycle-ii/description/二、证明让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。三、代码/** * Definition for singly-linked list. *原创 2022-01-09 22:50:29 · 480 阅读 · 1 评论 -
环形链表(判断链表中是否有环——解题思路)
@[TOC](环型链表——解题思路一、OJ题目二、快慢指针2.1、那我们如何判断呢?2.2、为什么快指针每次走两步,慢指针走一步可以?2.3、快指针一次走3步,走4步,...n步行吗?2.3.1、当n为3时,每走一次,他们之间就会相差22.3.2、当n为4时,每走一次,他们之间就会相差3三、代码一、OJ题目OJ链接:https://leetcode-cn.com/problems/linked-list-cycle/description/题目让我们判断链表中是否有环二、快慢指针2.1、那我们如原创 2022-01-09 16:55:22 · 386 阅读 · 0 评论 -
链表的概念、结构及优缺点
链表一、 链表的概念及结构一、 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。相对于顺序表来说,链表按需申请空间,不用了就释放空间,更加合理的使用了空间。...原创 2022-01-08 22:08:28 · 1832 阅读 · 1 评论 -
顺序表及顺序表前后增删代码(C语言)
顺序表及顺序表前后增删代码(C语言)一、顺序表1.1概念及结构二、顺序表增删代码(C语言)一、顺序表1.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。(顺序表就是数组,但是在数组的基础上,要求数据是从头开始并且连续存储的,不能跳跃间隔存放)顺序表一般可以分为:1. 静态顺序表:使用定长数组存储元素。2. 动态顺序表:使用动态开辟的数组存储。二、顺序表增删代码(C语言)静态顺序表只适用于确定知道需要存多少数据原创 2022-01-03 00:14:15 · 441 阅读 · 1 评论 -
算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度一、算法效率1.1如何衡量一个算法的好坏1.2 算法的复杂度二、时间复杂度2.1时间复杂度的概念2.2 大O的渐进表示法三、空间复杂度四、常见复杂度对比一、算法效率1.1如何衡量一个算法的好坏如何衡量一个算法的好坏呢?算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度1.2 算法的复杂度时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额原创 2022-01-02 12:38:30 · 149 阅读 · 0 评论