自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 删除无头单链表的非尾结点并打印单链表

问题描述:假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。一般链表的删除需要顺着头结点向下找到当前待删节点的前驱节点,然后让前驱节点指向后驱节点就行了。这里,没有头结点,就没办法找到前驱结点。但我们可以采用“狸猫换太子”的做法。我们把当前结点“看成”是前驱结点,把后续节点当做待删结点删除(删除之前,记下后续结点的值),只需

2017-07-17 22:25:37 291

原创 判断俩个链表是否相交,若相交求交点(考虑带环和不带环)

问题描述(链表不带环):一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。 思路:1、碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的。2、当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同。3、第三种思路是比较奇特的,在编程之美上看到的。先遍历第一个链表到他的尾部,然后将尾部的next指

2017-07-17 22:12:11 783

原创 单链表带环问题

判断单链表是否带环?若带环,求环的长度?求环的入口点?并计算每个算法的时间复杂度&空间复杂度 分析:不带环fast指针可以走到尾,带环则走不到;若带环fast指针一次走两步,slow指针一次走一步。(fast和slow的间距会逐渐缩小,一次缩小1,不会错过,其余走法可能会跳过,或者构成死循环);入口点:第二次的相遇点ListNode* IsHaveLoop(ListNode* plist)//判断

2017-07-17 11:20:38 319

原创 单链表逆置,反转,并查找倒数第K个结点

typedef struct Node{ Node(const int& value) : m_value(value) , m_pNext(NULL) {} int m_value; Node* m_pNext;}Node,pNode ResList(pNode pHead){ if (pHead == NULL) return N

2017-07-17 11:04:52 219

原创 如何用SHELL编写一个进度条

代码如下:#!/bin/bashi=0lable=('|' '\\' '-' '/')while [ $i -le 100 ]do printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${lable[$i%4]}" str='#'$str sleep 0.1 let i++doneprintf "\n"123456

2017-07-17 10:38:14 211

原创 俩个有序链表的合并

问题定义: 写一个函数SortedMerge函数,该函数有两个参数,都是递增的链表,函数的功能就是合并这两个递增的链表为一个递增的链表,SortedMerge的返回值是新的链表。新链表由前两个链表按元素递增顺序合并而成,也就是说它不会创建新的元素。 比如:这里有两个链表,分别是 list1: 5->10->13->15 list2: 2->3->16->20 SortedM

2017-07-14 23:19:55 192

原创 eval调研

eval是shell内置的命令。eval命令可以对命令行求值,然后做shell替换,再执行替换后的命令行。 1、eval会把赋值语句中双引号之间的内容直接赋给‘=’前的变量,而不是当作字符串赋给变量。 例如:version=”(2 4)” 是将字符串赋值给 version;eval version=”(2 4)” 执行时变成了 version=(2 4), 是把数组 (2 4) 赋值给 vers

2017-07-04 17:09:30 221

原创 epoll_server

代码如下:#include <sys/socket.h>#include <sys/epoll.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <pthread.h>#include <errno.h>#defi

2017-07-04 16:59:32 174

原创 poll_server

poll与select不同在于描述符存储方式不同和参数类型不同。 1.结构体数组的管理:当每次有需要关心的描述符时,将其放入结构体中,每次有无效的描述符后,将其描述符置-1,下次poll函数会忽略它。当有新的描述符加入时,从头遍历结构体,将为-1的元素设为要关心的描述符事件状态。切记:当新的描述符加到结构体数组末尾时要更新关心描述符个数,即poll第二个参数。 2.每次调用poll后,结构体

2017-06-30 16:45:57 281

原创 udp_server

udp_server代码如下:#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <stdl

2017-06-30 16:33:36 179

原创 select服务器

select代码如下:#include<stdio.h>#include<sys/socket.h>#include<sys/types.h>#include<netinet/in.h>#include<arpa/inet.h>#include<fcntl.h>#include<stdlib.h>#include<unistd.h>#include<sys/select.h>int

2017-06-30 16:27:49 183

原创 tcp_server和tcp_client

tcp_server代码如下:#include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/types.h>#include<string.h>static void usage(const char *proc){

2017-06-30 16:11:25 963

原创 URG_PSH区别

一、URG&PSH的区别 TCP的报头信息有六个控制位,说明本段文的性质;分别为紧急URG、确认ACK、推送ACK、复位RST、同步SYN、终止FIN;今天我们来主要来介绍介绍PSH和URG的区分;1.URG是什么? URG表示紧急指针,与紧急指针字段搭配使用,当URG = 1时,表示紧急指针字段有效。它告诉系统此报文有紧急数据,应尽快传送(相当于高优先级数据),而不按照原来的排序顺序来传送

2017-06-27 17:17:58 631

原创 多线程多进程服务器与进程线程池

1.进程池(1)进程池是由服务器预先创建的一组子进程,这些子进程的数目在3-10个之间。进程池中的所有子进程都运行着相同的代码,并具有相同的属性,比如优先级,PGID等等。因为进程池在服务器启动之初就创建好了,所以他们没有打开不必要的文件描述符(从父进程继承而来),也不会错误地使用大块的堆内存(从父进程复制得到)。(2) 当有新的任务到来时,主进程将通过某种方式选择进程池中的某一个子进程来为之服务。

2017-06-23 16:59:24 464

原创 tcp定时器调研

TCP常用的四种定时器:重传定时器坚持定时器保活定时器时间等待定时器 具体介绍: (1)重传定时器①应用场景: TCP报文段超时② 特点:对于tcp协议,在规定的时间内,发现没有收到ACK,就会重新发送消息,如果还没有收到ACK,继续重新发送消息,每次重新发送消息的时间间隔不同,默认第一次重传是发现超时后1s,第二次重传是第一次重传后3s,第三次是6s;③重传时间=2*RTT 计算RTT常

2017-06-23 16:45:01 204

原创 tcp三次握手与四次挥手

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。 那如何断开连接呢?简单的过程如下: 【注意】中断连接端可以是Client端

2017-06-23 16:42:10 130

原创 NAT技术与代理服务器调研

一、首先看看什么是NAT技术以及什么时候会涉及到它?1、所谓NAT技术就是网络地址转换。 2、那么它用在什么地方呢? 在专用网内部的一些主机本来已经分配到了本地IP地址,但是现在又想和因特网上的主机通信。那么应当采用什么措施呢? 最简单的办法就是设法再申请一些全球IP地址,但这在很多情况下是行不同的,因为全球的IPv4的地址已经所剩不多了,目前使用最多的方法就是采用网络地址转换。但是这种

2017-06-20 15:01:14 310

原创 端口分类调研

端口是什么?通常我们所说的端口就是指计算机端口。计算机端口是英文port的意译,可以认为是计算机与外界通讯交流的出口。端口又可分为三大类:公认端口(Well Known Ports)、注册端口(Registered Ports)以及动态和/或私有端口(Dynamic and/or Private Ports)。公认端口:从0到1023,它们紧密绑定于一些服务。通常这些端口的

2017-06-13 21:33:07 239

翻译 gdb调试多进程和多线程

一,gdb的基础知识1>介绍: gdb是Linux环境下的代码调试工具。 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出:ctrl + d 或 quit 5>调试过程中的常用命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:运

2017-06-12 15:28:27 126

原创 arp脚本

【arp脚本】

2017-06-12 15:15:11 156

原创 CRC校验

【CRC校验】【定义】       CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。、【校验码位数】CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简

2017-06-12 15:03:25 244

原创 守护进程

守护进程是什么?        守护进程也称精灵进程。试运行在后台的一种特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。如何创建?      (1)调用umask将文件模式创建屏蔽字设置为0.       (2)调用fork,父进程退出。       (3)调用setsid创建一个新会话。       (4)将当前工作目录更改为根目录。   

2017-06-09 16:54:21 135

原创 crond和crontab调研

cron机制        cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制crontab参数        -u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab        crontab -u 使用者名称        -l:可以列出crontab的内容

2017-06-09 16:51:34 410

原创 二叉树

#include #include #include #include using namespace std;template class T>struct TreeNode{ TreeNode(const T& value = T()) :_value(value) ,_lchild(0) ,_rchild(0)

2017-05-05 20:07:25 167

原创 可重入函数与线程安全关系

什么是可重入函数和不可重入函数可重入函数     在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。不可重入函数在实时系统设

2017-05-05 19:10:19 230

原创 用回溯法递归实现迷宫

#include #define N 19//整个迷宫大小(包括最外层墙壁)char Maze[N][N] = {{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },{ 1, 1, 1

2017-04-19 22:58:34 387

原创 task_struct结构体所有成员用法

尽力达到最全。 1、进程状态 volatile long state;int exit_state;    state成员的可能取值如下: #define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2#define __TASK_STOPPED 4#define

2017-02-19 23:06:39 378

原创 C++编写日期类

#includeusing namespace std;class Data{public:void InitData(int year, int month, int day){_year = year;_month = month;_day = day;}void PrintData(){cout }     privat

2017-02-18 23:52:31 418

原创 linux中vim编辑器的简单配置

ctrl + w + h 光标 focus 左侧树形目录ctrl + w + l 光标 focus 右侧文件显示窗口ctrl + w + w 光标自动在左右侧窗口切换ctrl + w + r 移动当前窗口的布局位置o 在已有窗口中打开文件、目录或书签,并跳到该窗口go 在已有窗口 中打开文件、目录或书签,但不跳到该窗口t 在新

2017-02-18 23:42:41 221

原创 用linux进行简单进度条编辑

一·单步编写makefile。二·编写好Procbra.c三 编写完成后就利用它们来生成进度条,结果如下生成后利用make clean删除之前生成的Procbra.i, Procbra.s,Procbra.o,以及Proc

2017-02-17 21:36:54 240

原创 C语言基础测试题关于给定任意俩个数对它们进行交换输出

#include#includevoid swap(int *a,int *b){int tmp=*a;*a=*b;*b=tmp;}int main(){int a=10;int b=20;swap(&a,&b);printf("a=%d,b=%d\n",a,b);system("pause");return 0;}

2016-10-24 16:43:37 458

空空如也

空空如也

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

TA关注的人

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