<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[long0624的博客]]></title><description><![CDATA[hello world]]></description><link>https://blog.youkuaiyun.com/long0624</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; long0624]]></copyright><item><title><![CDATA[链表带环问题]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81872650</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81872650</guid><author>long0624</author><pubDate>Tue, 21 Aug 2018 20:44:57 +0800</pubDate><description><![CDATA[1、判断链表是否带环 
解析：这里可以用到追及的思维，设置两个快慢指针同时从头结点出发。如果链表带环，则快指针一定会追上满指针。



PNode HasCircle(PNode pHead)// 判断单链表是否带环 
{
    //快慢指针
    PNode pFast = pHead;
    PNode pSlow = pHead;

    while (pFast &amp;amp;amp;&amp;amp;amp...]]></description><category></category></item><item><title><![CDATA[常见链表面试题]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81673655</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81673655</guid><author>long0624</author><pubDate>Sun, 19 Aug 2018 19:39:11 +0800</pubDate><description><![CDATA[链表节点的定义



typedef int DataType;

typedef struct SlistNode{
    DataType data;
    struct SlistNode *pNext;
}Slist, *PNode;

1. 逆序打印带头结点的单链表



void PrintListFromTail2Head(PNode pHead)//逆序打印链表
{
    /...]]></description><category></category></item><item><title><![CDATA[单链表基本操作——头插头删、尾插尾删、任意位置增加删除节点、查找元素、打印、销毁]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81486892</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81486892</guid><author>long0624</author><pubDate>Tue, 07 Aug 2018 19:19:09 +0800</pubDate><description><![CDATA[

#pragma once
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;assert.h&amp;gt;

typedef int DataType;

typedef struct SlistNode{
    DataType data;
    struct SlistNode *pNext;
}Slist, *PNod...]]></description><category></category></item><item><title><![CDATA[鸡尾酒排序和冒泡优化]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81385942</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81385942</guid><author>long0624</author><pubDate>Fri, 03 Aug 2018 13:26:20 +0800</pubDate><description><![CDATA[#include&amp;lt;iostream&amp;gt;
using namespace std;


void Print(int(&amp;amp;ra)[10])//打印函数
{
    int i = 0;
    for (i; i &amp;lt; 10; ++i){
        cout &amp;lt;&amp;lt; ra[i] &amp;lt;&amp;lt; &quot; &quot;;
    }
}
void Swap(int* x, int...]]></description><category></category></item><item><title><![CDATA[结构体内存对齐]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81365893</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81365893</guid><author>long0624</author><pubDate>Thu, 02 Aug 2018 19:07:46 +0800</pubDate><description><![CDATA[结构体为什么要内存对齐？ 
大部分的参考资料都是如是说的：

1、平台原因(移植原因)： 
不是所有的硬件平台都能访问任意地址上的任意数据的；某些硬件平台只能在某些地址处取某些特定类型的数据，否则抛出硬件异常。

2、性能原因：数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 
原因在于，为了访问未对齐的内存，处理器需要作两次内存访问；而对齐的内存访问仅需要一次访问。

结构体内存对其规则：

...]]></description><category></category></item><item><title><![CDATA[给大家安利一个简单的vim小技能]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81317251</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81317251</guid><author>long0624</author><pubDate>Tue, 31 Jul 2018 17:24:19 +0800</pubDate><description><![CDATA[对于刚上手vim,没有安装各种插件的小伙伴来说没有缩行简直不要太痛苦。在vim上写完代码后，如果你觉得你代码看起来不是很整齐美观。这里给大家安利一个小技能

在指令模式下输入：gg=G      (敲重点！！！！小鸡鸡等于大鸡)    还是很好记的哈哈哈哈哈 
不过建议大家还是尽量不要用！！！这个指令也不是万能的！整齐的代码还是要靠我们自己写出来

 
...]]></description><category></category></item><item><title><![CDATA[静态顺序表]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/81292109</link><guid>https://blog.youkuaiyun.com/long0624/article/details/81292109</guid><author>long0624</author><pubDate>Mon, 30 Jul 2018 21:02:46 +0800</pubDate><description><![CDATA[顺序表是一个线性表，它是由一段连续的存储单元来依次存储数据元素的线性结构。 


下面是代码和一些难点解释

.h文件

#pragma once

#ifndef _Seqlist_H_
#define _Seqlist_H_

#include &amp;lt;tchar.h&amp;gt;
#define MAX 10
typedef int Typedata;

typedef struct Seqlis...]]></description><category></category></item><item><title><![CDATA[C++__继承]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80252779</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80252779</guid><author>long0624</author><pubDate>Fri, 18 May 2018 17:26:15 +0800</pubDate><description><![CDATA[什么是继承？

　　继承机制是提高代码复用率的最重要手段，它可以在保持原有类的基础上进行扩展，增加功能。这样产生的类叫派生类（也叫子类） 
　　取个例子：例如手机的更新换代 
 
怎么使用继承？...]]></description><category></category></item><item><title><![CDATA[类和对象]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80195281</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80195281</guid><author>long0624</author><pubDate>Fri, 04 May 2018 14:57:46 +0800</pubDate><description><![CDATA[
ｔｈｉｓ指针
构造函数
析构函数
运算符重载
友元函数


 
编译器又是如何识别类呢？ 
１）首先识别类的类名　　２）识别类的成员变量 
３）识别类的成员函数并对类的成员函数进行修改（将当前对象的地址（ｔｈｉｓ指针）传给函数）

ｔｈｉｓ指针

this指针的特性



1)this指针的类型：类类型* const
2)this指针不是对象的一部分，不影响sizeof的结果
3)其作用域在非静...]]></description><category></category></item><item><title><![CDATA[模拟String类]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80193539</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80193539</guid><author>long0624</author><pubDate>Fri, 04 May 2018 12:52:16 +0800</pubDate><description><![CDATA[#include&amp;lt;string.h&amp;gt;
#include&amp;lt;iostream&amp;gt;
using namespace std;

//普通版
class String
{
public:
    String()
        :_str(new char[1])
    {
        _str = '\0';
    }

    String(char* str = &quot;&quot;...]]></description><category></category></item><item><title><![CDATA[引用]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80074768</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80074768</guid><author>long0624</author><pubDate>Thu, 03 May 2018 17:58:07 +0800</pubDate><description><![CDATA[引用不是定义一个新的变量，而是给已存的变量起一个别名，编译器不会给引用变量开辟内存空间，它和引用变量共用同一块内存空间。引用在定义时必须要初始化。　　类型＆　引用变量名　＝　已定义变量名（类型必须和已定义的变量同种类型） 
　　 
　　 
　　一个变量可以有多个引用变量名，引用变量名只能在引用的时候引用一次，再不能引用其他实体。　　常引用 
　　 
　　由上图可见ｃｏｎｓｔ修饰变量ａ时，用ｉｎｔ＆定]]></description><category></category></item><item><title><![CDATA[求一个函数的运行时间]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80170211</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80170211</guid><author>long0624</author><pubDate>Wed, 02 May 2018 18:43:53 +0800</pubDate><description><![CDATA[#include &amp;lt;iostream&amp;gt;
#include &amp;lt;ctime&amp;gt;
using namespace std;

clock_t start;
clock_t End;


void Fun()
{
    for (int i = 0; i &amp;lt; 10000; i++)
    for (int j = 0; j = 10000; j++)
        ;
}...]]></description><category></category></item><item><title><![CDATA[命名空间]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80071098</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80071098</guid><author>long0624</author><pubDate>Tue, 24 Apr 2018 21:32:58 +0800</pubDate><description><![CDATA[　　在Ｃ＋＋中，名称可以是变量、函数、结构、枚举、类以及类的结构成员。随着项目的增大，名称相互冲突的可能性将增加。例如，两个库都定义了名为Ｌｉｓｔ、Ｔｒｅｅ、和Ｎｏｄｅ，但是定义的方式不一样。用户可能使用一个库的Ｌｉｓｔ用另一个库的Ｔｒｅｅ。这种冲突被称为名称空间问题。为避免这种冲突，出现了ｎａｍｅｓｐａｃｅ关键字 
　　定义：　

namespace N1
{
    int a;
    in...]]></description><category></category></item><item><title><![CDATA[函数重载]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80068317</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80068317</guid><author>long0624</author><pubDate>Tue, 24 Apr 2018 18:01:48 +0800</pubDate><description><![CDATA[　　函数重载是函数的一种特殊情况，ｃ＋＋允许在同一作用域中声明几个功能类似的函数 
构成函数重载的条件是： 
　　　１、作用域必须相同 
　　　２、函数名必须相同 
　　　３、参数列表不同（参**数个数不同，参数类型不同，参数类型次序不同） 
返回值可同或不同 
　　　（注：但是只有返回值不同其他全都相同不能构成函数重载） 
　　　 
 
可以看到只有返回值不同时不能构成函数重载 
调用函数时必须...]]></description><category></category></item><item><title><![CDATA[缺省参数]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80066898</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80066898</guid><author>long0624</author><pubDate>Tue, 24 Apr 2018 16:45:30 +0800</pubDate><description><![CDATA[Ｃ语言中，函数没有指定参数列表时，默认可以接收任意多个参数。而Ｃ＋＋中，因为严格的参数类型检测，没有参数列表的函数默认为ｖｏｉｄ，不接收任何参数。 
　　缺省参数是在声明或定义函数时为函数的参数指定一个默认值。（相当于备胎哈哈哈）在调用函数时，如果有实参就调用指定的实参，没有指定的实参那么就采用该默认值。下面上实例 
　 
　 
　有指定实参 
　

　缺省参数又可以分为全缺省参数和半缺省参数...]]></description><category></category></item><item><title><![CDATA[编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80021964</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80021964</guid><author>long0624</author><pubDate>Fri, 20 Apr 2018 17:37:23 +0800</pubDate><description><![CDATA[#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#inlude&amp;lt;unistd.h&amp;gt;

int process_create(int(*func)(),const char *file,char *argv[])
{
    int ret = 0;
    pid_t pid = fork();
    if(pid == -1){
 ...]]></description><category></category></item><item><title><![CDATA[自主实现简单的shell]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/80021154</link><guid>https://blog.youkuaiyun.com/long0624/article/details/80021154</guid><author>long0624</author><pubDate>Fri, 20 Apr 2018 16:53:56 +0800</pubDate><description><![CDATA[#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;unistd.h&amp;gt;
#include&amp;lt;stdlib.h&amp;gt;
#include&amp;lt;sys/wait.h&amp;gt;

char *argv[8];
int argc = 0;
void do_shell()
{
     pid_t pid;
     if((pid == fork()) == -1){
   ...]]></description><category></category></item><item><title><![CDATA[模拟实现孤儿进程]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/79932076</link><guid>https://blog.youkuaiyun.com/long0624/article/details/79932076</guid><author>long0624</author><pubDate>Fri, 13 Apr 2018 17:24:47 +0800</pubDate><description><![CDATA[什么是孤儿进程

　　孤儿进程：一个父进程退出，而它的一个或多个子进程还在运行，那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养，并由init进程对它们完成状态收集工作。 
　　

模拟实现

...]]></description><category></category></item><item><title><![CDATA[模拟实现僵尸进程]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/79931897</link><guid>https://blog.youkuaiyun.com/long0624/article/details/79931897</guid><author>long0624</author><pubDate>Fri, 13 Apr 2018 17:15:35 +0800</pubDate><description><![CDATA[什么是僵尸进程（zimbie）？

　　 
　　当进程退出并且父进程没有读取到子进程退出返回的代码时就会产生僵尸进程。一个进程在调用exit命令结束自己的生命的时候，其实它并没有真正的销毁， 而是留下一个称为僵尸进程（Zombie）的数据结构（系统调用exit，它的作用是 使进程退出，但也仅仅限于将一个正常的进程变成一个僵尸进程，并不能将其完全销毁）以终止状态保存在进程表中。



模拟实现僵尸进...]]></description><category></category></item><item><title><![CDATA[task_struct结构体，理解其中各个字段的含义]]></title><link>https://blog.youkuaiyun.com/long0624/article/details/79900605</link><guid>https://blog.youkuaiyun.com/long0624/article/details/79900605</guid><author>long0624</author><pubDate>Wed, 11 Apr 2018 18:01:41 +0800</pubDate><description><![CDATA[什么是task_struct?

　　 
　　1.Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程，这个结构体包含了一个进程所需的所有信息。 它定义在linux-2.6.38.8/include/linux/sched.h文件中  
task_struct都可能包含哪些成员信息？  
　　1.进程状态，记录进程在等待，运行，或死锁  
　　2.调度信息，由哪个调度函数...]]></description><category></category></item></channel></rss>