首页 > 其他分享 >数据结构笔记(1)

数据结构笔记(1)

时间:2024-01-28 19:23:10浏览次数:32  
标签:下标 tt 元素 笔记 stk hh 数据结构 存储空间

开个博客记录一下算法学习的内容




------------------------------------分界线------------------------------------





最近在acwing上学了数据结构之链表,栈,队列,KMP(都是采用数组进行模拟,比用struct实现更快)



链表:像一个链子一样一个元素串着另一个元素。



单链表:每个节点有一个值,同时存有一个指针指向后一个节点e[i]和ne[i]。链表还要有个头有个尾巴,于是用head来存储头结点的下标,用-1来表示空节点的下标(尾巴上的节点)而元素下标就用idx来表示。
初始化:idx = 0;head = -1:
可以实现的操作:
在最前面加入一个元素x
在下标k的数后面插入一个元素x
删除下标k的元素后面那个元素


双链表:我们发现单链表没法向前访问,这样就没法精准删除下标为k的元素,于是便多加一个数组来表示每个节点前面那个节点的下标。
初始化:(最左边和最右边的节点已经存在,他们没有值)idx = 2; r[0] = 1 ; l[1] = 0;
可以实现的操作:
在下标为k的数左/右边插入一个元素x
删除下标为k的元素


可以用单链表中的邻接表来存储树和图~~~然鹅我还没学到


栈(stack):可以想象成一个罐子,先进后出。用tt来表示最末端的元素的下标,stk[i]代表值。
初始化:int stk[N]; tt = 0;
push:stk[++tt] = x;
pop:tt--;
!empty:tt>0
query:stk[tt]
(甚至可以查询栈底的元素stk[1])



队列(queue):一个两端都能开口的罐子,先进先出。用tt表示最末端,hh表示首端,q[i]代表值。
初始化:int q[N]; tt = -1,hh = 0;
push:q[++tt] = x;
pop:hh++;
!check:tt>=hh;
query:q[tt]或者q[hh];


总结:链表提供了从一个元素找到下一个元素的方法,单链表实际能存储的空间大小为N,双链表为N-2。个人理解链表是一种比栈&队列更高级的东西?他的缺点在于一个元素一旦删除,他对应的那个idx也永久性删除了(所以存储空间利用率没有那么高)

栈的实际存储空间为N-1,队列实际存储空间为N;

栈是其中唯一一个可以“释放”存储空间的容器。

p.s.其实所谓“实际所能存储的空间”并不绝对,可以采用更改下标的形式改变(比如在stk的初始化阶段让tt=114) 上述初始化的方法只是个人认为最方便的(单链表存储空间最大,双链表因为有l[1]r[0]所以必须从2开始,stk因为empty函数(tt>0)比较符合认知所以从1开始存,queue为了最大化存储空间所以tt=-1,hh = 0)

标签:下标,tt,元素,笔记,stk,hh,数据结构,存储空间
From: https://www.cnblogs.com/BladeWaltz/p/17993156

相关文章

  • 《深入浅出计算机组成原理》学习笔记1——计算机基本组成与指令执行
    一丶冯·诺依曼体系结构:计算机组成的金字塔1.从装机的角度看计算机基本组成CPU:计算机最重要的核心配件,全称中央处理器,计算机的所有“计算”都是由CPU来进行的内存撰写的程序、打开的浏览器、运行的游戏,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要......
  • 【学习笔记】代数
    向量咕。线性方程组定义线性方程组指的是形如\[\begin{aligned}a_{11}&x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1\\a_{21}&x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2\\&\vdots\\\\\\\\\\\\\vdots\\\\\\\\\ddots\\\\\\\......
  • 1/28 学习进度笔记
    SQL风格语法-注册DataFrame成为表DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql()来执行SQL语句查询,结果返回一个DataFrame。如果想使用SQL风格的语法,需要将DataFrame注册成表,采用如下的方式:df.createTempView(""score"......
  • 数据结构与算法:递归算法
    递归算法什么是递归?函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。此类问题的示例包括汉诺塔(TOH)、中序/先序/后序树遍历、图的DFS递归函数通过调用自身的副本并解决原始问题的较小子问题来解决特定问题。需要时可以生......
  • BUIR论文阅读笔记
    这个领域不熟悉,是看的第一篇论文,记录细一点Abstract单类协作过滤(OCCF)的目标是识别出与之呈正相关但尚未交互的用户-项目对,其中只有一小部分积极的用户-项目交互被观察到,对于积极和消极交互的区分建模,以往的工作在一定程度上依赖于负抽样,即将未观察到的用户项目对视为负对,因为实......
  • SelfCF论文阅读笔记
    Abstract讲述现存的挑战,现有的方法通常采用负抽样来区分不同的项目,也就是观察到的用户-项目对被视为正实例,未观察到的对被称为负实例,并且在一个定义的分布下进行采样以进行训练。在大数据集上进行负采样的计算成本高,所以负项目应该在定义的分布下仔细的进行抽样,避免在数据集中观......
  • panghu week04 笔记
    长度最小的子数组一开始想的是框定一个区间,然后如果大于等于target,从区间头弹出一个元素,从尾部append进入一个元素,发现并不能覆盖所有的区间看了题解以后,可以定尾,然后移动头部进行比较funcminSubArrayLen(targetint,nums[]int)int{slide:=make([]int,0)slid......
  • 《Confusion Graph: Detecting Confusion Communities in Large Scale Image Classifi
    论文标题《ConfusionGraph:DetectingConfusionCommunitiesinLargeScaleImageClassification》混淆图:在大规模图像分类中检测混淆社区作者RuochunJin、YongDou、YueqingWang和XinNiu来自国防科技大学并行和分布式处理国家实验室,和上一篇是姊妹篇。初读摘要......
  • Docker学习笔记05:私有库
    DockerRegistry基本流程下载DockerRegistry镜像启动Registry容器推动镜像到自建Registry查看从自建Registry拉镜像。启动镜像dockerpullregistry#运行registry映射端口挂载映射容器卷开启特权模式dockerrun-d-p5000:5000-v/opt/registry:/tmp/registry--privilege......
  • 【学习笔记】部分树上算法(概念篇)
    本文包括:轻重链剖分(done)线段树合并(done)tobeupd:长链剖分DSUontree(树上启发式合并)点分治边分治LCT有待更新本文非例题代码大多未经过编译,谨慎使用本文本来只有重剖长剖dsu,但是发现不会写,另外几个甚至更简单就带歪了.jpgpart1轻重链剖分树剖是一类算法的总......