自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目之畅聊系统

这个项目是我真正意义上的第一个项目,它的名字是基于UDP实现的群聊系统。目录:实现功能及原理 应用知识与技能 项目的具体模块的问题 注意的问题 心得与体会一。实现功能及其原理:1.功能:首先这个项目是在Linux下用C++编写的程序,而且是基于UDP的。它能够实现像QQ一样的简单版群聊,就是多个用户给服务器传输数据,服务器会将所有发送信息到每个人的界面上,同时也可以实现界面的...

2018-09-14 12:47:03 994

原创 C++之继承。

前面学习了C++的第一个特性封装,这次就来学一学这第二个特性C++的继承。一。继承的相关概念1.概念:继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。2.简单举例:#include<iostr...

2018-09-01 21:27:02 234

原创 用C++封装顺序表和双循环链表。

今天我来用C++封装一下以前写过的顺序表以及双循环链表。一。顺序表:#include<iostream>using namespace std;//定义一个内置类型int。typedef int DataType;//写一个动态顺序表:class Myvector{public: //形参为空的构造函数 Myvector() :_array(new ...

2018-08-31 12:09:04 318

原创 C++之深浅拷贝及String类基本操作

今天我来介绍一下C++中的深浅拷贝问题。一。浅拷贝1.定义:也称位拷贝,编译器只是将对象中的值采用基本类型值复制的方式拷贝过来,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,以为还有效,所以当继续对资源进行操作时,就会发生访问违规问题。2.举例:class String{public: ...

2018-08-26 18:27:06 316

原创 简析TCP之三次握手与四次挥手。

今天来介绍一下十分重要的TCP三次握手建立连接和四次挥手断开连接。首先来看一下TCP的连接管理机制:一。三次握手建立连接1.首先客户端发送一个连接请求给服务端,而且必须在服务端进入监听状态之后发送,否则发送信息失败,因为只有监听状态下,系统才会接收请求并进行处理,这是第一次握手。服务器接收到请求之后,会应答客户端并发送SYN+ACK,告诉客户端开始连接,这是第二次握手。客户端收到消...

2018-08-20 10:24:09 165

原创 网络基础以及网络套接字的使用

一。网络基础1.网络互联:多台计算机连接起来,完成数据共享。2.网络按覆盖区域可分为:(1)局域网(LAN):计算机数量更多了, 通过交换机和路由器连接在⼀起。(2)广域网(WAN):将远隔千⾥的计算机都连在⼀起。3.网络协议(1)在世界上,有很多网络,但是他们之间的信息传递,如果不统一,就会产生混乱,所以在这时,网络协议就产生了,它来决定信息传递的格式,并且作为一个约束。...

2018-08-18 16:41:22 420

原创 C++的内存管理。

今天我们来学习有关C++的内存管理。一。首先让我们先回忆一下C语言中的内存管理1.在C语言中,我们经常用malloc、calloc以及realloc。举例:void Test (){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2 [] = "abcd...

2018-08-15 16:32:52 353

原创 有关类与对象的练习题——完整版Date

上次讲解了类的所有基本知识和各种有关函数,今天我就来将这些全部用在一起,完成一个完整版的Date类。首先这个类中我会加上构造函数、析构函数、拷贝构造函数、类的赋值操作符重载,以及一系列的操作符重载。最重要的是这个Date可以完成给给定的日期加上多少天后的日期,以及减去多少天后的日期,同时也能算出两个日期的差值。代码如下://Date类#include<iostream>...

2018-08-14 11:27:31 1161

原创 C++之类与对象。

今天来总结一下有关C++的类与对象的相关知识。首先先了解一下类的引入:类是人们对对象的抽象,它不占内存,而对象是类的具体化,占内存。而且在C++中,类是很重要的,因为C++本身就是面向对象的。关注的是对象的属性和数据,所以接下来让我们来认识一下类吧。一。类1.类的定义:class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。 类中的元素称为...

2018-08-13 14:52:58 208

原创 练习之面试题。

今天继续来做一些面试题巩固自己所学的知识。1.将两个链表的值加起来求出新链表。如:p1:1 2 3 4 5 6.   p2:4 5 6 7 8 9.结果是:5 7 9 0 4 6.主要解析:用两个指针循环两个链表,依次将两个指针的值加起来,若大于10,就向下一个求出来的值进位,然后将这个算好的值放入新链表中,这样循环下去即可。举例://尾插函数。SListNode *Lis...

2018-08-10 22:39:23 149

原创 初识C++

今天来介绍一下新学的语言C++。一。了解C++1.首先C++是基于C语言二创造出来的新语言,它扩展了类的机制。然后看看最简单的C++的程序:#include<iostream>#include<Windows.h>using namespace std;int main(){ cout<<"hello world!"<...

2018-08-07 22:03:01 146

原创 各种排序算法总结。

今天来总结一下排序算法。1.冒泡排序:就是从第一个开始依次与后面的值比较,重复上n-1轮就能得到排好序的数组了。//冒泡排序.时间复杂度为O(n^2).空间复杂度为O(1).void Bsort(int a[],int n){ int i,j; if(n<=1) //若数组长度小于等于1则直接退出。 { return; } for(i=0...

2018-08-06 22:51:22 219

原创 练习题(续二)

1.求二叉树中最远的两个点的距离。解析:首先分两种情况。一种是经过根节点的最远距离,一种是两个节点在同一边,又分为左子树最远距离和右子树最远距离。第一种用我们先前学过的求二叉树深度的算法来求出左右子树的深度和即可。第二、三种递归左右子树,每次递归返回的都是三种中的最大值。这样就能得到最远距离了。代码:首先我们需要求深度函数以及比较三个数大小的函数方便使用。(1)//求树的深度。...

2018-08-05 23:15:35 157

原创 数据结构练习题(续)

今天又做了几道还挺简单的链表和二叉树的题,来这里跟大家分享一下。1.分割链表。//分割链表。小于给定值的节点在大于等于给定值的节点前面。//如1-4-2-3-5 变换后:1-2-4-3-5.SListNode *partition(SListNode *head, int x){ SListNode *p=head; //定义三...

2018-08-04 18:27:21 189

原创 一些数据结构练习题

今天来做一些题目来巩固一下所学的知识。1.删除链表中重复的节点。//删除链表中重复的节点。SListNode* deleteDuplication(SListNode* pHead) { SListNode *p1=pHead; //定义快慢指针p1,p2。 SListNode *p2=pHead; SList...

2018-08-03 21:21:06 230

原创 线程概念及其在Linux中的应用。

一。线程基本概念1.首先线程就是一个程序里的执行路线。在Linux中,因为没有专门描述它的东西,所以又称它为轻量级进程。2.线程与进程的联系与区别:(1)进程有独立的地址空间,而线程是共享进程地址空间的,它没有独立的地址空间。(2)进程是操作系统分配资源的基本单位,线程是操作系统CPU调度的一个基本单位。(3)进程和线程还共享着文件描述符、组ID、信号处理方式以及当前工作目录。...

2018-08-02 18:27:12 273

原创 哈希的位图及一些算法的面试题练习

上次介绍了哈希的开闭散列,其实它还有位图以及布隆过滤器。1.位图:它还是分类,十分适合处理大数据量的问题。它是将数组分为好几块,每一块是所求数据类型的比特位大小。通过看比特位上是否为1,知道它是否存在。以下是它的基本用法:#pragma once#include<stdio.h>#include<assert.h>#include<stdlib....

2018-08-01 18:39:11 303

原创 哈希表的基本算法。

今天我来分享一下有关哈希的基本算法。1.首先哈希就相当于分类。这种存储机构通过某种函数时元素的存储位置与它的关键词之前能够建立一一映射的关系,那么在查找时通过该函数可以快速找到该元素。2.同时在哈希中,会出现一种哈希冲突的情况。处理哈希冲突有线性探测、二次探测。3.闭散列代码://闭散列。#pragma once#include<stdio.h>#includ...

2018-07-31 21:13:48 567

原创 搜索二叉树的简单应用。

上次讲了搜索二叉树的基本算法,这次就来应用它做一些简单的问题。一。判断单词是否拼写正确。(一个简单的字典)#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include<windows.h>typ...

2018-07-30 13:08:26 224

原创 二叉搜索树的基本算法

今天我来介绍一下 搜索二叉树及其算法。一。首先我们要先知道什么是搜索二叉树。1.二叉搜索树又称为二叉排序树,它或者是一个空树。它的主要性质是(1)若他的左子树不为空,则左子树上所有节点的值都小于根节点的值。(2)若他的右子树不为空,则右子树上所有节点的值都大于根节点的值。(3)它的左右子树也分别为二叉搜索树。2.它的基本算法:查找、插入以及删除的普通和递归方法。#pr...

2018-07-29 23:02:57 1253

原创 Linux中练习题。

今天我们不讲什么新内容,来用以前的知识进行应用,做一些小练习。1.shell的制作:这就是自制的shell终端: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<sys/wait.h> 4 #include<string.h> 5 #include<unist...

2018-07-28 15:43:33 312

原创 对Linux中进程信号的理解与练习。

上次学习了进程间的通信,这次来学习更难得进程信号。一。信号。1.首先我们一般用kill -l来查看系统的所有信号。[ymk@localhost d6]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) S...

2018-07-27 15:16:25 177

原创 Linux之进程间的通信。

前段时间学习了进程的基本操作,今天来学习一下Linux中进程间的通信。一。进程间通信也叫IPC:是为了实现不同进程之间的数据交互。1.进程间的通信有管道、消息队列、共享内存以及信号量。二。管道:1.管道是Unix中最古老的进程间通信的形式。总结地说:管道就是从一个进程连接到另一个进程的一个数据流。2.普通常用的管道:如下操作: 3.匿名管道:用pipe实现创建一个无...

2018-07-26 18:03:14 239

原创 有关树的基本算法和练习题。

今天我来分享一下有关树的一些简单应用。首先我们需要三个头文件:tree.h   queue.h   stack.h#pragma once#include<stdio.h>#include<assert.h>#include<Windows.h>typedef char DataType;typedef struct TreeNode{ struc...

2018-07-13 11:58:26 1432

原创 堆的基本算法及应用。

今天我来介绍一下堆的基本算法和它的一些简单应用。一 。基本算法:#pragma once#include<stdio.h>#include<string.h>#include<assert.h>#include<stdlib.h>#include<Windows.h>typedef struct Heap{ int arr...

2018-07-11 12:17:26 508

原创 基础I/O

今天我来总结一下Linux中的基础I/O的相关知识。一。open/read/write/close函数。1.open:int open(const char *path,int flag,mode_t Mode):打开或创建文件。2.read:ssize_t read(int fd,void *buf,size_t len);从文件中读取数据。返回实际读取的字节数。3.write:ssize_t ...

2018-07-10 12:24:16 129

原创 进程的基本操作及应用。

一。进程创建:主要用fork()函数创建进程,当调用fork时,内核会做:(1)分配新的内存块和内核数据结构给子进程。(2)将父进程部分数据内容拷贝至子进程。(3)添加子进程到系统进程列表当中。(4)fork返回,开始调度器调度。举例: #include<stdio.h> 2 #include<unistd.h> 3 #include<stdlib.h>...

2018-07-09 12:29:38 692

原创 有关进程的知识。

今天我来总结一下有关进程的知识,希望大家能多多游览学习。首先在我们学习进程前得了解冯诺依曼结构,这对我们有很大的帮助。一。进程的概念进程:从用户角度来看,它就是程序一次动态的执行过程;也是操作系统分配资源的基本单位,还是最小单位。并且它还有自己的运行状态和虚拟的地址空间。二。进程的描述进程控制块PCB。Linux中常用的PCB就是task_struct。它的内容分类:(1)标示符:描述本进程的唯一...

2018-07-08 20:23:12 119

原创 有关栈和队列的练习题。

今天继续来练习栈与队列。1.用栈来实现括号匹配问题。#pragma once#include<stdio.h>#include<assert.h>#include<string.h>#include<Windows.h>typedef int DataType;typedef struct Stack{ //定...

2018-07-06 12:31:35 1360

原创 有关栈和队列的面试题

上次学会了栈和队列的基本算法。今天我就来进行一些面试题的练习,巩固一下所学的知识。1.使用两个栈实现一个队列。typedef struct SQueue { Stack stack1; // 入数据的 Stack stack2; // 出数据的} SQueue;void Init(SQueue *pSQ) //初始化。{ Stack *p1, *p2; p1 = &(...

2018-07-05 19:26:52 222

原创 栈和队列的基本算法。

今天我学习了一些有关栈和队列的基本算法,拿出来和大家分享一下。首先我们要知道他们的定义:(1)栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。不含任何元素的栈称为空栈,栈又称为后进先出的线性表。(2)队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表。插入的叫队尾,删除的叫队头,对列具有先进先出的特性。#pr...

2018-07-04 14:27:28 2615

原创 有关链表的面试题(再续)

今天让我们来做一些复杂一些的链表面试题。1.复杂链表的复刻。typedef struct CN{ //复杂链表的结构体。 int data; //每个节点的数据。 struct CN *pNext; //指向下一个节点。 struct CN *pRandom; //指向随机节点或NULL。} CN;...

2018-07-03 12:49:17 134

原创 有关链表的面试题续。

今天我们再来做一些有关链表的面试题。1.单链表实现约瑟夫环。SListNode * JocephCircle(SListNode *pFirst, int k){ SListNode *pNode=pFirst; //定义两个指针分别指向头指针和空指针。 SListNode *q=NULL; int n=k; ...

2018-07-01 19:10:05 108

原创 有关链表的练习题。

刚刚学了线性表,会了一些基本操作,现在来做一些经典面试题来巩固一下知识。一。打印链表从尾到头。//(1)从尾到头打印单链表。普通法:void Print(SListNode *pFirst){ SListNode *end=NULL; //定义指针指向空。 SListNode *pNode=pFirst; //定义指针指向头结点。 while(end!=pFirst...

2018-06-19 18:42:07 434

原创 Linux之gdb与Makefile的应用及命令。

今天我们来看一看Linux中的gdb调试和Makefile命令。一。gdb:调试器。注:要用gdb调试,前提是在源代码生成时要加上-g选项才能应用,否则会失败。它的基本命令有:l行号:显示从第几行开始,屏幕每次只能显示10行。l函数:显示函数的源代码。r:运行程序。   n:单条执行。  s :会进入函数调用。b 行号:设置断点在第几行。   i b :查看断点信息。whatis:打印类型。   ...

2018-06-15 17:00:11 570

原创 练习之注释转换。

今天我们来做一个经典练习题,注释转换。首先我们得先知道各种状态之间的关系:代码如下:#define _CRT_SECURE_NO_WARNINGS_#include<stdio.h>#include<stdlib.h>#include<Windows.h>typedef enum State{ NOT_COMMENT, //不是注释。 ...

2018-06-14 22:52:15 152

原创 链表的基本算法。

今天我们来学习一波有关链表的基本算法。#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<Windows.h>// 值类型 typedef int DataType; typedef struct SListNode { Dat...

2018-06-13 17:54:29 1466

原创 数据结构之顺序表。

今天我们来学习一下顺序表的各种算法,希望大家能认真练习。#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<Windows.h>typedef int DataType;#define MAX_SIZE (100) typedef stru...

2018-06-12 14:16:36 136

原创 Linux之vim编辑器的使用及命令。

今天我来学习一下Linux中一个很重要的编辑器vim,我们以后再Linux中想编程都得在vim里,所以说它十分重要。一。首先vim可分为三个模式:命令模式、插入模式、末行模式。他们之间的转换如图:...

2018-06-08 16:44:41 227

原创 输入/输出函数知识总结。

今天我们来学习C语言最后的基本知识,关于输入输出的问题。一。错误报告函数:perror。它以一种简单、统一的方式报告错误。例如:#include<stdio.h>#include<Windows.h>int main(){ FILE * pFile; pFile=fopen("unexit.ent","rb"); if(pFile==NULL)...

2018-06-06 19:26:08 874

空空如也

空空如也

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

TA关注的人

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