自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 文件压缩

文件压缩开发平台:Visual Studio 2015开发技术:堆排序,哈夫曼树项目描述:1.统计文件中字符出现的次数,利用数据结构中的堆建造Huffman树,字符出现次数多的编码短,出现次数少的编码长;2.根据建造好的Huffman树形成编码,以对文件进行压缩;3.将文件中出现的字符以及他们出现的次数写入配置文件,以便后续的解压缩;4.根据

2017-07-22 18:12:40 496

转载 TCP的流量控制和拥塞控制

TCP的流量控制和拥塞控制TCP的流量控制1. 利用滑动窗口实现流量控制    如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。    利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。    设A向B发送数据。在连接建立时,B告诉了A:“我的接收窗口是 rwnd = 4...

2018-10-29 16:24:45 271 1

转载 协议号与端口号详解

IP是网络层协议,IP头中的协议号用来说明IP报文中承载的是哪种协议(一般是传输层协议,比如6 TCP,17 UDP;但也可能是网络层协议,比如1 ICMP;也可能是应用层协议,比如89 OSPF)。TCP/UDP是传输层协议,TCP/UDP的端口号用来说明是哪种上层应用,比如TCP 80代表WWW,TCP 23代表Telnet,UDP 69代表TFTP。目的主机收到IP包后,根据IP协议号确...

2018-10-29 16:01:32 1841 1

转载 Linux的网络编程面试题汇总

1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动窗口的实现机制4:多线程如何同步。5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别10:epool中et和lt的区...

2018-10-29 15:37:20 1489

原创 mysql学习

http://www.runoob.com/mysql/mysql-install.html书籍:https://pan.baidu.com/s/1fIVAXZnZH7u_DDRIyjLTRQmysql登陆:mysql -uroot -p 输入密码增加用户:mysql > create user 'dog''@''localhost'identified by '123';查看...

2018-10-29 15:32:07 368 1

原创 1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象

设计一个类不能被继承常规解法:将构造函数设为私有函数在C++中,子类的构造函数会自动调用父类的构造函数,子类的析构函数也会调用父类的析构函数。要想一个类不能被继承,只要把它的构造函数和析构函数都设置为私有函数。那么当一个类试图从那里继承时,势必会因为调用构造函数和析构函数而导致编译错误。可是这个类型的构造函数和析构函数都是私有函数,我们怎样才能得到该类型的实例呢?我们可以通过定义共有的

2017-07-25 08:48:42 357

原创 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数

数组中有一个数字出现的次数超过了数组长度的一半,找出这个数这个算法的时间复杂度是O(n),另外用了两个辅助变量。k用于临时存储数组中的数据,j用于存储某个数出现的次数。开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等

2017-07-24 08:30:54 1020

原创 Linux中fork()函数详解

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新

2017-07-20 19:39:12 348

原创 -元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1),则合法。入栈的序列(1,2,3,4,5),出栈序列为(4,5,2,3,1),则不合法。

bool adjudge(int *in, int*out, int len_in, int len_out){if (in == NULL || out == NULL || len_in != len_out)return false;stack s;int i = 0;int j = 0;while (j               {while (o

2017-07-20 19:23:20 803

原创 找出两个链表的第一个公共结点

题目:两个单向链表,找出它们的第一个公共结点。链表的结点定义为:struct ListNode{int m_nKey;ListNode* m_pNext;};分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pN

2017-07-18 10:32:38 368

原创 判断链表是否有环及环的入口

1.如何判断是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时停止计数。3.如何判断环的入口点:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分别从碰撞点、头指针开始走,相遇的那个点就是连接点。为什么呢?需要一个简单的计算过程: (1)当fast与slow相遇

2017-07-17 22:14:40 266

原创 判断链表是否带环,以及环的入口

给出一个链表,先判断链表是否带环,如果带环,求出环的入口。判断是否带环:用快慢指针。快指针每走两步,慢指针走一步,如果两者在某个点处相遇,则链表带环。下边给出函数的实现代码:typedef struct LinkNode{ DataType data; struct LinkNode *next;}LinkNode,*pLinkNode;typedef struct

2017-07-15 13:09:57 267

原创 约瑟夫环问题

约瑟夫环问题就是从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;计算出最后留下来的那个人的编号。下边给出两种方法,顺序表实现和链表实现。链表的代码:typedef struct LinkNode{ DataType data; struct LinkNode *next;}LinkNode,*pLinkNode;typed

2017-07-15 13:06:09 203

原创 Linux面试题

Linux面试题总结一下 一、有文件file1 1、查询file1 里面空行的所在行号 awk ‘{if($0~/^$/)print NR}’ file or grep -n ^$ file |awk ‘BEGIN{FS=”:”}{print $1}’或者用grep -n ^$ /usr/local/httpd/conf/httpd.conf

2017-07-07 19:43:54 1511

原创 操作系统常见面试题总结

1、什么是进程(Process)和线程(Thread)?有何区别?  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的

2017-07-07 16:21:40 288

原创 Linux下的文件操作权限

Linux下进入一个目录需要什么权限?普通用户下:首先我们在普通用户下,取消文件code的所有权限chmod 000 code当我们执行cd code想进入当前目录时,发现权限不允许。接下来我们为拥有者赋予读的权限当我们cd code 想进入当前文件时,发现依旧没有权限。接下来给予拥有者写的权限当我们cd code想进入当前文件时,发现依旧没有权限。

2017-07-05 11:06:38 203

原创 简单的贪吃蛇游戏实现

贪吃蛇功能实现:(1)定义贪吃蛇游戏棋盘图(2)初始化棋盘(3)输出棋盘所在信息(3)选择游戏难度(4)随机产生食物(5)更新游戏动态(6)设置游戏相应的操作(7)打印游戏结果代码实现:#include #include #include #include #include #include #

2017-07-04 10:54:14 324

转载 百度笔试题:malloc/free与new/delete的区别

相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不

2017-06-07 18:42:10 424

原创 【C++】浅析C++中的对象模型

(一)不含有虚函数的单一继承模型:测试代码://单一继承,无虚函数class A{public: A(int a = 0, char c = 0) :_a(a) , _c(c) {} int GetA() { return _a;

2017-06-07 14:08:20 329

原创 动态分配,结构,联合

(一)动态内存分配:1.为什么要动态内存分配呢?比如,我要做一个学生成绩管理系统,这里可能需要存储每个班级所有学生的信息,但是,我们到底要分配多大的空间呢??每个班的人数有可能并不相等,按多分配 ,那样多浪费;按少分配,不够。所以动态内存分配就有自己的作用了~~2.动态内存分配函数:(1)void *malloc(unsigned int size);-------size是需

2017-06-07 14:00:05 342

原创 指针重难、易错点

(一)函数指针在前边的blog中,已经整理归纳了数组和初级指针,接下来,我来继续整理高级指针和如何正确使用指针。我们说过,指针数组是一个数组,每个元素是指针;数组指针是个指针,指向的是数组。所以:函数指针就是指向函数的指针。我们先看以下代码:void fun(){}int main(){printf("%p",fun);printf("%p",&fun);printf

2017-06-07 13:57:46 267

原创 函数重载

这篇文章,我将谈谈我自己对函数重载的简单认识。一开始,我们得明白,函数重载是什么??为什么要函数重载??函数重载可以做哪些事??函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。首先我先解释名字空间这个概念

2017-06-07 13:52:56 366

原创 参数缺省,引用

本篇文章将整理出关于参数缺省和引用的一些知识。(一)参数缺省:参数缺省包括全缺省和半缺省。顾名思义,全缺省就是函数的所有参数都给出默认值,半缺省就是仅有函数的部分参数给出了默认值。看下边的一段代码:#includeusing namespace std;int Add(int x, int y){ return x + y;}int main(){ int

2017-06-07 13:49:53 698

原创 关于c++中的this指针

记忆中,初识c++中的this指针的时候,根本不知道它是什么,有什么作用。再识,就知道了它的作用,也掌握了它背后的东西。this指针,就是一个指向当前对象的指针。我们知道,定义出一个类,它在内存中是不占空间的,只有定义了该类类型的对象时,系统就会为该对象分配一段存储空间,这段空间里只存储成员变量,对于成员函数,是存放在代码区的。(复习:内存分为5大区:静态区、常量区、栈

2017-06-07 13:48:23 283

原创 面向对象c++之继承

面向对象三大机制包括:1.封装,隐藏内部实现。2.继承,复用现有代码。(面向对象最显著的特征)3.多态,改写对象行为。继承,是一种复用的手段。是从先辈处得到属性和行为特征。类的继承就是新的类从已有的类那里得到已有的特征。类成员的访问限定有三种:public,protected,private,在类外可以访问类的公有成员,私有和保护都不可以访问。代码举例:#inc

2017-06-07 13:44:31 275

原创 c++中的重载,重写,重定义

c++中的几个容易混淆的概念:(1)重载:在同一作用域中,函数名相同,参数列表不同,返回值可同可不同的函数。关于函数重载的知识在《函数重载》这篇博客中有详细介绍。(2)重写:又叫覆盖,是指不在同一个作用域中(分别在父类和子类中),函数名,参数个数,参数类型,返回值类型都相同,并且父类函数必须有virtual关键字的函数,就构成了重写(协变除外)。协变:协变也是一种重写,只是

2017-06-07 13:42:55 303

原创 链表的实现以及合并,排序,逆序,等

1。链表的结构2,链表的初始化3,创建节点4,尾插5,头插6,查找7,头删8,移除9,合并两个有序链表,合并后依然有序Plist merge(Plist head3,Plist head4){ if (head3 == NULL) return head4; if (h

2017-06-06 19:07:12 429

原创 数据结构】AVL树

AVL树,是一棵平衡搜索二叉树,既满足搜索树的性质(见二叉搜索树的文章,链接:二叉搜索树),又满足平衡树的性质(左右子树的高度差不大于2)。在二叉搜索树中,我们知道要插入一个元素,必须将他插到合适的位置,但是在AVL树中,不仅要插入到合适的位置,还要保证插入该元素之后这棵树是平衡搜索二叉树。关于如何调整一棵二叉树为平衡二叉树,这里就涉及到四种旋转:左单旋,右单旋,左右双旋,右左

2017-06-04 23:06:56 363

原创 【数据结构】二叉搜索树

二叉搜索树,又叫二叉排序树,二叉查找树。它有以下特点:左子树的值小于根节点的值,右子树的值大于根节点的值;二叉搜索树中序遍历的结果就是一个升序序列。当然,空树也是一个二叉搜索树。全局满足二叉搜索树的性质,局部也应该满足。既然有以上性质,那么二叉树的查找是相当方便的,当然插入和删除,复杂度也会明显降低。查找:从根节点开始,如果要插入的key小于根节点的key,则向左走,否

2017-06-04 17:24:02 241

原创 求一棵二叉树的镜像

求一棵二叉树的镜像二叉树的镜像就是将二叉树的左右子树都交换位置得到的一棵二叉树。所以我们可以通过递归来解决。下边给出代码实现: void _Mirror(Node* root) { if(root == NULL) return; if(root->_left == NULL && root->_right ==

2017-06-04 11:50:40 381

原创 看二叉树是否是完全二叉树

首先看什么是完全二叉树先判断下面的二叉树是不是完全二叉树这里给出的思想是把所有二叉树的节点入队列,然后遇到NULL停止,看栈中剩余的是否还有空节点,若有的话则为满二叉树,没有的话则不是,可以对照代码理解思想,这里不难理解

2017-06-03 22:41:30 332

原创 二叉树的前序创建树以及中序后序非递归实现 以及节点个数,叶子节点个数第n层节点个数,深度

#includeusing namespace std;#include#include#includetemplatestruct TreeNode{ T _data; TreeNode* _left; TreeNode* _right; TreeNode(const T&data) :_data(data) , _left(NULL) , _right(NUL

2017-06-03 16:32:31 870

原创 给出几种排序总结

1.冒泡及其稍微优化#includevoid Bubbsort(int a[],int len){ assert(a); for (int i = 0; i < len - 1; i++) { int tmp = 0;//标志状态 for (int j = 0; j < len - i - 1; j++) { if (a[j]>a[j + 1]) {

2017-06-01 15:32:27 453

原创 快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速

2017-05-31 12:17:21 268

原创 Can you use map and set???

一、map和set的引入 我们都知道,STL在C++ 中得到了广泛使用,它不仅仅由于是提供了类似vector,list等方便使用的容器,更是因为它封装了许多复杂的数据结构算法和大量数据结构的操作。vector封装数组,list封装链表,而map和set则是用来封装二叉树的。 还有要知道的就说STL中的容器分为两大类:序列式容器和关联式容器,其中vector和li

2017-05-30 09:31:18 577

原创 linux 更改用户及其所有的文件的组

一、《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在 Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。  另外,在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限。  二、使用chown命令更改

2017-05-27 20:46:50 475

原创 一个数组实现两个栈

#includeclass TwoStack{public: TwoStack() :size1(0) , size2(0) { v.resize(5); } void Push1(int value) { CkeckCapacity(); v.insert(v.begin()+size1,value);//vector没有头插,插入就用这种方式 size1

2017-05-26 21:40:06 314

原创 判断元素出栈、入栈顺序的合法性。如:入栈的序列( 1,2,3,4,5 ),出栈序列为 ( 4,5,3,2,1 )是合法序列,入栈的序列( 1,2,3,4,5 ),出栈序列为( 1,5,3,2,4 )是

这个题比较复杂一点,先给出几个例子结果选 ABD这个题直接给出代码,代码中注释一些细节bool adjudge(int *in,int *out,int len_in,int len_out){ stack s; if (in == NULL || out == NULL || len_in != len_out)//如果有空或者长度不相等直接返回错误 { return

2017-05-26 21:20:14 1049

原创 使用两个队列实现一个栈

此原理和两个栈模拟一个队列是一样的,可以参考思想直接给出代码class Stack{public: void Push(int value) { if (!q2.empty()) { q1.push(q2.back()); q2.pop(); } q1.push(value); } void Pop() { if (q1.empty() && q2

2017-05-26 21:07:23 264

原创 两个栈实现一个队列

class Queue{public: void Push(int value) { if (!s2.empty()) { s1.push(s2.top()); s2.pop(); } s1.push(value); } void Pop() { if (s1.empty() && s2.empty()) return; if (!s1.em

2017-05-26 21:03:25 246

8_base.apk

8_base.apk

2023-11-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除