数据结构
catkin_ws
后端研发工程师
展开
-
剑指offer 汇总版
剑指offer 汇总版数组3 数组中重复的数字数组3 数组中重复的数字数组下标法哈希map(不改变原数组,空间O(1),二分查找,如1-8,看1-4出现的次数是否大于4,,出现则说明有重复数字)题解...原创 2020-09-07 20:37:39 · 95 阅读 · 0 评论 -
树的序列化与反序列化(string转char*)
序列化:先序方式#include <iostream>#include <string>using namespace std;//treeclass TreeNode{ public: TreeNode(int data){ value = data; left = NULL; right = NULL; } public: int v原创 2020-08-17 16:44:02 · 117 阅读 · 0 评论 -
二叉树的遍历(递归&非递归)
#include <iostream>#include <vector>#include <stack>using namespace std;//treeclass TreeNode{ public: TreeNode(int data){ value = data; left = NULL; right = NULL; } public:原创 2020-08-17 16:00:54 · 98 阅读 · 0 评论 -
图的BFS和DFS 搜索图
图的BFS和DFS之C++实现图的创建图的BFS图的DFS测试参考图的创建手动输入,并以节点数作为输入结束标志从文件读取,文件的从第二行开始,每一行结束都要有节点数作为结束图的存储:vector< list<int> > graph;图的BFS非递归实现,借助队列void bfs(int v)//以v开始做广度优先搜索(非递归实现,借助队列){ list<int>::iterator it; visited[v] = true;原创 2020-08-13 12:53:41 · 99 阅读 · 0 评论 -
图的dfs(c++)
图的dfs(c++)dfsdfs1全排列#include <iostream>#include <string>using namespace std;char cuncu[100] = { 0 };int visit[100] = { 0 };void dfs(string a, int num, int n){ if (num == n) { for (int i = 0; i < num; i++) { cout << c原创 2020-08-13 11:54:16 · 460 阅读 · 0 评论 -
程序员代码面试指南&剑指offer 刷题总结
剑指offer刷题贪心策略JZ9 变态跳台阶JZ32 把数组排成最小的数JZ67 剪绳子动态规划贪心策略JZ9 变态跳台阶JZ32 把数组排成最小的数JZ67 剪绳子动态规划原创 2020-07-28 11:04:53 · 1292 阅读 · 0 评论 -
11 旋转数组的最小数字
11 旋转数组的最小数字二分查找class Solution {public: int minArray(vector<int>& numbers) { int left = 0, right = numbers.size() - 1; while (left < right) { int mid = (right - left) / 2 + left; i原创 2020-09-07 22:38:15 · 73 阅读 · 0 评论 -
8 二叉树的下一个节点
8 二叉树的下一个节点8 二叉树的下一个节点8 二叉树的下一个节点有右孩子?下一个节点是右孩子的最左节点没有右孩子,下一个节点为,当前节点若为父节点的左孩子,为父节点原创 2020-09-07 22:02:40 · 85 阅读 · 0 评论 -
7 重建二叉树
7 重建二叉树7 重建二叉树思路7 重建二叉树leetcode思路当前的根找到根的左子树序列(前序中序)找到根的右子树序列(前序中序)找到根的左右子树递归返回/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(N原创 2020-09-07 21:15:31 · 98 阅读 · 0 评论 -
6 从尾到头打印链表
从尾到头打印链表递归栈class Solution {public: vector<int> res; vector<int> reversePrint(ListNode* head) { if (head == nullptr) return res; print(head); return res; } void print(ListNode* head) {原创 2020-09-07 21:04:55 · 69 阅读 · 0 评论 -
4 二维数组中的查找
二维数组的查找二维数组的查找思路二维数组的查找思路从右上角开始找,target大于则向下找小于则往左找难点while的循环条件class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if (matrix.empty() || matrix[0].empty()) retur原创 2020-09-07 20:42:25 · 87 阅读 · 0 评论 -
3 数组中重复的数字
3 数组中重复的数字3 数组中重复的数字思路需要考虑的错误输入代码3 数组中重复的数字leetcode思路数组下标法哈希map需要考虑的错误输入空数组数组中的元素必须在0~n-1范围代码class Solution {public: int findRepeatNumber(vector<int>& nums) { if (nums.empty()) return 0; for (int i = 0; i <原创 2020-09-07 20:30:58 · 78 阅读 · 0 评论 -
递归和动态规划
递归和动态规划1 介绍1 介绍介绍递归和动态规划暴力递归:把问题转化为规模缩小化的同类问题的子问题有明确的不需要继续进行递归的条件(base case)有当得到了子问题的结果之后的决策过程不记录每一个子问题的解动态规划:从暴力递归中来将每一个子问题的解记录下来,避免重复计算把暴力递归的过程,抽象成状态表达并且存在化简状态表达,使其更加简洁的可能...原创 2020-07-28 19:37:14 · 373 阅读 · 0 评论 -
(C++)分别用递归和非递归方式实现二叉树先序、中序和后序遍历
实现二叉树先序、中序和后序遍历【说明】【题目】【说明】本文是左程云老师所著的《程序员面试代码指南》第三章中“分别用递归和非递归方式实现二叉树先序、中序和后序遍历”这一题目的C++复现。本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书。【题目】用递归和非递归的方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序为根、左、右;中序遍历顺序为左、根、右;后序遍历顺序为左、右、根。头文件:binarytree.h源文件:binar原创 2020-06-30 22:16:47 · 736 阅读 · 0 评论 -
打印矩阵、旋转矩阵、矩阵查找(c++)
打印矩阵、旋转矩阵、矩阵查找1 转圈打印矩阵1.1 打印一空心圈1.2 打印函数不能想如何进行坐标位置变换到下一个,很难。应该考虑数据状况,从宏观上进行分解。1 转圈打印矩阵1.1 打印一空心圈#include <iostream>using namespace std;void printH(int** a, int aR, int aC, int bR, int bC){ int indexac = aC; int indexar = aR; int indexbc =原创 2020-06-21 14:13:59 · 606 阅读 · 0 评论 -
猫狗队列(c++)
猫狗队列(c++)【说明】:本文是左程云老师所著的《程序员面试代码指南》第一章中“猫狗队列”这一题目的C++复现。本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书。感谢左程云老师的支持。#include <iostream>#include <string>#include<queue>#include<stdexcept>//标准异常库using namespace std;//猫狗队列//在原创 2020-06-21 10:06:15 · 631 阅读 · 0 评论 -
栈和队列题目(c++)
栈和队列题目特殊的栈用队列实现栈用栈实现队列特殊的栈实现特殊的栈,在实现栈的基本功能上,再返回栈中最小的元素1、pop、push。getMin操作的时间复杂度都是O(1)O(1)O(1);2、设计的栈类型可以使用现成的栈结构#include <iostream>#include< stack >using namespace std;//s.empty(); //如果栈为空则返回true, 否则返回false;//s.size();原创 2020-06-20 23:21:56 · 317 阅读 · 0 评论 -
数组、栈、队列的相互实现(c++)
数组、栈、队列的相互实现(c++)数组结构实现固定大小的栈和队列数组实现固定大小栈数组实现固定大小队列数组结构实现固定大小的栈和队列数组实现固定大小栈#include <iostream>using namespace std;int index = 0; //stack指针void push(int* a,int num,int i){ if (index >= i) cout << "zhanding yichu" << endl;原创 2020-06-20 22:31:05 · 274 阅读 · 0 评论 -
数组的小和&逆序对—归并排序(c++)
数组的小和—归并排序数组小和的定义如下:例如,数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或等于s[0]的数的和为0;在s[1]的左边小于或等于s[1]的数的和为1;在s[2]的左边小于或等于s[2]的数的和为1+3=4;在s[3]的左边小于或等于s[3]的数的和为1;在s[4]的左边小于或等于s[4]的数的和为1+3+2=6;在s[5]的左边小于或等于s[5]的数的和为1+3+5+2+4=15。所以s的小和为0+1+4+1+6+15=27给定一个数组s,实现函数返回s的小原创 2020-06-18 21:16:49 · 384 阅读 · 0 评论 -
常见查找算法实现(c++)
常见查找算法实现(c++)1 查找基本概念2 复杂度分析3 代码实现3.1 顺序表查找3.1 顺序表查找算法3.2 顺序表查找优化算法3.2 有序表查找3.3 线性索引查找3.4 二叉排序树3.5 平衡二叉树3.6 多路查找树3.7 散列表查找总结1 查找基本概念查找表:由同一类型的数据元素构成的集合关键字:数据中某个数据项的值;主关键字唯一表示记录;次关键字不唯一表示记录。查找:就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。不存在则出现“空记录”或“空指针”。查原创 2020-06-16 15:32:26 · 1591 阅读 · 0 评论 -
常见排序算法实现(c++)
常见排序算法实现(c++)1 排序基本概念1.1 排序的稳定性1.2 内排序和外排序1.3 复杂度分析2 代码实现2.1 冒泡排序2.11 最简单排序(不满足两两比较相邻记录)2.2 冒泡排序法2.3 冒泡排序法优化2.2 简单选择排序2.3 直接插入排序2.4 希尔排序2.5 堆排序2.6 归并排序2.7 快速排序总结1 排序基本概念假设含有n个记录的序列为r1,r2,...,rnr_1,r_2,...,r_nr1,r2,...,rn,其相应的关键字分别为k1,k2,...,knk_1,k_2原创 2020-06-16 14:25:11 · 379 阅读 · 0 评论 -
大话数据结构(五)字符匹配算法C++实现(朴素、KMP等)
这里写目录标题1 朴素的模式匹配算法1.1 原理1.2 时间复杂度1.3 c++代码实现1 朴素的模式匹配算法1.1 原理串的模式匹配:子串的定位操作。算法思想假设从主串S = “goodgoogle”中找T = “google”这个子串的位置。要按以下步骤:(竖线表示相同,折线表示不同)简单地说,就是对主串的每一个字符作为子串开头,与要匹配的字符串进行匹配。此过程中,对主串做大循环,每个字符开头做T的长度的小循环,直到匹配成功或全部遍历完成为止。假设主串S和匹配的子串T的长度存在S[0原创 2020-06-12 10:34:08 · 464 阅读 · 0 评论 -
大话数据结构(五)串(朴素的模式匹配算法、KMP模式匹配算法)
数据结构——串串1 串的比较2 串的抽象数据类型3串的存储结构3.1 串的顺序存储结构3.2 串的链式存储结构4 朴素的模式匹配算法5 KMP模式匹配算法6 KMP改进串串是由零个或多个字符组成的有限序列,又名叫字符串1 串的比较给定两个串,s=′′a1a2.....an′′,t=′′b1b2....bm′′s =''a_1a_2.....a_n'',t=''b_1b_2....b_m''s=′′a1a2.....an′′,t=′′b1b2....bm′′,当满足以下条件之一时,s<原创 2020-06-12 10:15:11 · 368 阅读 · 0 评论 -
中缀表达式转后缀表达式
中缀表达式与后缀表达式转换中缀转后缀后缀转中缀中缀转后缀举个例子,一个式子:(5+20+1∗3)/14(5+20+1∗3)/14(5+20+1∗3)/14如何把该式子转换成后缀表达式呢?其实就是分三步:1、按运算符优先级对所有运算符和它的运算数加括号,(原本的括号不用加)2、把运算符移到对应的括号后3、去掉括号具体实现为:1、$(((5+20)+(1∗3))/14) $2、$(((520)+(13)∗)+14)/ $3、520+13∗+14/520+13∗+14/520+13∗+14/原创 2020-06-11 16:29:25 · 105 阅读 · 0 评论 -
大话数据结构读书笔记《2算法》
大话数据结构2 算法2.1 算法定义:2.2 算法的特性2.3 算法设计的要求2.4 算法度量方式2.5 算法复杂度2.6 常见时间复杂度:2.7 最坏情况与平均情况2.8 算法空间复杂度2 算法2.1 算法定义:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。2.2 算法的特性算法具有五个基本特性:输入:有0或多个输入输出:至少一个或多输出有穷性:在执行有限步骤后,自动结束不会出现无限循环确定性:每一步骤都有明确含义,不会出现二义性可原创 2020-06-11 10:02:57 · 316 阅读 · 0 评论 -
大话数据结构读书笔记《1数据结构绪论》
大话数据结构1 引言1.1 起源1.2 基本概念和术语1.3 逻辑结构与物理结构(存储结构)1.4 抽象数据类型1 引言1.1 起源数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间关系和操作等相关问题的学科。1.2 基本概念和术语数据:是描述客观事物的符号,是计算机中可以操作的对象,是计算机中可以操作的对此,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称之为记录数据项:一个数据元素可以由原创 2020-06-11 09:08:30 · 257 阅读 · 0 评论