- 博客(28)
- 收藏
- 关注
原创 两个栈模拟实现一个队列
栈的特点是后进先出,队列的特点是先进先出,所以我们用两个栈来实现,我们需要分别实现进队列和出队列,stack1进栈,然后出队列,将stack1栈顶的元素全部进入stack2,然后stack出栈,就实现了先进先出。#include<iostream>#include<stack>using namespace std;template<typ...
2020-02-10 23:50:03 327
原创 打印链表倒数第k个节点
这个题目的方法是用两个指针,快指针先向前走了k步,慢指针指在了第一个位置,然后他们同时向前走,当快指针走到了end的位置,慢指针的位置就是倒数第k个节点。//链表中倒数第k个节点#include<iostream>#include<list>using namespace std;int the_k_back_node(list<int> l...
2020-02-09 18:52:50 247
原创 打印1到最大的n位数
代码如下,我们在这里采用大数的运算,即用字符串模拟实现,如果是n位数,那么我们设置一个n+1位的字符串,最后一位为‘0’,首先将内部每一位都置为0,然后计算,如果我们得出最后一位++小于等于9,则结束这次循环,如果else,则把这个位数是第一位,需要进位,那么结束全部,已经到了最大的n位数了,否则,前一位加1,takeover表示进位,然后我们原本的那位就是减去10,注明,加减‘0’表示的是由整型...
2020-02-09 18:44:57 424
原创 让数组中奇数位于偶数前面
//双指针法,分别从后往前和从前往后查找,找到奇数和偶数,交换它们,然后最后将排好的数组打印出来。#include<iostream>using namespace std;void rearray(int* array, int length){ if (array == nullptr || length == 0) return;...
2020-02-06 19:49:15 150
原创 数字的数值次方
#include<iostream>using namespace std;bool g_invalid = false;bool equal_zero(double base){ g_invalid = false; if (base <0.000001 && base >-0.000001) return tr...
2020-02-05 21:26:27 294
原创 二进制中1的个数
//二进制中1的个数#include<iostream>using namespace std;int count_1(int n){ int count = 0; int shift = 1; for (int i = 0; i < 32; i++) { if (n&shift) coun...
2020-02-05 21:23:19 108
原创 数组中重复的数字
//数组中重复的数字#include<algorithm>#include<map>#include<iostream>using namespace std;//数组中重复的数字 改变数组,时间复杂度o(nlogn),空间o(1)void find(int *arr){ sort(arr,arr+7); for (int i ...
2020-02-05 21:20:28 124
原创 二维数组中的查找
#include<vector>#include<iostream>using namespace std;//二维数组中的查找bool number(int t, vector<vector<int>> c){ int col = c.size(); int rew = c[0].size(); int col...
2020-02-05 21:18:12 218
原创 tcp/ip协议
tcp/ip协议栈就是一系列的网络协议总和,从上到下,依次是应用层,传输层,网络层,链路层,在这其中每一层协议都是通过下一层协议来为自己提供需求。当我们通过http发起一个请求的时候,应用层,传输层,网络层和链路层分别将自己的首部加入其中,并且最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包之后,然后再一层一层的采用对应的协议进行拆包,最后把应用...
2020-02-05 21:07:20 233
原创 TCP如何保证传输可靠?
TCP保证数据传输可靠性的方式主要有:校验和计算方式:在数据传输的过程中,将发送的数据段都当作一个16位的整数,将这些整数加起来,并且前面的进位不能丢,补在后面,最后取反,得到校验和。发送方:在发送数据之前计算校验和,并进行校验和的填充,接收方:收到数据后,对数据以同样的方式进行计算。如果接收方比对校验和与发送方不一致,那么就一定传输有误,如果一致,数据也不一定会传输成功。确认...
2019-09-14 12:11:36 155
原创 this指针
this指针存在于类的成员函数中,指向被调用函数所在类的实例的地址。关于this指针有个经典的回答:当你进入一个房间,你可以看见桌子,椅子,地板等,但是房子的全貌你是看不到了。对于一个类的实例来说,你可以看到它的成员函数,成员变量,但是实例本身呢, this是一个指针,它时时刻刻的指向你这个实例本身。this指针不是对象本身的一部分,它的作用域是类的内部,当在类的非静态成员函数中访...
2019-08-17 02:17:14 594
原创 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质 数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。 指针也是一...
2019-08-15 15:04:30 170
原创 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题目就是上面这样,我们脑子里可能一开始会想到排好序,然后依次去比较,但是有一个很简单的方法,就是用位运算,题目告诉...
2019-08-05 15:03:52 126
原创 剑指offer数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次,请找出数组中任意一个重复的数字,例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2首先提供一种解决思路,现在已有的条件是如上,那么我们既然知道数字分别是0-n-1,那么我们可以用一个数组存下来这些数字,然后从下标为0开...
2019-08-01 12:04:37 128
原创 leetcode 692 前k个高频单词
class Solution {public: vector<string> topKFrequent(vector<string>& words, int k) { //1.[] 2.find insert 3.insert map<string,int> countmap; //将字符串按...
2019-07-30 15:23:12 285 1
原创 c++中using的几种用法
最近在使用中,发现了一种以前没学过的using用法,于是在这里,将using的几种用法总结一下。先来说说我新学会的一种用法,就是起别名,我们都知道typedef可以给我们起别名,using也可以,用法如下1.using a = pair<int,int>,类似于这样的用法。当然还有我们熟知的几种用法2.可以引入命名空间using namespace std ;u...
2019-07-30 13:05:01 5591
原创 一个数组有 N 个元素,求连续子数组的最大和(动态规划问题)
该题题目如上,例如【-1,2,1】连续的最大子数组为【2,1】,和为3;题目要求我们输入第一个数为数组元素的个数,然后后面为我们需要输入的元素。遇到这一个题,我们首先可以这样考虑,设置一个sum和result,sum是用来每次加新的元素,result是最后得出最大的子数组和。我们可以每次给sum中添加新的元素,从第一个开始向后,如果遇到和比result大的时候,就把sum的值赋给res...
2019-07-29 20:26:30 3220
原创 求1+2+3+.....n 要求不能使用乘除法,以及for while if else 以及各种条件判断语句
这道题有一个非常简单的解法,就是使用逻辑与。直接上代码:class Solution {public: int Sum_Solution(int n) { int ret =n; ret && (ret += Sum_Solution(--n)); return ret; }};就是这么简单的一种解法,通...
2019-07-29 15:55:00 172
原创 tcp三次握手
这里我们首先来说一下tcp的三次握手是什么,然后再来讲解一下为什么要三次握手,而不是两次。首先客户端发起连接请求给服务端,SYN=1,并且发送seq = x;然后服务端确认连接,发送ACK=1,并且发出连接SYN=1,ack = x+1,seq = y;最后客户端收到之后,再发送一个ACK=1,表示确认连接,然后置ack = y+1。三次握手,简单说一下,就是1.A发送,B收,B知道A能发...
2019-07-26 18:48:12 164
原创 剑指offer 重建二叉树
重建二叉树,有一个前提,就是知道前序和中序遍历,或者中序和后序遍历。题目如下:输入某二叉树的前序和中序遍历,重建该二叉树。然后解题思路如下,如果我们有一个二叉树的前序和中序,那么前序遍历就是根节点-->左节点-->右节点,通过前序,我们可以找到根节点,然后在中序中寻找根节点,由于中序遍历是左节点-->根节点-->右节点,那么根节点前的都是左节点,之后的都是右节点,然...
2019-07-25 23:02:01 132
原创 浅谈软链接和硬链接
先来说一下怎么创建软链接和硬链接。硬链接:ln filename filename.hard 软链接:ln -t filename filename.soft然后我们来说一下这两种链接的区别,软链接更像是一个快捷方式,如果源文件被删除了,那么软链接也就不存在了。接下来我们再来说说硬链接,硬链接则完全不同于软链接,可能有点像是一个复制文件,但是不一样,它还可以做到同步更新,...
2019-07-22 19:29:20 212
原创 僵尸进程 孤儿进程
我们先来讲讲僵尸进程把,为何称为僵尸进程,我们把僵尸也叫活着的尸体,在系统中,子进程由父进程创建,如果子进程先于父进程退出,而父进程并没有来得及回收子进程,那么它将变成僵尸进程,这时kill -9也对它没有办法,我们可以调用waitpid/wait方法来清除僵尸进程。如果有僵尸进程产生,可能会造成资源泄露。孤儿进程是父进程先于子进程退出,所以子进程变成孤儿进程,然后会被init进程接收。...
2019-07-21 12:50:23 140
原创 进程和线程的区别
进程是资源分配的基本单位,是计算机中的程序关于数据集合的一次运行活动。线程是cpu调度的单位。这不是说进程就不可以进行调度了,只是线程是调度的最小单位。进程有自己的独立地址空间,在内存进程分配方面,系统为每个进程都会分配不同的内存空间,而线程自己不会拥有资源,只是拥有一点在运行中必不可少的资源,(如寄存器和栈)同一进程中的线程共享资源,在Linux系统中没有线程,以进程模拟线程,线程可以看...
2019-07-21 11:19:48 127
原创 c++中的继承
众所周知,继承是c++中的一个特性,我们今天了解一下c++中单继承 多继承以及菱形继承。何为继承,继承是面向对象语言中可以使代码复用的一个机制。我们可以保持我们原有类的基础上,扩展一些新的功能,新扩展的类被称为派生类,而原有的类叫做基类。那么它的用法如下#include<iostream>using namespace std;class A{public: ...
2019-07-13 17:14:46 143
原创 大小端
首先先解释一下大小端的概念大端就是数据的高字节存在内存的低地址,低字节存在内存的高地址小端就是数据的高字节存在内存的高地址,低字节存在内存的低地址#include <stdio.h>#include <stdlib.h>int main(void){ union{ short s; char c[4]; }un; un.s = 01010...
2018-11-22 18:55:26 3868
原创 结构体内存对齐总结
首先我们都知道结构体是多个变量的集合,在其中可以存放整型,浮点型等等各种,然后结构体内存是如何对齐的呢,他并不是按连续顺序去排下去的,首先我们先上一段代码#include<iostream>#include<cstdlib>using namespace std;struct a{ int m; char n; double c;};stru...
2018-11-21 13:50:12 337
原创 C语言操作符
1.算术操作符:+ - * / % (取余)1) 除了 % 操作符之外,其他的几个操作符均可以作用于int型和float型。2) 对于 / 操作符,如果两个操作数都为整数,执行整数除法;而只要有浮点数执行的就是浮点数除法。2.移位操作符:<< 左移操作符 >> 右移操作符移位操作符只是简单地把一个值的位向左...
2017-12-21 17:02:53 165
原创 我的编程之路
我是来自陕西科技大学的一名大二的学生,专业是计算机。之前一直以来觉得学习编程的人都非常厉害,所以我也想在未来成为别人口中的大神,并为此而努力。我觉得多看书多练习多思考应该是一个学习计算机的人必备的技能。身为计算机专业的学生恐怕一周大部分时间都应该贡献给编程的学习,每天至少留给学习编程有两个小时以上的时间。我对百度腾讯谷歌等IT公司都非常仰慕,希望以后有机会能够进入其中工作。
2017-12-07 00:13:35 268
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人