- 博客(29)
- 收藏
- 关注

原创 图解KMP算法(C++实现)
需求提出给定一个模式串 pattern = “ddywabcdababcdabd” 和一个子串 substr = “abcdabd”,需判断 pattern 中是否包含 substr,如果包含,返回 substr 第一次在 pattern 中出现的位置;如果不包含,返回 -1(常用手段)赶时间的小伙伴可以拿去应急了。
2022-02-17 23:13:53
675
原创 C++链表03:设计链表
1.背景大家好,我是酒馆店小二。力扣707.设计链表在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长
2022-03-24 16:52:58
272
原创 C++链表02:反转链表
1.背景大家好,我是酒馆店小二。力扣206.翻转链表。题意:反转一个单链表。示例:输入: 2->3->4->5->NULL输出: 5->4->3->2->NULL2.迭代如图,定义pre指针,初始化为 nullptr;定义cur指针,指向头结点;定义temp指针,指向cur->next节点,为什么要指向这个节点?因为接下来要改变cur->next的指向,将cur->next指向pre;重复执行上述操作,不断后移p
2022-03-23 17:06:16
4708
原创 C++链表01:移除链表元素
1.认识链表什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链接的入口节点称为链表的头结点也就是head。链表的类型有三种,如下:单链表中的节点只能指向节点的下一个节点。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。循环链表,顾名思义,就是链表首尾相连。循环链表可以用来解决约瑟夫环问题。2.
2022-03-18 17:32:06
2487
1
原创 计网:应用层协议DNS
1.背景大家好,我就酒馆店小二。世界上共有 13 个根域名服务器,其中主根域名服务器是在美国。那美国有没有可能通过根域名服务器掐断中国的互联网呢?在说结论之前,先来了解:DNS到底是怎么工作的?为什么根域名服务器只有 13 台?美国可以让中国从互联网上消失吗?2.DNS 应用层协议在上网冲浪时,我们在浏览器输入的都是网站的域名,而不是 Web 服务器的 IP 地址。原因很简单,域名和 IP 地址的关系就像我们手机通讯录那样,用对方的名字来对应它的手机号码。这样每次拨打电话的时候,直接
2022-03-15 22:05:47
474
原创 计网:网络层协议ICMP
1.背景在日常生活或工作中,我们在判断与对方网络是否畅通,使用的最多的莫过于 ping 命令了。“那你知道 ping 是如何工作的吗?” —— 灵魂拷问2.ICMPIP协议的助手 —— ICMP 协议ping 是基于 ICMP 协议工作的,所以要明白 ping 的工作,首先我们先来熟悉 ICMP 协议。ICMP 是什么?ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。里面有个关键词 —— 控制,如何控制的呢?网络包在复杂的
2022-03-14 22:06:24
1268
原创 计网:网络层协议ARP
1.背景在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器的IP地址(主机或路由器)后,就需要找出其相应的硬件地址。地址解析协议 ARP(Address Resolution Protocol) 就是来解决这样的问题的。2.ARP我们知道,网络层使用的是 IP 地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但 IP 地址和下面的网络硬件地址之间由于格式的不同和不存在简单的映射关系(例如,IP 地址有32位,而局域网的硬件地址是48位)。此外,在一个网络上可能经常会
2022-03-13 18:27:40
909
原创 c++实现常见的字符串操作函数
1.背景大家好,我是酒馆店小二。字符串操作函数有很多,用的也很方便,秉持着知其然并知其所以然的想法,来实现下这些常见的函数。2.strcpy()把从 src 地址开始且含有’\0’结束符的字符串复制到以 dest 开始的地址空间,返回值的类型为 char*。#include <iostream>#include <assert.h>/** Author: 酒馆店小二* Description: 字符串操作函数* Date: 2022-03-11 10:12:25
2022-03-11 11:21:10
1458
原创 C++的四种强制转换
1.背景大家好,我是酒馆店小二。C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式。TypeName res = (NewTypeName)ans; 当然,C++也是支持C风格的强制转换,但是C风格的强制转换可能带来一些隐患,让一些问题难以察觉。所以C++提供了一组可以用在不同场合的强制转换的函数。2.const_cast 常量转换const_cast用于强制去掉不能被修改的常数特性,其去除常量性的对象一般为指针或引用。用法:const_cast<
2022-03-10 19:02:52
15086
2
原创 C/C++中sizeof()计算练习题
1.sizeof()sizeof() 操作符的结果类型为 size_t,计算的是分配空间的实际字节数;sizeof() 是运算符,可以以类型、函数做参数;sizeof() 是在编译的时候就将结果计算出来了,结果是类型所占空间的字节数,所以用数组名做参数计算的是整个数组的大小。2.strlen()strlen() 结果类型也是 size_t,但 strlen() 计算的是空间中字符的个数,不包括 ‘\0’;strlen() 是函数,只能以 char* (字符串)做参数,而且,一定要以 ‘\0’ 结
2022-03-08 21:30:33
1001
原创 计算二进制中1的个数
1.背景大家好,我是酒馆店小二。笔者想到在学校里专业课老师问的一个问题:如何高效求一个二进制数 num (非负整数)中 1 的个数?这是什么意思:程序员的世界少不了二进制,一个非负整数用二进制表示出来是什么样的比如:19 对应的二进制形式为:10011,这其中有3个1,这就是我们要求的。题目理解明白就可以解决。2.移位可以把逐个遍历二进制的每一位,将其与 1 做与运算即可。#include <iostream>#include <vector>#include &
2022-03-08 17:56:02
505
原创 C++STL中vector的push_back和emplace_back的区别
1.背景大家好,我是酒馆店小二。对于 vector 来说,push_back 和 emplace_bac 都是在末尾添加新元素的,所谓存在即合理,那么二者有何区别呢?2.push_back()#include <iostream>#include <vector>using namespace std;/** Author: 酒馆店小二* Description: push_back 和 emplace_back* Date: 2022-03-04 16:27:
2022-03-04 17:14:47
494
原创 C/C++查看机器的大小端
背景大端是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中int data = 0x12345678;// 0x12 是高字节,若它在内存的低地址中,则这个机器就是大端模式小端是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中int data = 0x12345678;// 若 0x12(高字节) 在内存的高地址中,则这个机器就是小端模式实现指针法和共用体法均可实现。#include <iostream>/**
2022-03-03 21:49:39
574
原创 C++11中auto的推导规则
auto背景在 C++11 之前的版本(C++98 和 C++ 03)中,定义变量或者声明变量之前都必须指明它的类型,比如 int、char 等;但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具体的类型,而是让编译器(或者解释器)自己去推导,这就让代码的编写更加方便。C++11 为了顺应这种趋势也开始支持自动类型推导了!C++11 使用 auto 关键字来支持自动类型推导。auto可以让编译器在编译期间就推导出变量的类型。auto
2022-02-26 11:26:47
982
2
原创 LeetCode28:实现strStr()
力扣28:实现strStr()[描述]:在模式串 pattern 中查找是否含有子串 substr,若有,返回子串第一次出现的位置,反之,返回 -1。思考问题:若是 substr 为空时应该返回什么呢?显然,这是一道KMP算法应用的题目。kmp算法介绍第一种解法:暴力解法我们可以让字符串 pattern与字符串 substr 的所有长度为 m 的子串均匹配一次。为了减少不必要的匹配,我们每次匹配失败即立刻停止当前子串的匹配,对下一个子串继续匹配。如果当前子串匹配成功,我们返回当前子串的开
2022-02-19 14:46:48
472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人