数据结构
文章平均质量分 58
z向前
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 12. 矩阵中的路径
题目描述:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。题目链接例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S.原创 2021-04-16 17:22:11 · 422 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题目链接例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7二叉树的遍历及实现参考前序遍历性质: 节点按照 [ 根节点 | 左子树 | 右子.原创 2021-04-16 11:15:48 · 114 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )题目链接示例 1:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“原创 2021-04-06 11:32:45 · 112 阅读 · 0 评论 -
剑指offer 06. 从头到尾打印链表 C++
剑指offer 06. 从头到尾打印链表题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。题目链接输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]方法一: 遍历链表, 元素存放在数组中, 最后倒转数组vector<int> reversePrint(ListNode* head) { // 方法一: 遍历链表, 元素存放在数组中, 最后倒转数组.原创 2021-04-06 10:58:08 · 215 阅读 · 0 评论 -
剑指offer 05. 替换空格 C++
剑指offer 05. 替换空格题目链接请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”方法一: 双指针原地修改 string replaceSpace(string s) { // 解法一: 双指针原地修改--------------------------------- int count = 0; i.原创 2021-04-06 10:49:05 · 90 阅读 · 0 评论 -
总结学习二叉树4-二叉树的遍历
二叉树链式结构的遍历遍历(Traversal) 是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。树结点结构代码:template<class T>struct BTNode { BTNode(T data = T()) : _data(data), _lchild(nullptr), _rchild(nullptr) {} BTNode<原创 2021-03-21 16:49:10 · 1264 阅读 · 5 评论 -
总结学习二叉树3-二叉树基本概念
上一篇:树的三种表示方法二叉树特点:二叉树是树的特殊一种 (树的概念参考)每个节点最多有两颗子树,结点的度最大为2.左子树和右子树是有顺序的,次序不能颠倒.即使某个结点只有一个子树,也要区分左右子树.特殊的二叉树及特点:斜树:所有结点都只有左子树(左斜树)或右结点(右斜树)满二叉树:所有分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层上.叶子只能出现在最下一层.非叶子结点度一定是2.在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多.原创 2021-03-13 12:05:45 · 238 阅读 · 0 评论 -
总结学习二叉树2-树的三种表示方法
树的表示树有很多表示方式,如:双亲表示法 取一块连续的内存空间,在存储每个结点的同时,各自都附加一个记录其父结点位置的变量。需要在树结构中频繁地查找某结点的父结点时,使用双亲表示法比较合适.代码表示:#define nodeNum 50typedef struct PNode{ int _data; //树中结点的数据类型 int _parent; //结点的父结点在数组中的位置下标}PNode;typedef struct { PNode _node[原创 2021-03-13 10:50:40 · 2097 阅读 · 0 评论 -
总结学习二叉树1-树的基本概念
二叉树的相关知识之前比较零碎的学习了一遍, 时间久了,对很多细节遗忘比较严重, 所以,详细总结一遍.1. 树1.1 树的概念 结点 数据结构的基础, 是构成复制数据结构的基本单位. 树是一种非线性的数据结构,它是由n(n>0)个有限节点组成的具有层次结构的数据集合.叫做树是因为看起来像一颗倒挂的树(根朝上,叶朝下).当结点个数n 为0时, 称为 空(NULL)树.任意一颗非空树具有以下特点:1.2....原创 2021-03-13 10:24:45 · 182 阅读 · 0 评论 -
C++实现string类
利用深拷贝和深赋值实现实现string类的接口在win64 VS2019环境 使用 strcpy函数,报错----使用宏#define _CRT_SECURE_NO_WARNINGS 避免简单测试时报错#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class Mystring{public: Mystring(const char* str = nullptr); ~Mystring原创 2021-02-05 22:55:12 · 155 阅读 · 0 评论 -
C/C++内存管理总结
C/C++内存管理1. C/C++内存分布1.1堆和栈有哪些不同2. C/C++动态内存管理方式2.1 C语言动态内存管理函数2.1.1 malloc2.1.2 calloc2.1.3 reallocmalloc、calloc、relloc区别2.2 C++动态内存管理方式2.2.1 new/delete2.2.2 operator new / operator delete2.2.3 new / delete 原理1. C/C++内存分布C/C++ 程序中内存区域划分:操作系统的核心是内核(ker原创 2021-02-04 18:37:44 · 383 阅读 · 0 评论 -
进程间通信(IPC)2_共享内存_消息队列
进程间通信?因为每一个进程都有一个虚拟地址空间, 保证了进程的独立性, 但也正是因此导致进程间无法通信. 所以需要操作系统提供进程间通信方式, 又因为通信的场景不同, 所以提供了多种不同的进程间通信方式进程间通信的目的数据传输资源共享进程控制通知事件进程间通信方式:System V 标准的进程间通信方式:管道: 用于进程间的数据传输共享内存: 用于进程间的数据共享消息队列: 用于进程间的数据传输关于管道的相关知识和代码可以参考这篇文章共享内存顾名思义, 共享内存就是进程都能访问到原创 2021-01-17 13:46:17 · 267 阅读 · 0 评论 -
红黑树详细实现及性能分析
红黑树的提出:之前我们介绍了二叉搜索树, 理想情况下二叉搜索树的性能不错, 但是在极端情况下(数据有序, 或者接近有序)二叉搜索树会退化为单支树, 从而导致其操作效率很低, 时间复杂度为O(N), 于是俄罗斯数学家提出了平衡二叉搜索树,又称为AVL树. AVL树引入了平衡因子,保证了树的平衡, 从而避免了二叉搜索树会退化为单支树的情况, 进而使得AVL操作时间复杂度为log(N), 但是AVL的应用却比较少, 因为AVL的维护,成本太高,对AVL树进行插入或者删除时, 需要不停地通过左旋,右旋操作来维持其原创 2020-05-24 18:34:36 · 1114 阅读 · 0 评论 -
AVL树实现及其性能分析
AVL树的提出:二叉搜索树虽然可以缩短查找的效率, 但如果数据有序, 或者接近有序, 二叉搜索树将退化为单支树, 查找元素相当于在顺序表中搜索元素, 效率低下.二叉搜索树实现及其性能分析由此,1962年G.M.Adelson-Velskii和E.M.Landis两位俄罗斯数学家提出平衡二叉搜索树的方法: 当向二叉搜索树中插入新结点后, 保证每个结点的左右子树高度之差的绝对值不超过1(超过了则对树的结点进行相应的调整), 即可降低树的高度, 从而减少平均搜索长度.概念:一颗AVL树或者是空树, 或者原创 2020-05-17 17:55:16 · 1674 阅读 · 0 评论 -
【数据结构】链表----1.无头单向非循环链表增删查改实现
链表的概念及结构:链表是一种物理存储结构上非连续,非顺序的存储结构.链表通常由连串的节点组成,每个节点包含数据和一或两个指向前一个和后一个节点的指针(链接).链表的结构形式非常多样(以下3种情况便可组合8种链表结构)单向、双向带头、不带头循环、非循环常用的两种结构:(1)无头单向非循环链表(2)带头双向循环链表其中无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更...原创 2019-07-24 17:07:34 · 139 阅读 · 0 评论 -
【数据结构】链表----2.带头双向循环链表增删查改实现
带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表.结构图如下:代码实现:List.h#pragma once#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <malloc.h>typedef int ...原创 2019-07-25 15:39:22 · 132 阅读 · 0 评论 -
二叉搜索树实现及性能分析
概念:二叉搜索树(Binary Search Tree),(又称:二叉查找树,二叉排序树):它或者是一颗空树,或者是一颗具有以下性质的二叉树:若它的左子树不为空, 则左子树上所有节点的值均小于根节点的值;若它的右子树不为空, 则右子树上所有节点的值均大于根节点的值;它的左右子树也为二叉搜索树;算法实现:二叉搜索树的操作主要有:1. 查找: 递归查找是否存在data.2. 插入:树为空, 直接插入, 返回true树不为空, 按照二叉搜索树的性质查找插入位置, 插入新节点3. 删原创 2020-05-13 10:50:40 · 1900 阅读 · 0 评论