![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
个人学习笔记
小野人_vector
这个作者很懒,什么都没留下…
展开
-
二叉树的非递归法及层序遍历
二叉树的前中后序非递归统一迭代方法和层序遍历方法。原创 2023-09-11 16:11:30 · 143 阅读 · 0 评论 -
二叉树中序遍历【迭代法】【代码随想录】
思考与笔记原创 2023-01-12 10:00:00 · 425 阅读 · 0 评论 -
【代码随想录】【链表】203. 移除链表元素
链表的定义。删除节点时,C++里要手动释放节点内存,其他语言如Java、Python,有自己的内存回收机制,不需要手动释放。设置虚拟头节点方便操作。原创 2022-09-27 20:58:56 · 498 阅读 · 0 评论 -
【代码随想录】【数组】59.螺旋矩阵II
本题不涉及算法,只是模拟过程,但却十分考察对代码的掌控能力。求解本题依然要坚持循环不变量原则。原创 2022-09-18 11:12:14 · 218 阅读 · 0 评论 -
【代码随想录】【数组】209. 长度最小的子数组
滑动窗口:不断调节子序列的起始位置和终止位置,从而得出我们想要的结果。原创 2022-09-18 09:34:15 · 99 阅读 · 0 评论 -
【代码随想录】【数组】27.移除元素
双指针法(快慢指针法):通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。原创 2022-09-11 21:55:00 · 96 阅读 · 0 评论 -
【代码随想录】【数组】704.二分查找
题目的前提:数组为有序数组,同时数组中无重复元素。当看到题目描述满足以上条件时,可以考虑使用二分法。原创 2022-09-11 20:46:00 · 177 阅读 · 0 评论 -
4292——大整数的输入输出
Description输入两个 long long 范围内的整数,输出他们的和。Input两个long long 范围内的整数。Output输出的两个大整数的和,保证结果在 long long 范围内。SampleInput 2222222222 3333333333Output 5555555555代码实现:#include<stdio.h>int main(){ long long a,b; scanf("%l...原创 2020-08-07 22:43:07 · 429 阅读 · 0 评论 -
4291——实数的输出和占位
Description输入一个实数,请你按如下要求输出:第一行按双精度默认输出,第二行双精度数输出共占 10 位,其中 3 位小数,右对齐,左补空格并在两端添加星号包裹,第三行双精度数输出共占 10 位,其中 3 位小数,左对齐,右补空格并在两端添加星号包裹。Input一个double范围内的正实数 a 。Output共三行,按题目描述输出。SampleInput 123.56789Output 123.567890 * 123...原创 2020-08-07 22:37:02 · 1088 阅读 · 0 评论 -
非线性数据结构——树与二叉树的相关内容
一、定义树(Tree)是n(n≥0)个结点的有限集T,其中:有且仅有一个特定的结点,称为树的根(Root);当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(SubTree)。二、特点(1)树中至少有一个结点——根(2)树中各子树是互不相交的集合三、基本术语结点(Node)——表示树中的元素,包括数据项及若干指向其子树的分支;结点的度(Degree)——结点拥有的子树数;叶子(Leaf)——度为0的结点;原创 2020-05-29 17:14:16 · 297 阅读 · 0 评论 -
排序算法:直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序
一、直接插入排序基本操作是将一条记录插入到已排好序的有序表中,从而得到一个新的、记录数量增1的有序表。算法步骤:①设待排序的记录存放在数组r[1...n]中,r[1]是一个有序序列;②循环n-1次,每次使用顺序查找法,查找r[i](i=2...n)在已排好序的序列r[1...i-1]中的插入位置,然后将r[i]插入表长为i-1的有序序列r[1...i-1],直到r[n]插入表长为n-1的有序序列r[1...n-1],最后得到一个表长为n的有序序列。void insertsort(nod原创 2020-05-24 15:21:53 · 2795 阅读 · 1 评论 -
查找算法:顺序查找,折半查找及递归算法
一、顺序查找算法思想:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定的值相等,则查找成功;反之,若扫描整个表后,仍未找到关键字和给定值相等的记录,则查找失败。int seqsearch(seqlist r,int n,keytype k)//顺序查找算法{ /* int i; for(i=1;i<=n;i++) if(r[i].key==k) return i; return 0; */ //改进:设置监视哨的顺序查找 int i;原创 2020-05-24 11:26:09 · 1941 阅读 · 0 评论 -
图——一种比线性表和树更复杂的数据结构
一、图的定义图G由两个集合V和E组成,记为G=(V,E),其中V是顶点的有穷非空集合,E是边的有穷集合。ADT Graph{ 数据对象V:一个集合,该集合中所有元素具有相同的特性。 数据关系R:R={VR} VR={<x,y>|P(x,y)∧(x,y∈V)}}二、图的基本术语(1)子图(2)有向图、无向图(3)邻接点(4)完全图:有n(n-1)/2条边的无向图为无向完全图;有n(n-1)条边的有向图为有向完全...原创 2020-06-01 22:23:28 · 424 阅读 · 0 评论 -
数组的实际应用练习:多维数组的存储和稀疏矩阵的存储
1、创建两个对称矩阵,求两个对称矩阵的和。//创建对称矩阵;//这里用的a[5][5]做的测试,需要注意二维数组传参问题,第二维空间需指定。void createArry(int a[][5],int m,int n){ for(int i=0;i<m;i++) for(int j=0;j<n;j++) { if(j>i) scanf("%d"...原创 2020-04-20 15:41:21 · 385 阅读 · 0 评论 -
内容受限的线性表:串的相关内容
一、串的概念定义:串是由零个或者多个字符组成的有序序列。一般记为S=“a1a2...an”(n>=0)。当n=0时称为空串(注意与空格串区分)。串中任意个连续的字符组成的子序列称为该串的子串。串与线性表的区别:(1)串的数据对象限定为字符集;(英文字符——ASCII,中英文——Unicode)(2)串的基本操作通常以子串为操作对象,而线性表以单个元素作为操作对象。二、...原创 2020-05-07 08:43:45 · 887 阅读 · 0 评论 -
操作受限的线性表:栈和队列的相关内容
一、栈的基本概念1、栈的定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶,表头—栈底,(如图)不含元素的空表称空栈。2、栈的特点:先进后出(FILO)或后进先出(LIFO) 二、栈的表示和实现1、顺序栈定义:用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。顺序栈的存储表示#define MAXNUM 50 //定义栈中元素的最...原创 2020-03-27 19:29:56 · 411 阅读 · 0 评论 -
线性表的链式表示:单链表的定义及基本操作(C语言)
一、定义线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素(即逻辑上相邻的数据元素在物理上不一定相邻)。特点是顺序存取,查找需从第一个结点出发,逐个往下搜索;但插入和删除操作不需移动大量元素只需修改相关结点的指针域,空间分配灵活。通常用头指针来标识一个单链表,此外,为了操作方便,在单链表第一个结点之前附加一个结点,称为头结点(如图)。单链表的结点类...原创 2020-03-17 10:05:22 · 656 阅读 · 0 评论 -
线性表的顺序表示:顺序表的定义及基本操作
一、定义顺序表指用顺序存储的方式实现的线性表,实现方式分为静态分配和动态分配。特点是能随机访问,存储密度高(即逻辑上相邻的两个元素在物理位置上也相邻);但插入和删除操作需要移动大量元素且拓展容量不方便。可通过下面两段代码理解两种实现方式,本文主要运用动态分配方式,静态分配方式数组大小和空间事先固定,空间占满再加入数据将会产生溢出。注意:动态分配不是链式存储,同样属于顺序存储结构,只...原创 2020-03-08 19:52:57 · 1088 阅读 · 0 评论 -
枚举
谈及枚举,除了想到把所有的情况列举找到答案外,最重要的是要减少尝试的次数,避免程序超时。下面通过两个例子简单了解下枚举:(一)完美立方思路:最初想到的是四层循环,加if判断,最终必然找到符合题意的答案。然而,根据对题意的理解,可以排除根本不需要尝试的值。整理出的a,b,c,d取值范围分别为:[2,N],[2,a-1],[b,a-1],原创 2018-01-24 13:04:02 · 191 阅读 · 0 评论