<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wswifth的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wswifth</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wswifth]]></copyright><item><title><![CDATA[inde节点和file结构的区别]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/6667663</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/6667663</guid><author>wswifth</author><pubDate>Sun, 07 Aug 2011 21:39:58 +0800</pubDate><description><![CDATA[inode 或i节点是指对文件的索引。如一个系统，所有文件是放在磁盘或flash上，就要编个目录来说明每个文件在什么地方，有什么属性，及大小等。就像书本的目录一样，便于查找和管理。这目录是操作系统需要的，用来找文件或叫管理文件。许多操作系统都用到这个概念，如linux， 某些嵌入]]></description><category></category></item><item><title><![CDATA[选择排序，堆排序，归并排序]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5856529</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5856529</guid><author>wswifth</author><pubDate>Wed, 01 Sep 2010 20:47:00 +0800</pubDate><description><![CDATA[选择排序堆排序：#include
using namespace std;
void print(int*,int);

/*
 *堆排序
*/
void sift(int* s,int len,int i)
{
	int j,temp;
	if((2*i+1)  len)//只有左节点
		{
			if(s[i] > s[2*i+1])   //父节点和左子节点互换
			{
				temp = s[2*i+1];
				s[2*i+1] = s[i];
				s[]]></description><category></category></item><item><title><![CDATA[二分查找，分块查找，哈希查找]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5841790</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5841790</guid><author>wswifth</author><pubDate>Thu, 26 Aug 2010 20:33:00 +0800</pubDate><description><![CDATA[二分查找法：如下例程序：#include
using namespace std;

//快速排序进行排序
void quickSort(int* qs,int low,int high)
{
	int flag = 0;        //比较标志位
	int i=low,j=high;           //游标
	flag = qs[low];
	if(high > low)
	{
		while(j>i)
		{
			while((j>i)&&(flagi)&&(fla]]></description><category></category></item><item><title><![CDATA[树的基本定义，二叉树，二叉排序树，森林，最优二叉树（哈夫曼树，哈夫曼编码）]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5835716</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5835716</guid><author>wswifth</author><pubDate>Tue, 24 Aug 2010 20:41:00 +0800</pubDate><description><![CDATA[遍历二叉树的三种方式：先序遍历，中序遍历，后序遍历线索二叉树二叉树的深度计算排序二叉树：树和森林：在这里，保存树和森林的办法是用二叉树作为保存方式，还是通过链式结构进行保存，每个节点的左边保存的为该节点的第一个孩子节点，而后节点则为该节点所在深度的下一个兄弟节点。如下图：最优二叉树（哈夫曼树）哈夫曼编码：它是根据每一个源字符出现的估算概率而建立起来的（出现概率高的字符使用较短的编码，反之出现概率低的则使用较长的编码，这便使编码之后的字符串的平均期望长度降低，从而达到无损压缩数据的目的）。如下例：]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5830136</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5830136</guid><author>wswifth</author><pubDate>Sun, 22 Aug 2010 14:40:00 +0800</pubDate><description><![CDATA[<br />快速排序是一种划分交换排序，它采用的是分治法的策略。<br /> <br />分治法的基本思想：将原问题分解为若干个规模更小但结构与原问题相似的子问题，递归的解这些子问题，然后将这些子问题的解组合为原问题的解。<br /> <br />下面是一个快速排序法的程序，在这个代码中，首先将代排序数组的第一个单元作为flag（比较标志位）。随后从数组的末尾进行比较，如果发现有数据单元a的值小于flag，那么就将他存入第一个数组单元。此时j指向a。随后开始从数组前进行搜寻比较，直到发现有一个值比flag要]]></description><category></category></item><item><title><![CDATA[直接插入排序，希尔排序]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5829156</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5829156</guid><author>wswifth</author><pubDate>Sat, 21 Aug 2010 20:05:00 +0800</pubDate><description><![CDATA[      每次从无序表中取出第一个元素，把它插入到有序表的合适位置，使有序表仍然有序。 　　第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描，把第三个数按大小插入到有序表中；依次进行下去，进行了(n-1)趟扫描以后就完成了整个排序过程。 直接插入排序属于稳定的排序，时间复杂性为o(n^2)，空间复杂度为O(1)。　　直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一]]></description><category></category></item><item><title><![CDATA[冒泡排序]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5829090</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5829090</guid><author>wswifth</author><pubDate>Sat, 21 Aug 2010 19:01:00 +0800</pubDate><description><![CDATA[冒泡排序属于交换排序的一种，交换排序的基本思想是：两两比较待排序记录的关键字，发现两个记录的次序相反时即进行交换，直到没有反序的记录为止。它的时间复杂度为O（n^2），虽然不及堆排序、快速排序的O（nlogn，底数为2），但是有两个优点：1.“编程复杂度”很低，很容易写出代码；2.具有稳定性，这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列，而堆排序、快速排序均不具有稳定性。由于冒泡排序记录移动次数较多，故平均时间性能比直接插入排序要差得多。实现代码：#include
using name]]></description><category></category></item><item><title><![CDATA[Linux内核网络系统结构图（TCP/IP）和源代码的布局]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5794900</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5794900</guid><author>wswifth</author><pubDate>Sat, 07 Aug 2010 11:54:00 +0800</pubDate><description><![CDATA[file: init.h #define __init_call __attribute__ ((unused,__section__ (".initcall.init"))) #define __exit_call  __attribute__ ((unused,__section__ (".exitcall.exit"))) extern initcall_t __initcall_start, __initcall_end; #define __initcall(fn)            /   ]]></description><category></category></item><item><title><![CDATA[C++学习笔记（二）]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5793267</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5793267</guid><author>wswifth</author><pubDate>Fri, 06 Aug 2010 14:42:00 +0800</pubDate><description><![CDATA[<br />友元<br /> <br />友元包括友元函数和友元类。<br />友元可以访问其有好友关系的类中的私有成员。<br /> <br />将一个普通函数在类体中通过friend关键字经行声明，就是将该函数声明为该类的友元函数。<br /> <br />在通过友元函数访问私有数据成员时，必须加上对象名。所以，友元函数一般都会有一个该类的引用变量，这个变量用于接收传来的对象。<br /> <br />友元函数不仅可以是一般函数（非成员函数），而且可以是另一个类中的成员函数。在这里，就用到了提前引用声明]]></description><category></category></item><item><title><![CDATA[C++学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5790945</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5790945</guid><author>wswifth</author><pubDate>Thu, 05 Aug 2010 16:21:00 +0800</pubDate><description><![CDATA[用const声明的变量被称为常变量，常变量在程序运行期间是不能改变的const int a = 3; //其指定值始终为3在定义常变量时必须同事对它初始化（既指定其值）。此后它的值不能再改变string在C++中也有定义。在使用方法上和其他int，char类型一样。可用来定义变量，字符串常量以“/0”作为结束符。但将字符串常量存放到字符串变量中时，只存放字符串本身而不存放“/0”。并且在字符串中：1。字符串赋值用赋值号2。字符串连接用加号3。字符串比较直接用关系运算符为动态的分配和撤销内存，C++中使用了n]]></description><category></category></item><item><title><![CDATA[多态和虚表]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5741687</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5741687</guid><author>wswifth</author><pubDate>Sat, 17 Jul 2010 13:22:00 +0800</pubDate><description><![CDATA[<br />多态<br />多态的这个概念稍微有点模糊，如果想在一开始就想用清晰用语言描述它，让读者能够明白，似乎不太现实，所以我们先看如下代码： <br />//例程１ <br />#include <iostream>      <br />usingnamespace std;    <br />    <br />class Vehicle <br />{    <br />public:    <br />     Vehicle(float speed,int total) <br />    ]]></description><category></category></item><item><title><![CDATA[C/C++内存对齐]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5740493</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5740493</guid><author>wswifth</author><pubDate>Fri, 16 Jul 2010 18:02:00 +0800</pubDate><description><![CDATA[<br />一、什么是字节对齐,为什么要对齐?<br />    现代计算机中内存空间都是按照byte划分的，从理论上讲似乎对任何类型的变量的访问可以从任何地址开始，但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问，这就需要各种类型数据按照一定的规则在空间上排列，而不是顺序的一个接一个的排放，这就是对齐。<br />    对齐的作用和原因：各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会]]></description><category></category></item><item><title><![CDATA[C语言总结]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5695908</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5695908</guid><author>wswifth</author><pubDate>Sat, 26 Jun 2010 15:01:00 +0800</pubDate><description><![CDATA[<br />用static声明局部变量：有时希望函数中的局部变量的值在函数调用结束后不消失而表留原值，即其占用的存储单元不释放，在下一次该函数调用时，该变量已有值，就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”，用关键字static进行声明。<br /> <br />用static声明外部变量：有时在程序设计中希望某些外部变量只限于被本文件引用，而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。这种加上static声明、只能用于本文件的外部变量称为静态外部变量。]]></description><category></category></item><item><title><![CDATA[TCP学习总结（二）]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5695652</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5695652</guid><author>wswifth</author><pubDate>Sat, 26 Jun 2010 11:49:00 +0800</pubDate><description><![CDATA[<br />TCP的计时器：<br /><br /><br /><br />重传时间的计算：重传时间 = 2 X（往返时间）。<br />往返时间的计算：两种方法，第一种方法是TCP使用时间戳选项，第二种方法是由TCP发送一个报文段，启动计时器，然后等待其确认。<br /> <br /> <br />连接的建立：<br />TCP连接的建立为3次握手。<br /><br />其中，第二和第三可作为一个动作。这样就是连接建立的三次握手。 <br /> <br /> <br />连接的终止：<br />参加交换]]></description><category></category></item><item><title><![CDATA[TCP学习总结（一）]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5692598</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5692598</guid><author>wswifth</author><pubDate>Thu, 24 Jun 2010 21:44:00 +0800</pubDate><description><![CDATA[<br />传输层的基本概念：<br />传输层协议具有几种责任。一种责任就是创建进程到进程（程序到程序）的通信，TCP使用端口号来完成这种通信。另一种责任就是在运输层提供流控制和差错控制机制，TCP使用滑动窗口协议完成流控制，它使用确认分组、超时、和重传来完成差错控制。<br />运输层还应负责为应用程序提供连接机制，这些应用程序应当能够向运输层发送数据流。在发送器运输层的责任应当是和接收器之间建立连接，将数据流分割成为可运输的单元，将他们编号，然后逐个发送给它们。运输层在接收端的责任应当是等待属于同一个]]></description><category></category></item><item><title><![CDATA[堆和栈的区别]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5657253</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5657253</guid><author>wswifth</author><pubDate>Wed, 09 Jun 2010 07:31:00 +0800</pubDate><description><![CDATA[<br />首先，放一篇我自己比较熟悉的在JAVA中堆和栈的区别<br /> <br />栈与堆都是Java用来在Ram中存放数据的地方。与C++不同，Java自动管理栈和堆，程序员不能直接地设置栈或堆。 <br />Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立，它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的，堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，因为它是在运行时动态分]]></description><category></category></item><item><title><![CDATA[sizeof的使用方法！！！]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5654569</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5654569</guid><author>wswifth</author><pubDate>Tue, 08 Jun 2010 07:18:00 +0800</pubDate><description><![CDATA[sizeof（int）等的大小依赖于操作系统的位数，如果是在16位DOS环境下，用TC编译，则为2，如果在windows环境下，用VC编译，则为4。第一个例子：char* ss = "0123456789"; sizeof(ss) 结果 4 ＝＝＝》因为SS为指针，它反映了操作系统的位数，windows是32位的。但是如果在16位DOS环境下，用TC编译，结果是2。sizeof(*ss) 结果 1 ＝＝＝》*ss是第一个字符char ss[] = "0123456789"; sizeof(ss) 结果 11]]></description><category></category></item><item><title><![CDATA[strcmp和strlen实现的源代码]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5653470</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5653470</guid><author>wswifth</author><pubDate>Mon, 07 Jun 2010 17:16:00 +0800</pubDate><description><![CDATA[<br />int strlen(const char* str) <br />{ <br />int i=0; <br />while(*str++) i++; <br />return i; <br />} <br /><br /><br /> <br /> <br /><br />int strcmp( const char *string1, const char *string2 ) <br />{ <br />int i; <br />do{ <br />i = (int)*string1 -(]]></description><category></category></item><item><title><![CDATA[Linux中报文是如何从网卡传递到相应协议的]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5652204</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5652204</guid><author>wswifth</author><pubDate>Mon, 07 Jun 2010 09:33:00 +0800</pubDate><description><![CDATA[<br />报文是如何从网卡传递到相应协议的<br />------------------------------------<br /><br />先来看一看网络部分是如何被初始化的. 下面是函数被调用的过程:<br /><br />start_kernel -> init -> do_basic_setup -> sock_init -> proto-init<br />           inet_proto_init  -> ip_init -> dev_add_pack<br /><br />]]></description><category></category></item><item><title><![CDATA[UDP学习总结]]></title><link>https://blog.youkuaiyun.com/wswifth/article/details/5650624</link><guid>https://blog.youkuaiyun.com/wswifth/article/details/5650624</guid><author>wswifth</author><pubDate>Sun, 06 Jun 2010 11:21:00 +0800</pubDate><description><![CDATA[<br />运输层的责任：运输层协议具有几种责任。一种责任就是创建进程到进程的通信（进程就是正在运行的应用程序），UDP使用端口号来完成这种通信。另一种责任就是在运输层提供流控制机制。运输层应当负责为进城提供链接机制，这些进程应当能够向运输层发送数据流，发送器运输层的责任应是和接收器运输层之间建立连接，将数据分割成为可运输的单元，将他们编号，然后逐个发送他们。运输层在接收端的责任应该是等待所有不同单元的到达，检查并传递那些没有差错的单元，并将他们作为一个流交付给接收进程。当整个流发送完毕后，运输层应该关闭这]]></description><category></category></item></channel></rss>