爱上小公举

私信 关注
爱上小公举
码龄3年

希望明天的我 仍然对不同充满宽容 继续对未知饱含敬畏

  • 535,682
    被访问量
  • 233
    原创文章
  • 6,795
    作者排名
  • 274
    粉丝数量
  • 于 2017-11-15 加入CSDN
获得成就
  • 获得1,043次点赞
  • 内容获得159次评论
  • 获得1,518次收藏
荣誉勋章
兴趣领域
  • #后端
    #C/C++#Linux
TA的专栏
  • 网络基础
    7篇
  • C++
    24篇
  • C语言
    13篇
  • Linux
    34篇
  • Android
  • Java
  • STL
    6篇
  • 项目 RSA文件加密工具
    1篇
  • 数据结构与算法
    10篇
  • 刷题
    21篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

网络基础 -- 数据链路层(以太网协议/ARP协议)

数据链路层MAC地址以太网以太网的帧格式ARP协议 --地址解析协议ARP数据报的格式 RARP协议
原创
322阅读
1评论
5点赞
发布博客于 10 月前

网络基础 -- 网络层(IP协议)

网络层IP协议IP报文格式(IPv4)网段划分(地址管理)CIDR特殊的IP地址IP地址的数量限制私有IP地址和公网IP地址路由选择ICMP协议
原创
733阅读
1评论
7点赞
发布博客于 10 月前

网络基础 -- 保证TCP协议可靠传输和提高性能的机制

保证TCP可靠传输的机制1. 面向连接2. 包序管理和确认应答3. 超时重传机制4. 滑动窗口机制5. 快速重传机制6. 拥塞窗口7. 保活机制提高传输性能的机制1. 延迟应答机制2. 捎带应答机制
原创
678阅读
0评论
3点赞
发布博客于 10 月前

网络基础 -- 传输层协议(UDP与TCP/三次握手与四次挥手/可靠传输)

端口号UDP协议UDP报文格式UDP的特点协议实现(原理) / 特性对于上层应用层代码编写的影响 (我们用UDP协议时该注意什么?)TCP协议TCP报文格式TCP三次握手与四次挥手close()shutdown()的区别及使用场景三次挥手和四次挥手中的一些问题TCP特点可靠传输
原创
345阅读
1评论
7点赞
发布博客于 10 月前

boost_1_72_0-msvc-14.1-64.exe

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。
exe
发布资源于 10 月前

项目 RSA文件加密工具

传统的加密技术非对称加密RSA加密算法RSA算法原理RSA的E, D, N产生过程RSA加密的安全性RSA算法实现中的问题以及解决办法问题1 : 模反元素的求解问题2: 大数的幂运算问题3: 大数的加/减/乘/除/模运算问题4: 大数产生随机数问题5: 大数产生素(质)数RSA加密算法代码实现
原创
424阅读
4评论
6点赞
发布博客于 1 年前

网络基础 -- 应用层HTTP协议

应用层(TCP/IP协议中的应用层/HTTP协议)HTTP协议URL -- 统一资源定位符UrlEncode / UrlDecodeHTTP协议格式概述HTTP 请求消息Request / 响应消息Response首行请求(Request)首行请求(Request)首行头部正文实现一个简单的HTTP服务器
原创
365阅读
0评论
5点赞
发布博客于 1 年前

Linux 网络编程套接字(socket) (网络字节序/UDP/TCP)

认识TCP协议与UDP协议网络字节序字节序转换接口套接字(socket)sockaddr结构socket通信接口UDP通信流程(客户端)UDP通信流程(服务端)TCP通信流程(服务端)TCP通信流程(客户端)TCP通信中新的接口多进程版本通用服务/客户端封装多线程版通用服务/客户端TCP和UDP的对比TCP与UDP的应用场景
原创
373阅读
0评论
5点赞
发布博客于 1 年前

网络基础(概念/网络协议/OSI七层模型/TCP/IP四(五)层模型)

计算机网络根据网络覆盖范围的范围分类无线网络网络协议协议分层OSI七层模型TCP/IP四(五)层模型数据包封装和分用网络中的地址管理认识IP地址认识MAC地址
原创
328阅读
0评论
5点赞
发布博客于 1 年前

Linux 多线程(线程池/线程安全的单例模式/STL容器线程安全问题/智能指针线程安全问题)

线程池线程安全的单例模式饿汉实现方式和懒汉实现方式STL线程安全的问题智能指针线程安全问题
原创
148阅读
2评论
5点赞
发布博客于 1 年前

Linux 多线程之线程安全(生产者消费者模型/POSIX信号量/读者写者模型/读写锁/自旋锁)

生产者消费者模型基于阻塞队列(BlockingQueue)的生产者消费者模型POSIX信号量POSIX信号量接口信号量实现的环形队列的生产者消费者模型读者写者模型自旋锁读写锁的接口
原创
208阅读
0评论
3点赞
发布博客于 1 年前

Linux 多线程之线程安全(同步与互斥/互斥锁/条件变量/死锁/)

线程安全线程同步与互斥互斥锁(量) 互斥锁接口可重入函数&线程安全死锁条件变量条件变量接口条件变量使用规范为什么pthread_cond_wait()中要传入互斥锁?为什么互斥锁和条件变量要配合使用?
原创
1430阅读
0评论
3点赞
发布博客于 1 年前

Linux 多线程(线程控制(创建/终止/等待/分离))

POSIX线程库创建线程线程ID及进程地址空间布局线程终止线程等待线程分离
原创
344阅读
0评论
5点赞
发布博客于 1 年前

Linux 多线程(线程概念/特点/优缺点/与进程比较)

线程线程间数据的独有与共享(同组线程)线程的优点--("轻"+多任务并发/并行处理的优势(对比于进程))线程的缺点多线程与多进程的比较Linux 多线程(线程控制(创建/终止/等待/分离))
原创
433阅读
0评论
5点赞
发布博客于 1 年前

什么是线程?

什么是线程?说到线程, 离不开的概念就是进程 .也离不开计算机或操作系统的发展过程. 简单的说一下.进程的引入在计算机高度发达的今天, 我们很难想象以前的计算机是什么样的.最初的时候, 计算机只能接受一些特定的指令, 用户输入一个指令, 计算机就做一个操作. 当用户在思考或者输入数据时, 计算机就在等待. 显然这样效率很低下, 因为很多时候,计算机处于等待用户输入的状态 ...
原创
197阅读
1评论
7点赞
发布博客于 1 年前

哈希表(散列表) -- 概念原理以及代码实现

哈希函数1. 闭散列线性探测闭散列的扩容两个小问题闭散列的简单实现2.开散列开散列的增容开散列与闭散列比较有迭代器的开散列实现开散列实现unordered_map哈希的应用
原创
374阅读
0评论
5点赞
发布博客于 1 年前

C++ 关联式容器之unordered_map

说到关联式容器, 需要区分是序列式容器, 例如vector, list, deque等都是序列式容器, 序列式其特点都体现在 "序列"上 .序列式容器中存储元素是线性排布的, 在进行查找搜索时效率较低. 序列式容器并不会对插入元素进行任何方式的重新排序,插入在哪个位置就在哪个位置 .关联式容器, 特点也体现在 "关联"上, 关联式容器通过键值对(包括key和value), 将存储的每一个数据value与一个键值key一一对应起来, 只需要通过键值key就可以读写元素, 在查找搜索时效率高. 关联式容器
原创
360阅读
0评论
4点赞
发布博客于 1 年前

Linux 进程信号(产生/注册/安装/阻塞/销毁/处理)

生命周期(事件发生->注册安装->注销->处理) 信号的产生 硬件产生 软件产生 kill 命令 kill() sigqueue() raise() abort() alarm() setitimer() 信号的注册安装 非可靠信号与可靠信号 信号的注册 信号的安装 signal() sigaction() 信号的阻塞 sigprocmask() 信号的注销和处理 注销 处理 进程响应信号的时机 可重入函数 用户处理信号的时机 信号在防止僵尸进程中的应用
原创
200阅读
1评论
4点赞
发布博客于 2 年前

Linux 进程间通信----共享内存

目录共享内存(Shared Memory)通信原理为什么共享内存通信最快?基本特征/优缺点共享内存的使用共享内存操作流程操作共享内存的函数shmget() shmat() shmdt() shmctl() ftok()共享内存(Shared Memory)是最快(没有之一)的进程间通信方式 .PS : 共享内存并没有提供...
原创
591阅读
0评论
6点赞
发布博客于 2 年前

Linux 管道(匿名管道与命名管道)

管道管道是Unix中最古老古老的进程间通信手段, 人们把从一个进程连接到另一个进程的数据流称为“管道” . Linux中的管道从Unix继承而来 .管道分为匿名管道(pipe)和命名管道(named pipe / FIFO)匿名管道(pipe)匿名管道实际上是由内核管理内核中的一块缓冲区, 是一种半双工通信手段, 通过让不同进程都能访问同一块缓冲区,来实现进程间通...
原创
494阅读
0评论
5点赞
发布博客于 2 年前

Linux 基础IO(系统调用/文件描述符/重定向)

目录Linux 系统 . 文件IOLinux 系统调用与C库函数对比记忆fopen & open fclose & closefwrite & write fread & readfleek & leekstdin &stdout& strerr文件描述符fdstr...
原创
239阅读
0评论
3点赞
发布博客于 2 年前

C++ 智能指针(auto_ptr/unique_ptr/shared_ptr)

目录为什么需要智能指针?智能指针的原理1. RAII特性2. 重载operator* 和opertaor->auto_ptr(已废弃)常用接口auto_ptr总结unique_ptr常用接口unique_ptr总结shared_ptr常用接口shared_ptr原理shared_ptr线程安全的问题shared_ptr循环引用问题循环引用解决方法shared_ptr删除器
原创
204阅读
0评论
4点赞
发布博客于 2 年前

Linux 进程控制(创建/退出/等待/替换)

目录进程创建fork()函数fork返回值fork写时拷贝fork失败原因fork用法进程退出退出场景常见的退出方法正常退出异常退出_exit()系统调用exit()函数_exit()和exit()的区别return进程等待进程等待的必要性进程等待的方法wait()waitpid()参数int* status...
原创
302阅读
0评论
4点赞
发布博客于 2 年前

Linux 进程程序替换

目录进程程序替换 进程替换的原理替换函数exec族函数1. execv(参数格式是数组)2.execl(参数格式是列表)3.execvp / execlp(不带替换程序的路径)4.execle / execve(需要自己设置环境变量)相关博客:进程相关概念:戳链接( ̄︶ ̄)↗https://blog.csdn.net/qq_41071068...
原创
174阅读
2评论
3点赞
发布博客于 2 年前

MP3光标位置

题目描述 :MP3Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下: 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。 光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌...
原创
75阅读
0评论
4点赞
发布博客于 2 年前

Linux 进程

目录操作系统进程进程概念进程的描述--PCBtask_ struct内容分类进程的组织查看进程通过系统调用接口获取进程标志符(进程ID)进程状态进程优先级操作系统引言:在了解进程之前, 先简单了解一下操作系统 .操作系统(OperatingSystem), 简称OS 是配置在计算机硬件上的第一层软件, 是对硬件系统的首次扩充 . 其主要作用是...
原创
97阅读
0评论
1点赞
发布博客于 2 年前

Linux 进程状态(R, S, D, T(t), X, Z)

目录进程状态R-- 运行状态S-- 睡眠状态(可中断睡眠状态)D-- 磁盘休眠状态(不可中断睡眠)T-- 停止状态& t-- (跟踪状态)X-- 死亡状态(退出状态)Z-- 僵死状态&僵尸进程僵尸进程僵尸进程危害如何避免僵尸进程孤儿进程进程状态进程的先描述,再组织戳链接( ̄︶ ̄)↗https://blog.csdn.net/qq...
原创
222阅读
0评论
2点赞
发布博客于 2 年前

Linux 进程优先级

进程优先级由于系统中进程数量众多, 而CPU资源却较少, 甚至只有一个, 而进程之间需要竞争来使用CPU . 这时让一个比较重要, 需要优先执行的进程去和众多的其他进程去竞争, 显然是不合理的. 就像感冒患者和有生命危险的患者抢床位一样的不合理. 此时为了更合理的分配CPU资源, 就有了进程优先级优先级高的进程有优先执行的权利.此外, 优先级还影响分配给进程的时间片长短...
原创
221阅读
0评论
1点赞
发布博客于 2 年前

Linux 进程等待

目录进程等待进程等待的必要性进程等待的方法wait()waitpid()参数int* status进程等待 谁要等待? 等待什么? 为什么要等待 ?首先要知道进程终止或退出的时候会发生什么, 进程退出时会关闭...
原创
91阅读
0评论
2点赞
发布博客于 2 年前

Linux 进程的退出

目录进程退出退出场景常见的退出方法正常退出异常退出_exit()系统调用exit()函数_exit()和exit()的区别return进程退出退出场景正常符合预期退出 正常不符合预期退出 异常退出(执行过程中异常奔溃, 还未执行完)常见的退出方法正常退出main函数返回 ( return ) 调用 exit( int status ...
原创
80阅读
0评论
1点赞
发布博客于 2 年前

Linux 进程的创建

目录进程创建fork()函数fork返回值fork写时拷贝fork失败原因fork用法进程创建Linux 中我们可以说一个进程就是一个PCB, 即 一个task_struct, 那么创建进程也就是创建PCB, 即是创建task_structLinux 中说到进程创建, 就不得不提到 fork()函数. fork()在Lnux下是非常重要的一个函数 ....
原创
89阅读
0评论
4点赞
发布博客于 2 年前

Shell ? bash?

Shellshelln. (蛋、坚果、某些种子和某些动物的)壳;壳状物;炮弹v. 炮击; 给…去壳shell在排序算法中是希尔排序, 不过接下来要说的是它的另一个意思 " 壳 "计算机发展到现在, 用户与计算机交互的方式还是大致两种, 图形界面 和 命令行简单来说, 对于图形界面,用户点击某个图标就能启动某个程序对于命令行,用户输入某个程序的名字(可以看做一个命...
原创
79阅读
0评论
3点赞
发布博客于 2 年前

C++ 使用delete释放new[N]的问题

了解过C++的语法知识, 就应该知道, new 申请的空间用 delete 释放, new [] 申请的连续空间用delete [] 释放, 这样肯定是没什么问题, 是正确的. 但当我们不遵循规则时会怎样呢?虽然在我们自己在开发过程肯定不会主动地乱用, 但保不齐哪天delete后面多写或少写个[], 如果了解过的话, 出bug了我们可以快速定位目录1.new [] 申请的空间用 ...
原创
561阅读
2评论
7点赞
发布博客于 2 年前

最近公共祖先

语言: C++题目描述 :有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:输入2 3返回 1给定接口class LCA {pub...
原创
77阅读
0评论
3点赞
发布博客于 2 年前

Linux 源码安装, rpm和yum三种安装方式

目录原码安装rpmyumLinux中安装软件可不像Windows那样只需要我同意xxx, 我接受xxx, 然后一直下一步就ok了Linux中主要有三种安装方式: 源码安装, rpm和yum注: 本文测试于Centos 7中注: 当不是root用户进行安装/卸载/升级操作时, 会提示权限不够, 我们只需在命令前面加上 sudo 获取到root的权限(会提示输入r...
原创
482阅读
0评论
3点赞
发布博客于 2 年前

计算n x m的棋盘格子, 沿着各自边缘线从左上角走到右下角,总共有多少种走法. 要求不能走回头路,即:只能往右和往下走,不能往左和往上走。

语言C++题目 :[编程题]201301 JAVA 题目2-3级题目描述 :请编写一个函数(允许增加子函数),计算nxm的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。输入描述:输入两个正整数输出描述:返回结果示例: 输入...
原创
1192阅读
0评论
4点赞
发布博客于 2 年前

翻转二叉树以匹配先序遍历

语言: C++题目描述 :给定一个有 N 个节点的二叉树,每个节点都有一个不同于其他节点且处于 {1, ..., N} 中的值。通过交换节点的左子节点和右子节点,可以翻转该二叉树中的节点。考虑从根节点开始的先序遍历报告的 N 值序列。将这一 N 值序列称为树的行程。(回想一下,节点的先序遍历意味着我们报告当前节点的值,然后先序遍历左子节点,再先序遍历右子节点。)我们的目标...
原创
112阅读
0评论
3点赞
发布博客于 2 年前

C/C++ const修饰指针变量的三种情况

在C/C++中, const修饰指针变量, 有三种情况, 以 int* 为例, 三是以下种情况原则: const修饰谁, 谁就不能被修改, 否则编译出错第一种和第二种: constint* p; 和 int const * p;这两种情况是相同的, 这两种情况变量p的类型是const int* 型, 此时const修饰的就是p所指向的内容, 也就是说p解引用之后的值不能被...
原创
163阅读
0评论
5点赞
发布博客于 2 年前

Linux 调试器gdb命令及TUI模式

gdbgdb是Unix及类Unix下的调试工具。在Windows下, 我们习惯用了有图形界面的,像VC, VS, BCB等IDE的调试,但如果是在Unix或类Unix平台下开发, gdb是我们的首选 .背景我们编写的程序可以有两种版本, Debug版本和Release版本, Linux中gcc/g++编译器默认是Release版本, Debug版本要在编译时后面加上-g...
原创
527阅读
0评论
3点赞
发布博客于 2 年前

C++ 重载, 重定义, 重写

先来看看定义重载 : C++允许同一作用域中有同名函数, 这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同(返回值类型无要求),在处理实现功能类似数据类型不同的问题上保证了接口的统一性重写 : 也叫覆盖. 在继承关系中, 派生类中有跟基类完全相同(返回值类型、函数名字、参数列表完全相同) 的虚函数,称派生类的虚函数重写了基类的虚函数(注意: 重写有两个函数名不同...
原创
142阅读
0评论
4点赞
发布博客于 2 年前

C++ 虚表 & 多态的实现原理

目录虚函数指针(_vfptr) 和 虚函数表(vftable) 虚函数指针和虚表是什么继承中的虚表单继承中的虚表多继承中的虚表多态的原理小结相关博客: 1. 关于C++继承的博客戳链接( ̄︶ ̄)↗https://blog.csdn.net/qq_41071068/article/details/1028684772. 关于C++多态的博客...
原创
1554阅读
12评论
33点赞
发布博客于 2 年前

C++ 多态

目录多态多态的实现C++中多态的构成条件虚函数虚函数的重写虚函数重写的两个例外C++11 override 和 final抽象类纯虚函数接口继承和实现继承虚表&多态的原理小结前言C++三大特性: 封装, 继承, 多态也是面向对象的三大特性说明 : 本文程序都是在vs2017下的x86下调试运行多态面向对象语言中,接...
原创
142阅读
0评论
4点赞
发布博客于 2 年前

Linux中 git的使用

目录使用1. 不保存用户名和密码2.多个用户提交并保存用户名和密码一个有趣的故事题目 : Git-----一个大佬的随手之作很久很久以前, 也就是1991, 好像也不久, Linux之父Linus创建了Linux, 并将其开源, 至此, Linux至今在服务器端占据将近90%的市场, 在移动端, 全球市场份额最多Android内核也是Linux, 如今鸿蒙(Harmony...
原创
574阅读
0评论
2点赞
发布博客于 2 年前

C++ 继承

继承方式基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数继承与友元继承与静态成员菱形继承与虚拟继承虚拟继承虚拟继承解决数据冗余和二义性的原理继承和组合小结前言C++三大特性: 封装, 继承, 多态也是面向对象的三大特性说明 : 本文程序都是在vs2017下的x86下调试运
原创
215阅读
0评论
4点赞
发布博客于 2 年前

Linux 编译器--gcc

目录从代码到可执行程序1. 预处理 2.编译 3. 汇编 4. 链接编译器gccgcc 命令集说到编译器, 就不得不说一个程序从代码到可执行的过程了从代码到可执行程序我们的源代码到一个可执行程序可不是一步到位, 需要以下几个步骤:预处理 --> 编译 --> 汇编 --> 链接1. 预处理对源代码进行宏替...
原创
185阅读
0评论
4点赞
发布博客于 2 年前

程序猿有个程序媛女朋友??会怎么样?

发布Blink于 2 年前

Linux 编辑器--vim的使用及分屏模式

目录vim的使用命令模式 输入模式 底行模式命令模式指令集进入插入模式 光标移动 删除 复制撤销 替换 更改 跳至指定的行底行模式命令集分屏模式打开方法 shell中打开 vim中创建分屏切换分屏 关闭分屏 分屏调节小结vim是什么所有的类Unix系统(如Linux)...
原创
248阅读
0评论
3点赞
发布博客于 2 年前

Linux与Windows机器之间传输文件(lrzsz与Xftp)

Linux机器与Windows机器传输文件(lrzsz与Xftp)目录lrzszXftplrzszlrzsz这个工具用于 windows 机器和Linux 机器通过 XShell 传输文件.lrzsz安装 , 需要用到包管理器yum, 具体命令: sudo yum -y install lrzsz, 接下来需要输入root用户的密码使用 : 安装在Linux中, 需...
原创
387阅读
0评论
2点赞
发布博客于 2 年前

Linux 软件包管理器yum

目录什么是软件包和软件包管理器查看软件包yum 安装/更新软件yum 卸载软件什么是软件包和软件包管理器yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.在智能手机中, 我们安装程序都是在应用商店或者网上下一个App安装包, 下载后安装就能用, ...
原创
158阅读
0评论
2点赞
发布博客于 2 年前

C++篇 C/C++中的内存区域&new/delete

目录C++程序内存区域划分​C动态内存管理方式C++动态内存管理方式 new delete 1. new 和 delete用法 2. operator new与operator delete函数 3.new 和 delete 的实现原理 定位new表达式(placement-new) ...
原创
185阅读
4评论
3点赞
发布博客于 2 年前

C++ 模板扩展(非类型模板参数和模板特化)

目录非类型模板参数​模板的特化函数模板特化类模板特化: 全特化 ​偏特化模板的分离编译模板基础非类型模板参数在我们平时使用模板时, 非类型模板参数用的较少一些, 其实在模板参数可以分为两种 :类型参数 : 在关键字class 或者typename 之后的类型名称 例如 int , char, string , 也可以是自己实现的自定义类型非类...
原创
211阅读
0评论
3点赞
发布博客于 2 年前

Linux 权限相关总结(用户&权限管理&权限设置方法)

目录Linux 中的用户su指令Linux 权限管理1. 文件访问者的分类(对于用户来说) 2.文件类型和访问权限(对于文件或目录来说) 1). 文件类型 2). 其中 r , w, x, - 具体含义 文件权限值的表示方法粘滞位文件访问权限的相关设置方法 ...
原创
598阅读
0评论
4点赞
发布博客于 2 年前

最小栈(最大栈)

最小栈最大栈与最小栈实现思路一模一样, 就连代码也只需要将<=改为>=号, 所以就只写个最小栈, 绝对不是因为最大栈LeetCode要会员题目描述 :设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() --...
原创
338阅读
0评论
3点赞
发布博客于 2 年前

二叉树的层次遍历

二叉树的层次遍历题目描述 :给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]来源:力扣(LeetCode)...
原创
56阅读
0评论
3点赞
发布博客于 2 年前

二叉树的后序遍历(非递归)

二叉树的后序遍历题目描述 :后序遍历(Postorder Traversal)——访问根结点的操作发生在遍历其左右子树之后。给定一个二叉树,返回它的 后序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [3,2,1]来源:力扣(LeetCode)OJ链接相关:二叉树的前序遍历(非递归)二叉树的...
原创
42阅读
0评论
3点赞
发布博客于 2 年前

二叉树的中序遍历(非递归)

二叉树的中序遍历题目描述:中序遍历(Inorder Traversal)——访问根结点的操作发生在遍历其左右子树之中(间)。给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]来源:力扣(LeetCode)OJ链接相关:二叉树的前序遍历(非递归)二叉树的后序遍历...
原创
58阅读
0评论
3点赞
发布博客于 2 年前

二叉树的前序遍历(非递归)

二叉树的前序遍历题目描述 :给定一个二叉树,返回它的前序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,2,3]来源:力扣(LeetCode)OJ链接相关:二叉树的中序遍历(非递归)二叉树的后序遍历(非递归)二叉树的层序遍历(非递归)分析:非递归前序遍历只需要将右孩子入栈, 遍历...
原创
169阅读
0评论
3点赞
发布博客于 2 年前

C++实现一个只能在堆(栈)上生成对象的类

目录只能在堆上生成对象的类只能在栈上生成对象的类在C++中,类的对象创建可以静态创建在栈区, 如A a;还可以动态创建在堆区,如A* ptr=new A;这两种方式是不同的, 具体来静态建立一个类的对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象...
原创
385阅读
0评论
6点赞
发布博客于 2 年前

反转字符串二, 给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转...

反转字符串二题目描述:给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"来源:力扣(LeetCode)OJ链接...
原创
287阅读
0评论
3点赞
发布博客于 2 年前

反转字符串

反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e",...
原创
46阅读
0评论
3点赞
发布博客于 2 年前

验证回文串

验证回文串题目描述:给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)OJ链接分析:最简单的...
原创
58阅读
0评论
2点赞
发布博客于 2 年前

在每个树行中找最大值

在每个树行中找最大值题目描述:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。需要在二叉树的每一行中找到最大的值。示例:输入: 1 / \ 3 2 / \ \ 5 3 9输出: [1, 3, 9]...
原创
80阅读
0评论
2点赞
发布博客于 2 年前

字符串中的第一个唯一字符

字符串中的第一个唯一字符题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.来源:力扣(LeetCode)OJ链接分析 :字符型变量只有256个, 因为char型变量只有1字节, 所以, 可以创建一个256个元素的标记数组,...
原创
37阅读
0评论
2点赞
发布博客于 2 年前

字符串相加

字符串相加要求:给定两个字符串形式的非负整数num1 和num2,计算它们的和。注意:num1 和num2的长度都小于 5100.num1 和num2 都只包含数字0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。来源:力扣(LeetCode)OJ链接分析:这道题好在...
原创
70阅读
0评论
2点赞
发布博客于 2 年前

把字符串转换成整数

把字符串转换成整数分析:思路: 字符串从后往前遍历, 遇到不是数字的字符则跳出返回0(除非遇到的是第一个代表正负的字符), 遇到数字字符则相加, 每次都加到数字的最高位, 值得注意的是, 不能超过int的范围, 超过范围也返回0, int的范围是 -2147483648 ~2147483647Oj链接class Solution {public: int St...
原创
46阅读
0评论
2点赞
发布博客于 2 年前

根据输入的日期,计算是这一年的第几天

根据输入的日期,计算是这一年的第几天分析:思路比较简单, 从这一年的开始一直加到这一天, 注意闰年二月是29天OJ链接#include<iostream>using namespace std;class Solution {public:int fun(int year, int month, int day) { int Month1[12] ...
原创
651阅读
0评论
3点赞
发布博客于 2 年前

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)分析:不能用乘除法, 就只能用加减法, 位运算, 逻辑运算不能用for、while、if、else、switch、case及条件判断语句, 意味着不能用循环, 不能有判断1加到n如不用循环的话很明显应该要用递归, 但递归跳出条件也需要判断,...
原创
81阅读
0评论
2点赞
发布博客于 2 年前

C++ priority_queue (STL容器适配器)

优先队列priority_queue是一个堆1. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。但容器必须可以通过随机访问迭代器访问,并支持以下操作:empty():检测容器是否为空size():返回容器中有效元素个数front():返回容器中第一个元素的引用push_back():在容器尾部插入元素pop_back():删除容器尾部元素2. 标准容器类vector和deque满足这些需求。默认情况下,如果没有为特定的priority_queue类实例化
原创
222阅读
0评论
4点赞
发布博客于 2 年前

C++ queue (STL容器适配器)

1. 队列是一种容器适配器,专门用于在(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用push_back:在队
原创
206阅读
0评论
3点赞
发布博客于 2 年前

C++ stack (STL容器适配器)

目录适配器stackstack的使用stack模拟实现适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),适配器是将一个类的接口转换成客户希望的另外一个接口。举个栗子, 咱们香港的插头和我们内地是不一的, 如下图, 这种插头在咱们内地是不方便使用的, 要是香港同胞到对岸深圳转一转, 被繁华的深圳所吸引, 不禁多留...
原创
194阅读
0评论
3点赞
发布博客于 2 年前

C++STL容器之list和常用接口的实现

目录1. vector的常用接口2. list常用接口实现简介1. list这个容器的底层是双向带头循环结构实现的2. list每个不支持随机访问(所以就没有[]重载, 迭代器也不能进行加减运算, 只能++和--), 访问元素O(n)的时间复杂度(不如vector, vector可以随机访问, 复杂度为O(1))3. list在任何位置插入或删除都很快, 都是O(1)的复杂度...
原创
363阅读
0评论
2点赞
发布博客于 2 年前

Linux文件目录类常用命令

Linux文件目录类常用命令目录 常见Linux命令的格式1.浏览目录命令: ls pwdls pwd2.目录操作命令: cd mkdir rmdircd mkdir3.浏览文件命令: cat more less head tailcat more less head tail 区别...
原创
189阅读
0评论
3点赞
发布博客于 2 年前

VMware NAT模式不能获取主机IP的解决办法

解决这个问题的办法是, 在控制面板中找到服务, 找到VMware DHCP Service 与 VMware NAT Service 分别右键点击, 选择属性打开, 将启动类型设置为自动(可能本来就已经是自动, 但还是没有自己启动, 这种就需要我们自己手动启动)
原创
611阅读
0评论
3点赞
发布博客于 2 年前

VMware Workstation cannot connect to the virtual machine.Make sure you have rights to run the......

VMware 中虚拟机启动时错误VMware Workstation cannot connect to the virtual machine. Make sure you have rights to run the program, access all directories the program uses, and access all directories for temp...
原创
536阅读
0评论
2点赞
发布博客于 2 年前

C++ STL容器之vector和常用接口的实现

目录vector的常用接口vector常用接口实现简介1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质上来说,vector使用动态分配数组来存储它的元素。当新元素...
原创
420阅读
0评论
4点赞
发布博客于 2 年前

C++ string类和常用接口的实现

目录 C++ string类string类的常用接口说明 string类(实现常用接口)C++ string类值得注意的是 , string不是STL的容器,string是basic_string类模板的一个实例,string是一个模板类, 它使用char来实例basic_string,string集成的操作函数与ST...
原创
515阅读
0评论
6点赞
发布博客于 2 年前

C++ 模板基础

目录 泛型编程 模板函数模板与模板函数类模板模板扩展泛型编程如何实现一个通用的交换函数呢 ?#include<iostream>using namespace std;void Swap(int& a, int& b) { a = a ^ b; b = a ^ ...
原创
97阅读
2评论
4点赞
发布博客于 2 年前

C++ Date类运算符重载

C++ Date类运算符重载+=, -=, -(两日期相减), -(日期-天数), +, ++(前置), ++(后置), --(前置), --(后置), =, <<, >>, <, >, <=, >=, !=, ==值得注意的是, 闰年并不是4年一闰, 我们通常习惯理解为4年一闰闰年判断条件(year % 400 == 0 || ...
原创
246阅读
0评论
4点赞
发布博客于 2 年前

C语言中static和extern

static关键字与extern关键字C中的关键字extern是用来做变量声明的,声明extern关键字的全局变量和全局函数可以使得它们的作用域得到扩展, 全局变量和全局函数默认是extern所以声明时我们一般不写C中的关键字static主要用于修饰普通变量和函数(C++中则主要修饰类的成员变量和函数)不管在C还是C++中static静态变量都存储在静态区(全局区)exter...
原创
471阅读
0评论
3点赞
发布博客于 2 年前

C++类与对象(下)

目录 C++类与对象(上)C++类与对象(中)static成员C++11 的成员初始化新方法explicit关键字友元内部类再次理解封装static成员我们不妨回忆一下C中的static用法C语言中static用法(点击跳转)声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的...
原创
138阅读
0评论
4点赞
发布博客于 2 年前

C++ 类与对象(中)

目录 C++类与对象(上)类的6个默认成员函数一.构造函数二.析构函数三.拷贝构造函数四.赋值运算符重载五,六.取地址及const取地址操作符重载C++ 类与对象(下)类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。一.构造函...
原创
158阅读
0评论
4点赞
发布博客于 2 年前

C++ 类与对象(上)

目录 认识类与对象类的引入类的定义类的访问限定符及封装类的作用域类的实例化类对象模型this指针C++ 类与对象(中) C++ 类与对象(下)认识类与对象C语言是面向过程的,关注的是过程(过程中的数据(变量)和方法(函数)),分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象(对...
原创
164阅读
2评论
3点赞
发布博客于 2 年前

C++初阶 入门

目录C++关键字(C++98)命名空间C++输入输出缺省参数函数重载引用内联函数auto关键字(C++11)基于范围的for循环(C++11)指针空值nullptr(C++11)C++类与对象(上)C++类与对象(中)C++(98) :1998年,C++的ANSI/IS0标准被投入使用。通常,这个版本的C++被认为是标准C++。所有的主流...
原创
107阅读
0评论
4点赞
发布博客于 2 年前

C++给定一个日期, 计算n天之后的日期

设计一个日期类,包含以下功能:1、只能通过传入年月日初始化。2、可以加上一个数字n,返回一个该日期后推n天之后的日期。值得注意的是, 闰年并不是4年一闰, 我们通常习惯理解为4年一闰闰年判断条件(year % 400 == 0 || (year % 4 == 0 && year % 100)), 可以看到, 当年份是4的倍数, 但可以被100整除, 且不能被40...
原创
2834阅读
0评论
4点赞
发布博客于 2 年前

C++计算订单价格

某老板想要一个能快速计算订单价格的程序,请你帮他设计一个类:1、这个类里需要原价和数量,原价从一个数组中读出即可(自行定义数组),数量需要初始化。2、老板会不定期调整价格,调整的方式是通过调整一个价格系数,这个系数乘以原价即为最终价格,这个折扣会影响到所有产品。Orders.h#pragma once#include<iostream>using names...
原创
600阅读
0评论
1点赞
发布博客于 2 年前

1、随机生成18张扑克牌,当做一个玩家的手牌。  2、用54张不同的扑克牌构成牌堆,发给3个玩家。

1.声明一个扑克牌类,拥有方法:传入花色和点数生成扑克牌、打印扑克牌。2、声明一个玩家类,每人拥有18张扑克牌。拥有方法:增加手牌(摸牌)、展示手牌,其中展示手牌要求降序排序展示。完成程序:1、随机生成18张扑克牌,当做一个玩家的手牌。2、用54张不同的扑克牌构成牌堆,发给3个玩家。在class.h中声明类:#pragma once#include<io...
原创
697阅读
0评论
1点赞
发布博客于 2 年前

用函数重载的方式编写程序,统计出一个以上述结构为基准的结构体数组中1、名字为X的出现了多少次 2、年龄为X的出现了多少次 3、班级为X的出现了多少次 4、性别的X的出现了多少次

使用范围for,通过输入为一个数组赋值有以下结构:struct student{char name[32];int age;int class;bool sex;};写出函数,用函数重载的方式编写程序,统计出一个以上述结构为基准的结构体数组中:1、名字为X的出现了多少次2、年龄为X的出现了多少次3、班级为X的出现了多少次4、性别的X的出现了多少次...
原创
66阅读
0评论
3点赞
发布博客于 2 年前

归并排序(C实现)

归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并操作的工作原理如下:第一步:申请空间,使其大小为待排序数列排序,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起...
原创
98阅读
0评论
4点赞
发布博客于 2 年前

将一个数字通过指定进制按位逆序(直接覆盖原数)void sysReverse(int &, int );

将一个数字通过指定进制按位逆序(直接覆盖原数)#include<iostream>using namespace std;//将一个数字通过指定进制按位逆序(直接覆盖原数)void sysReverse(int &num, int n) { int tmp = 0; while (num) { tmp += num % n; num /= n; ...
原创
89阅读
0评论
1点赞
发布博客于 2 年前

将一个字符串转换为数字,返回值用来校验转换是否成功 bool strtoi(const char *, int &)

将一个字符串转换为数字,返回值用来校验转换是否成功 bool strtoi(const char *, int &)#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;//将一个字符串转换为数字,返回值用来校验转换是否成功bool strtoi(const char*...
原创
174阅读
0评论
1点赞
发布博客于 2 年前

希尔排序(C实现)

希尔排序希尔排序(Shell's Sort)是插入排序的一种, 又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序法的基本思想是:先选定一个整数 gap,把待排序数列中所有所有距离为gap 的元素分在同一组内,并对每一组内的记录进行插入排序。然后,取 gap=gap/2 重复上述分组和排序的工作。当gap等于1时,排序结束.希尔排序是对直接插入排序的优化。插入...
原创
69阅读
0评论
1点赞
发布博客于 2 年前

(C++)写一个排序函数接口,能完成对整数和小数的排序。 接口中多传入一个缺省参数,如果不指定,就采用A排序方式,如果指定了,就按他的选择决定排序方式(至少包含三种)。

(C++)写一个排序函数接口,能完成对整数和小数的排序。 接口中多传入一个缺省参数,如果不指定,就采用A排序方式,如果指定了,就按他的选择决定排序方式(至少包含三种)。用一个函数接口对不同的数据类型排序, 就要用到函数重载我们在fun.h中声明所需要的接口函数和排序后函数#pragma once#include<iostream>using namespace st...
原创
95阅读
0评论
1点赞
发布博客于 2 年前

插入排序(C实现)

插入排序如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法 , 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二...
原创
59阅读
0评论
2点赞
发布博客于 2 年前

堆排序(C实现)

堆排序目录堆的概念及结构 堆的实现堆排序堆排序的特点堆排接口实现堆的概念及结构 :如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小...
原创
94阅读
0评论
3点赞
发布博客于 2 年前

冒泡排序(C实现)

冒泡排序冒泡排序 , 它重复地遍历待排序的数列,一次比较前后两个元素,依次往后 , 如果前后元素顺序错误就把他们交换过来, 每遍历一次就会将最值一直交换到未排序数列的末尾, 反复对待排序数列进行以上操作 , 直到全部排序结束 .这是一种易于理解切代码简单但效率不高的排序算法.会冒泡的不止算法, 还有火锅.....看到了火锅冒泡泡 , 再看看算法中的冒泡是怎样冒的, 演示如...
原创
61阅读
0评论
2点赞
发布博客于 2 年前

选择排序(C实现)

选择排序第一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。这是一种简单 , 便于理解 , 代码便于实现但效率并不高的排序算法 .我们来看图解 : 我们就已华安的代号9 5 2 7为例 ...
原创
78阅读
0评论
1点赞
发布博客于 2 年前

(数据结构)二叉树

目录 一. 树的概念及结构 二. 树的表示 三. 二叉树概念及结构 特殊的二叉树 二叉树的存储结构四. 二叉树的顺序结构及实现 堆的概念及结构 堆的实现 堆向下调整算法: 堆的创建 堆的插入 ...
原创
148阅读
0评论
4点赞
发布博客于 2 年前

(数据结构)栈和队列( C实现 )

栈和队列 1.栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。说明 : 这里的栈是我们自己建立的一种自定义的数据结构 , 并非内存区域中的栈区, 当然他们也有共同的特点...
原创
72阅读
0评论
1点赞
发布博客于 2 年前

(数据结构)顺序表和链表(C实现)

目录1.线性表2.顺序表3.链表4.顺序表和链表的区别与联系 1.线性表 线性表是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。注意...
原创
650阅读
0评论
3点赞
发布博客于 2 年前

自定义类型: 结构体 ,枚举, 共用(联合)体

自定义类型: 结构体 ,枚举, 共用(联合)体目录一. 结构体 结构体的声明 特殊的声明 结构体的自引用 结构体变量的定义和初始化 结构体传参 结构体内存对齐 修改默认对齐数 位段二. 枚举枚举的优点枚举的定义枚举的使用三 .联合(共用)体共用(联合)体的声明共用(联合)的定义共用(联合)的特点共同(...
原创
277阅读
4评论
5点赞
发布博客于 2 年前