数据结构
Bqv它不想做功
这个作者很懒,什么都没留下…
展开
-
锻练编程思维——每日一题:《剑指offer》二叉树的下一个结点
题目描述题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目所给代码框架:/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), lef原创 2020-06-10 20:22:34 · 122 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目所给代码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int TreeDe原创 2020-06-08 18:25:33 · 129 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》求1+2+3+。。。+n
目录题目描述题目分析题解代码题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题目所给代码:class Solution {public: int Sum_Solution(int n) { }};题目分析在计算机里,求1+2+3+…+n得求1+2+3+…+n-1,求1+2+3+…+n-1得求1+2+3+…+n-2,求1+2+3+…+n-2得求1+2+3+原创 2020-06-06 18:11:52 · 178 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》删除链表中重复的结点
题目描述题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5题目所给代码框架:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/c原创 2020-06-04 15:36:05 · 131 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》二叉树的镜像
题目描述题目描述操作给定的二叉树,将其变换为源二叉树的镜像。题目给的代码框架:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: void Mirror(TreeNode *pRoot) { }}原创 2020-06-03 09:22:15 · 137 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39题目给出的代码框架:class Solution {public: int Fibonacci(int n) { }};题目分析不可用递归算法,时间复杂度O(2的n次方)非常大,不会通过的非递归算法(循环算法最简单),思路如下斐波那契数列求值采用自底向上(循环)的方式,已知前两项的值(a做+的右侧值,b做+的左侧值,继而1+1=原创 2020-06-02 15:48:30 · 216 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》链表中环的入口结点
题目描述题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题目给出的代码框架/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* EntryNodeOfLoop(ListNode* pHead)原创 2020-06-01 20:26:00 · 166 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》字符流中第一个不重复的字符
题目描述题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。题目给出的代码框架:class Solution{public: //Insert one char from stringstream void Insert(char ch) {原创 2020-05-31 13:48:15 · 277 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》表示数值的字符串
昨天光tm做实验了,写了一堆实验报告,今天上午也是。所以昨天没写oj题。没写就没写吧(那我不能穿越回昨天233),今天得写了,还是尽量一天一道,循序渐进目录题目描述题目分析题解代码小结题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。题目给的代码框架:class Solution {publi原创 2020-05-30 15:22:20 · 415 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》数组中重复的数字
题目描述题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。很经典的一道题,但是想出一个很好的题解却很难。...原创 2020-05-28 17:31:38 · 247 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》用两个栈实现队列
今天的每日一题还算简单,虽然我看了看题解。(因为我又想的有所偏差了/(ㄒoㄒ)/~~)私有成员给的居然是stack容器,有点懵,好在我摸索着用这个东西,还是能迅速上手的因为它本质就是个栈。目录题目分析题目分析题解代码题目分析题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。需要借助题目给出的代码进行分析class Solution{public: void push(int node) { } int原创 2020-05-27 13:50:44 · 250 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》跳台阶
目录题目描述题目解析所以用到的算法:递归。题解代码题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目解析思路:自上而下的倒推分析法(分治法)首先根据题目得知青蛙想要跳上n级台阶,他得先上1级或2级,然后3级或4级,当然这么想你屁也想不出来。n=1、2、…、5还好,要是n>5了,情况太多了,数跳法数一辈子吗?所以我们不如以自上而下来数跳法,这种方法在以后很多算法题至关重要,一定要具备这种分治法思维。具体是这样原创 2020-05-26 20:06:08 · 294 阅读 · 0 评论 -
锻练编程思维——每日一题:《剑指offer》构建乘积数组
目录审题思路拆解:审题题目描述给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)提炼信息:①给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1]②B中的元素B[i]=A[0]*A[原创 2020-05-25 16:41:48 · 254 阅读 · 0 评论 -
数据结构与算法学习笔记(第五章 树与二叉树)(1)树
目录树定义:应用于计算机领域表示方式一堆术语孩子双亲祖先子孙兄弟堂兄弟根结点结点的度树的度结点的层树的深度分支结点叶子节点有序树、无序树森林树的结构注意!树定义:n个结点的有限集n=0,树是空树n>0有且仅有一个处于顶端的结点我们把它称作根结点其余结点分为m个互不相交的有限集T1,T2,T3…,TM每个集合本身又是一棵树,称为根结点的子树树的定义是递归的定义应用于计算机领域编译数据库系统算法分析表示方式倒树表示(最常见)原创 2020-05-24 12:08:11 · 256 阅读 · 0 评论 -
数据结构与算法学习笔记(第四章 串、数组、广义表)(3)广义表
目录广义表性质广义表和线性表的区别:广义表优势和应用:广义表基本运算:广义表又称列表,是n>=0个元素a0,a1,…,an-1的有限序列,其中每一个ai是个原子或者广义表(套娃),举个例子:(注意空表也是广义表的元素)(0,1,…,n-1均为下标)广义表通常记作:LS=(a1,a2,…,an)(0,1,…,n-1均为下标) 其中LS是表名,n为表的长度,每一个ai为表的元素大写字母表示广义表,比如A、B广义表等,小写字母表示原子,比如c,d原子等表头:表尾:原创 2020-05-14 16:36:57 · 299 阅读 · 0 评论 -
数据结构与算法学习笔记(第四章 串、数组、广义表)(2)数组
目录数组维度:一维二维三维N维结论,特点定位某个元素顺序存储方式二维数组的顺序存储方式(行序为主序)矩阵特殊矩阵的压缩存储数组定义:按一定格式排列起来的具有相同类型的数据元素的集合维度:一维若线性表中的数据元素是非结构的简单元素就称该数组是一维数组逻辑结构是线性结构,定长线性表声明格式:数据类型 变量名称[长度];二维一维数组的数据元素又是一维数组,可以这么理解逻辑结构非线性结构:每个数据元素既在一个行表中(行一维数组),又在一个列表中(列一维数组)线性结构的定长原创 2020-05-14 16:30:10 · 462 阅读 · 0 评论 -
数据结构与算法学习笔记(第四章 串、数组、广义表)(1)串
串目录串定义:零个或多个任意字符组成的有限序列组成:串值串名串长n术语子串主串字符位置子串位置空格串串相等例子:应用计算机上的非数值处理的对象大部分是字符串数据如文字编辑、符号处理、各种信息处理系统逻辑、存储结构逻辑结构存储结构算法(匹配算法)这里只介绍匹配算法,其他算法和顺序表链表的相关算法相同,只是数据类型不同,这里不再介绍目的:确定主串中所含子串(模式串)第一次出现的位置(定位)应用:搜索...原创 2020-05-06 23:39:23 · 464 阅读 · 0 评论 -
数据结构——KMP算法(难懂版,但还是看看吧)
据说这个算法很难,起初看了《大话数据结构》,知道了这个算法,但是没看懂没理解,然后看其他博客,尽管博客上写着易懂,好理解,但我仍然看不懂,不理解,心里一直在口吐芬芳。后来我看了几个版本的KMP算法讲解,终于有所明目,所以来给大家写一个易懂版 难懂版的,直接硬刚。因为是硬刚,所以字数难免长,我也没有动图,因为一开始就看动图我必看不懂动图,我相信有的人也是这样。但是我会尽量以唠嗑的形式跟大家讲讲我...原创 2020-05-06 23:35:49 · 1478 阅读 · 1 评论 -
锻练编程思维——每日一题:《剑指offer》从尾到头打印链表
嗯,第一次上oj做算法题。第一眼就看到了从头到尾打印链表。然后苦思冥想,毕竟是C++实现,而非C实现,我看了一个题解,居然要用到STL相关的知识。好吧,我要自己讲清楚思路和代码class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<i...原创 2020-05-03 17:44:02 · 165 阅读 · 0 评论 -
数据结构与算法学习笔记(第三章 栈与队列)(2)队列
队列目录队列常见应用顺序队表示上溢:队列满了,你还往队尾添加元素。那我让rear指针怎么在往上走呢?所以就要报错说上溢了下溢:队列空了,你还要从队头删除元素,那我让front指针怎么再往下走呢?所以就要报错说下溢了出队从队头(front指针指的元素)出队,入队从队尾入队(rear指针指的空间入队)所以就有了循环队列,就是我可以这样解决假上溢问题循环队列解决了假上溢问题,那么如何判断队空和队满?因...原创 2020-05-01 14:30:20 · 538 阅读 · 0 评论 -
数据结构与算法学习笔记(第三章 栈与队列)(1)栈
栈方便取阅,给个目录!栈顺序栈top指针指栈顶元素再往后一个位置(只操作该指针)base指针指栈底(不操作该指针)一些重要操作上溢下溢结构算法链栈结点结构表示:算法递归定义分治法求解递归算法的一般形式函数调用过程举例:求解阶乘n!的过程 (实参和返回地址均存在系统栈里)递归函数调用的实现优点与缺点单项递归)顺序栈top指针指栈顶元素再往后一个位置(只操作该指针)为嘛?方便操作!b...原创 2020-04-29 01:00:23 · 606 阅读 · 2 评论 -
记第二次实践——数据结构 线性表实践(图书管理系统0.8)剖析程序(避坑参考)
程序写好了,先分析一下debug过程:采取该cout形式时,只在最后一行“<<”中最后加;否则会出现以下报错信息(节选)。main.cpp|58|error: expected primary-expression before ‘<<’ token|void AddLNode(Linklist &,int);//....AddLNode(BkL...原创 2020-04-25 11:44:37 · 375 阅读 · 0 评论 -
记第一次实践——数据结构 线性表实践(稀疏多项式)剖析程序(避坑参考)
今天试手稀疏多项式程序设计。做了3、4个小时吧,debug时间比写代码时间长,遇到了一些问题,目前解决了。算法的健壮性也在debug中不断完善。不多说,直接上代码,解说代码!typedef struct plynml{ int expr; float coef;}Ply;typedef struct node{ Ply data; struct node...原创 2020-04-20 18:37:53 · 241 阅读 · 0 评论 -
数据结构与算法学习笔记(第二章 线性表)
记一些第一次学习的时候不知道或者理解有偏差的东西吧关于顺序表元素存储位置的计算先举个例子:如果每个元素占用8个单元,ai的存储位置是2000单元,则ai+1的存储位置是:?答案:2008单元。(别理解错了,让你求的是存储位置不是下标!!!)抛砖引玉:所有数据元素的存储位置均可由第一个元素的存储位置得到(“由第i个元素的存储位置得到”这里推得的):LOC(ai)=LOC(a1)+(i-1...原创 2020-04-19 18:33:00 · 332 阅读 · 0 评论 -
单链表(配合数构第二章的笔记使用)
单链表头指针用来记录链表第一个元素的地址,链表名可以取头指针名头指针为空,证明链表是空表结点:数据元素的存储映像数据域指针域你可以选择把箭头理解成指向元素的地址(因为你也不知道那个地址具体是什么)其指针的定义为嵌套定义(定义的类型为所在结构体类型)Lnode:普通的(结点)结构体类型变量,可以Lnode a;或者Lnode *a。a.next或者a.data来操作结点的两个域*...原创 2020-04-19 18:31:05 · 241 阅读 · 0 评论 -
数据结构与算法学习笔记(第一章 绪论)
这章知识点概念比较多,我就画了一张逻辑图来表示了,这样看起来清晰明了。(第一次用XMind,逻辑图第二章以后的内容还没写,持续更新中。。。。。。)...原创 2020-03-31 21:54:04 · 234 阅读 · 0 评论 -
数据结构与算法学习记录&笔记整理目录
数据结构与算法第一章 绪论原创 2020-03-31 21:23:42 · 158 阅读 · 0 评论