- 博客(91)
- 收藏
- 关注
原创 C++继承
我们在用C语言写代码的时候,一定希望重复性的代码越少越好,随着程序的组织越来越复杂,单纯靠main()函数中写功能代码会让代码越来越难以维护和扩展。所以我们函数来解决这个问题,一个函数就像一个小程序,可以从主函数中脱离出来,这使我们能够将复杂的任务划分为一个个简单、容易实现的小程序。从而来降低我们整个程序的整体复杂性。所以,函数让我们实现了一定程度上的代码复用。那么在C++中,我们通过继承的机...
2018-08-31 23:11:47
256
原创 排序之希尔排序
提到希尔排序,我们得先来看看插入排序,因为希尔排序本身就是对插入排序的一种优化。插入排序的基本思想:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止。就像我们玩斗地主一样,接牌的时候,其实就是一种插入排序,每接一张牌,就会把牌放在自己手牌中合适的位置。代码:void Insert_Sort(int array[],in...
2018-08-31 10:30:49
216
原创 进程的地址空间
前面的很多次,文章里提到过很多次,程序地址空间是这样的:之前提到过很多次,这就是我们常说的,4G地址空间。可是我们还说了,它并不是真正的内存先看一段代码:#include <stdio.h>#include <stdlib.h>#include <unistd.h>int g_val = o;int main(){ pid...
2018-08-27 16:17:40
306
原创 Linux之进程
进程和程序,通俗理解是这样的:我们写的代码没有运行的时候它就叫做程序,我们把它运行起来后就叫做进程。也就是说,进程是程序的一个执行实例,正在执行的程序。如果站在操作系统的角度上看,进程就是担当分配系统资源(CPU时间、内存)的实体。描述进程PCB进程信息是被放在一个叫做进程控制块的数据结构当中,可以理解为进程属性的集合。在书上或课本上我们称这种数据结构为PCB(process ...
2018-08-27 12:08:01
209
原创 正则表达式匹配
问题描述:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。做这道题之前,我们必须的了解什么是正则表达式,这个地方有不懂的小伙伴可以去查查看看。...
2018-08-26 22:17:19
316
原创 C++实现MyList
上篇文章我们用C++封装了一个动态顺序表:https://blog.csdn.net/LSFAN0213/article/details/82082436这次,我们用C++的方式来封装一个双向循环链表与我们之前提到的单链表不同的是,双向循环链表的指针域中又多了一个指向前一个结点的pPre指针。这就是双向的意思循环的意思是,链表的最后一个结点的下一个结点是头结点,头结点的前一个结点是...
2018-08-26 20:04:30
1063
原创 C++实现MyVector
用C++的方式去封装一个动态顺序表;在前面我们说过动态顺序表这种数据结构动态顺序表入口:https://blog.csdn.net/LSFAN0213/article/details/81264576下来直接上代码:#pragma once#include <iostream>#include <assert.h>using namespace std...
2018-08-26 17:43:53
1934
原创 在字符串中找出第一个只出现一次的字符,若没找到,就返回-1
题目描述:输入字符串:asdfasdfo输出:o思路方法:我们利用哈希表来解决这个问题,我们遍历字符串,只要出现的字符就给哈希表里相应的位置+1,最后我们只用在哈希表里找到第一个是1的元素,就找到了字符串中第一次只出现一次的字符下面试完整代码:#include <iostream>#include <string>using namespace s...
2018-08-26 16:09:58
841
原创 翻转单词顺序列
问题描述:AAA公司来了一位新同事,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?解题思路:分两步第一...
2018-08-26 15:44:28
236
原创 C++内存管理
在很早之前的文章里,那时候我们认为内存大致是这样的:(如果对栈帧结构不太明白的同学可以看一看)入口地址:https://blog.csdn.net/LSFAN0213/article/details/80280494到如今,我们眼里的内存应该是如下这个样子:其中,栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的 I/O 映射方式,用于装载...
2018-08-25 21:06:18
202
原创 深入理解UDP/TCP协议
在之前的网络编程的博文里,我们简单了解了下UDP协议和TCP协议,这次我们主要对这两个协议进行深入的了解(其实是对TCP协议进行升入了解)https://blog.csdn.net/LSFAN0213/article/details/815375071.再来看看端口号端口号标识了一个主机上进行通信的不同应用程序;在TCP/IP协议中,用“源IP”,“源端口号”,“目的IP”,“目的...
2018-08-22 15:54:07
1821
原创 初识C++ 类和对象3
再看构造函数:前面已经了解过了构造函数,在创建对象的时候,编译器通过调用构造函数,给对象中各个成员一个合适的初始值class Date{public: Date(int year,int month,int day) { _year = year; _month = month; _day = day; }pr...
2018-08-22 10:57:59
180
原创 C++初识:类和对象(2)
在之前的文章里,我们出初步了解了,什么是类,类如何定义,类的大小怎么计算等https://blog.csdn.net/LSFAN0213/article/details/81698194一个空类里面什么也没有,但是它并非是什么也没有,只要是类,它就有6个默认的成员函数:1.构造函数2.析构函数3.拷贝构造函数4.赋值操作符重载5.取地址操作符重载6.const修饰的...
2018-08-20 11:24:36
198
原创 根据后序和中序重建二叉树
题目描述:Given inorder and postorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree.根据一个二叉树的中序结果和后序结果,重建二叉树。(注意:此二叉树中没有相同的元素)解题思路:我们...
2018-08-19 22:21:58
716
原创 二叉树:找最近的公共祖先
TreeNode *Find(TreeNode *pRoot,TreeNode *pNode){ if(pRoot == NULL){ return NULL; } if(pRoot == pNode){ return pRoot; } TreeNode *pFound = Find(pRoot->pLe...
2018-08-18 22:44:30
343
原创 求二叉树的镜像
如下一棵二叉树:它的镜像二叉树为:我们应该怎么操作,可以根据一颗二叉树得到它的镜像二叉树呢?其实不难,我们先序遍历二叉树的结点,如果该结点有左右孩子,我们就交换它的左右孩子,直到我们把所有的非叶子结点都交换过了,那我们就得了该二叉树的镜像二叉树void Mirror(TreeNode *pRoot){ if(pRoot == NULL){ //如果根结点为空,就...
2018-08-18 22:20:40
267
原创 二茶树找最远距离
如下一颗二叉树:最远距离为红色路径,如何求得一颗二叉树的最远距离?上面这棵二叉树,我们可以用子问题的方法解决,找到左子树的最远距离,再找到右子树的最远距离,相加即可但是有特殊情况,比如下面这棵树:再来看这棵树,如果按照上面的思想,左子树的最远距离为3,右子树的最远距离为0,相加后得3,但其实,红色路径才是这棵树的最远距离。所以:我们需要分情况,我们要求出,左子树的最远距...
2018-08-18 21:14:27
255
原创 minimum_depth_binary tree
题目描述:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.思路:用递归的思想:如果根结点为空,就返回0;如果左子树...
2018-08-18 20:24:03
172
原创 实现一个函数,用来判断二叉树是不是对称的。注意:如果一个二叉树同此二叉树的镜像是一样的,我们就称这棵二叉树是对称的
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};class Solution{public: boo...
2018-08-16 22:01:51
245
原创 按层打印二叉树
从上到下按层打印二叉树,同一层结点从左到右输出,每层输出一行struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};//利用...
2018-08-16 21:54:51
342
原创 TCP的三次握手以及四次挥手
TCP协议是传输层的一个重要协议,在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接服务器端状态转换:CLOSED->LISTEN :服务器端调用listen后进入LISTEN状态,等待客户端连接LISTEN->SYN RCVD:一旦监听到连接请求,就将该链接放入内核等待队列中,并向客户端发送SYN确认报文SYN RCVD->ESTABLISHED:...
2018-08-16 19:55:02
238
原创 判断是否是回文字符串
判断一个字符串是否是回文字符串 就类似 ‘ababa‘ 这样的字符串,正读和反读都一样int main(){ char a[101], s[101]; int i, len, mid, next, top; gets(a); len = strlen(a); //求字符串a的长度 mid = len / 2 - 1; //求出字符串的中点 top = 0; //将栈...
2018-08-16 17:42:11
308
原创 啊哈算法 解密QQ号
新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数...
2018-08-16 17:38:47
700
原创 快速排序
一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;5)重复...
2018-08-16 17:34:53
149
原创 数据结构:输入一个整数数组,判断它是否为某二叉搜索树的后序遍历,如果是输出YES,否则输出NO,假设数组内任意两个数都不相等
问题描述: 输入一个整数数组,判断它是否为某二叉搜索树的后序遍历,如果是输出YES,否则输出NO,假设数组内任意两个数都不相等还是先从概念入手:二叉搜索树:它可能是一颗空树若不是空树,则满足:1.若左子树不为空,则左子树上所有结点的值均小于根结点的值2.若右子树不为空,则右子树上所有结点的值均大于根结点的值3.左、右子树也分别是二叉搜索树一颗...
2018-08-15 16:00:33
429
原创 数据结构:输入一颗二叉树,判断该二叉树是否为平衡二叉树
问题描述:输入一颗二叉树,判断该二叉树是否为平衡二叉树解题思路:先从概念入手,什么是平衡二叉树:1.它是一颗空树或者它的左右子树都是都是一颗平衡二叉树2.它左右子树的高度差不超过1了解了这个,这个问题就有解先看1,这个问题好解决,用子问题的方法就能做到再看2,就是求树的高度的问题,也可以用子问题的方式int GetHeight(TreeNode *pRoot){...
2018-08-15 15:26:51
672
原创 初识C++: 类和对象(1)
类和对象的初步认识:类是对象的抽象,对象是类的具体实例。因为类是抽象的,所以类不占用内存,而对象是具体的,占用存储空间。我们都知道,C语言时面向过程的语言,它关注的是过程中的数据与方法。C++是面向对象的语言,它关注的是对象的属性与功能用一张图来理解类和对象我们知道了类其实就是一种抽象概念,那么在C++中,怎么引入类我们已经知道在C语言中可以定义结构体,结构体中可以放各...
2018-08-15 10:28:03
274
原创 Http协议
Http协议存在于应用层,虽然说,应用层的协议都是由程序员们自己定义的。但是,不妨有一些牛逼的人定义了一些现成的,可以供我们直接使用的,而且还非常好用的应用层协议。其中就有http协议------也叫作超文本传输协议。(Http 是基于TCP协议的,就是明文传输-------传输的就是字符串,打印后人眼可以识别出来)在认识Http前,还是得先认识一个玩意儿-------------...
2018-08-13 17:34:46
219
原创 网络编程
网络编程其实就是要在遵循网络协议的条件下进行编程从而达到计算机之间可以通信。在这之前先了解一些网络基础:https://blog.csdn.net/LSFAN0213/article/details/81537821了解什么是网络编程之前,我们要先了解一些预备知识IP地址:IP协议有两个版本:IPV4 和 IPV6,但是我们一般使用的是IPV4版本IP地址是什么?IP地...
2018-08-09 17:29:06
337
原创 数据结构:栈
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作,进行插入和删除元素的一端叫做栈顶,另一端称为栈底不含任何元素的栈叫做空栈,栈又称为后进先出(LIFO)线性表用一张图来表示这种数据结构:栈的特性:后进先出(LIFO)特殊线性表栈功能:将数据从一种序列改变到另一种序列下面用代码来详细了解栈(代码不长,我就不分开来展示了)typedef struct St...
2018-07-28 20:56:09
168
原创 数据结构:动态顺序表
上一次我们谈到了静态顺序表(https://blog.csdn.net/lsfan0213/article/details/81262124),这次我们来了解另一种顺序表:动态顺序表在当我们有少量数据的时候,我们可以使用静态顺序表。但是如果我们有大量的数据,这些数据往往会超过数组的大小,这个时候我们需要使用动态顺序表为了区别静态顺序表和动态顺序表,我们用两张图分别来表示这两中数据结构:...
2018-07-28 20:29:15
458
原创 数据结构:静态顺序表
什么是顺序表?顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 (源于百度百科)...
2018-07-28 17:33:09
1141
原创 数据结构:排序(一)
什么是排序?排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。(源于百度百科)在计算机领域内,排序的方法有很多...
2018-07-28 12:36:54
399
原创 数据结构:单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 (百度百科)用一张图来表示一下单链表这种数据结构:这是一个带头结点的非空单链表由一个指针指向单链表的头结点,头结点里由两个部分组成:1...
2018-07-27 17:35:35
423
原创 详细了解结构体、位段、联合、枚举
什么是结构体?结构体是一些值得集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。结构体是怎么声明的?举个例子:struct tag //标签(结构体名称){ member - list; // 放任何内容}variable-list; // 变量列表这里要注意的是:在c环境中,member-list 不可以为空。我们这里用结构体来描述一个学生:struct ...
2018-06-08 22:00:35
231
原创 模拟实现strncpy strncat strncmp
什么是strncpy函数:strncpy是c语言的一个库函数,定义与string.h char* strncpy(char* dst,const char* src,int n)它的作用是将字符串以src地址前的前n个字符拷贝到dst所指的数组中,并返回dststrncpy在拷贝时,会将‘\0’也拷贝出来,并以‘\0’作为循环的终止条件。这样子就会避免程序自己崩掉的情况发生。#include<...
2018-06-08 20:19:22
195
转载 Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp
了解几个Linux下的重要目录(/proc,/sys,/SElinux,/bin,/usr/lib,/usr/local,/var,/tmp)/bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。/sys: 文件系统访问 Linux内核/SELinux SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由N...
2018-06-07 16:46:01
179
原创 进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.
在进行查看之前,我们先了解什么是权限。在Linux下有两种用户:超级用户、普通用户超级用户:可以在linux系统下做任何事情,不受限制。普通用户:在linux下做有限的事情。(超级用户的命令提示符是:“#”,普通用户的命令提示符是“$”)这里我们介绍一下su命令:su [用户名]可以切换用户。(在从普通用户切换到超级用户的时候,su root 这里的root可以省略)谈到权限,我们就要了解访问者的...
2018-06-07 16:41:15
316
原创 练习使用qsort函数排序各种类型的数据。
#include<stdio.h>#include<string.h>#pragma warning(disable:4996)int cmp(const void *x, const void *y) //整形 return (*(int*)x) - (*(int*)y);}int cmp1(const void *x, const void *y) ...
2018-05-30 21:24:53
444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人