数据结构
文章平均质量分 59
数据结构和算法
hyzhang_
每一个不曾起舞的日子都是对生命的辜负!!!
展开
-
智能指针的使用及其实现原理
- 目录 - 裸指针和智能指针 - 自己实现智能指针 - 不带引用计数的智能指针 - 带引用计数的智能指针 - 智能指针的循环引用(交叉引用)问题 - 多线程共享对象的线程安全问题 - 自定义删除器 - make_shared和make_unique - enable_shared_from_this类和shared_from_this()方法原创 2022-10-12 20:57:33 · 1182 阅读 · 0 评论 -
【图论常见模板题】4种最短路解法和2种最小生成树解法
通过图论模板题可以快速掌握图论知识原创 2022-06-16 22:26:52 · 352 阅读 · 0 评论 -
【C++】第八章:STL之priority_queue的使用和模拟实现
文章目录一、priority_queueu的使用1.priority_queue的介绍2.priority_queue的定义3.priority_queue的常用接口二、priority_queue的模拟实现调整堆算法-shiftUp()-shiftDown()shiftUp()算法shiftDown()算法模拟实现一、priority_queueu的使用1.priority_queue的介绍优先队列是一种容器适配器,默认情况下STL(头文件是<queue>)中使用vector作为其底层的原创 2021-09-18 22:52:29 · 735 阅读 · 6 评论 -
二叉树的4种遍历方式(递归)(非递归)
非递归实现二叉树的遍历方式任何的递归函数都可以改成非递归的方式,因为递归函数在系统中是通过将一个一个函数压栈的方式实现的,所以我们也可以用栈来实现这一过程递归遍历递归实现前中后序的遍历比较简单,我就直接上代码了哈// 二叉树前序遍历 void BinaryTreePrevOrder(BTNode* root){ if (root == NULL) return; cout << root->_data << ' '; BinaryTreePrevOrde原创 2021-04-27 20:57:51 · 252 阅读 · 0 评论 -
树,堆(详解)二叉树在持续更新
二叉树的性质:一颗非空二叉树的第i层最多有2i-1个节点深度为h的二叉树最大的节点数为2h - 1对于任何一个二叉树,如果叶子结点为n0,度为2的结点为n2,则n0=n2+1n个结点的满二叉树,深度为log(n + 1)(以上是对任何的二叉树,不一定是对完全二叉树)特殊的二叉树:1.满二叉树每一层的结点都是最大值,如果数的深度为h,则结点的个数为2h - 12.完全二叉树前h - 1层都是满的,最后一层从左到右是连续的// 二叉链struct TreeNode{ int va原创 2021-04-26 16:53:24 · 175 阅读 · 0 评论 -
双向带头循环链表实现
双向带头循环链表的实现其实要注意头结点的创建,要让头结点自己指向自己,否则就不能实现循环了末尾有惊喜双向带头循环链表头文件#pragma once#include <iostream>#include <stdlib.h>#include <assert.h>using namespace std;// 带头+双向+循环链表增删查改实现typedef int LTDataType;typedef struct ListNode{ LTDataTy原创 2021-04-18 21:39:08 · 139 阅读 · 0 评论 -
力扣移除链表元素(剑指offer删除链表结点升级版)
移除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedef struct ListN原创 2021-02-04 23:18:56 · 113 阅读 · 0 评论 -
反转单链表(三种方法)(三指针法)(头插法)(递归)经典面试题
剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL三指针法/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *原创 2021-02-04 22:42:09 · 1326 阅读 · 1 评论 -
单链表(SList)实现(有详细注释)
三个文件还在更新SList.h#pragma once#include <stdio.h>#include <stdlib.h>typedef int SListDataType;typedef struct SListNode{ SListDataType data; struct SListNode* next;}SListNode;//尾部插入void SListPushBack(SListNode** pphead, SListDataTyp原创 2021-02-03 18:41:38 · 1721 阅读 · 0 评论 -
01背包(最经典的dp选择问题)
问题描述给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.输入格式输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。 以后N行每行两个数Wi和Vi,表示物品的重量和价值输出格式输出1行,包含一个整数,表示最大价值。样例输入3 52 33 54 7样例输出8数据规模和约定1<=N<=200,M<=5000.第一种 朴素暴力解法#include <iostream&g原创 2021-01-25 08:59:43 · 298 阅读 · 0 评论 -
单链表结构和顺序表存储结构的优缺点
今天学习了单链表就和顺序表对比做个总结吧存储结构方式顺序表:用一段连续的存储单位依次放置线性表中的元素单链表:采用链式存储,可以将任意的存储单元存放至线性表内时间性能查询元素:顺序表O(1)单链表O(n)插入删除元素顺序表平均移动表长的一半的元素,时间O(n)单链表只要找到第i个元素的所在位置,再插入和删除元素就为O(1)总结:由上可知,单链表优势是插入和删除元素,顺序表优势是查询元素,并且数据越大,优势越明显。如果你要的操作是频繁的查询元素,最好采用顺序表,如果要原创 2021-01-12 15:48:52 · 2093 阅读 · 0 评论