自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树题目小结

1. 求二叉树中的节点个数2. 求二叉树的深度3. 前序遍历,中序遍历,后序遍历4. 分层遍历二叉树(按层次从上往下,从左往右)5. 将二叉查找树变为有序的双向链表6. 求二叉树第K层的节点个数7. 求二叉树中叶子节点的个数8. 判断两棵二叉树是否结构相同9. 判断二叉树是不是平衡二叉树10. 求二叉树的镜像11. 判断二叉树是不是完全二叉树二叉

2015-04-15 15:19:56 623

原创 排序算法

一、插入排序1.直接插入排序基本思想:        将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。        即先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。void insertSort(int *array, int len){ for (int i = 1; i < len; i

2015-03-27 16:30:53 792

原创 单例模式

懒汉模式:方案一:局部静态实例class Singleton{public: static Singleton &instance() { static Singleton instance; return instance; }private: Singleton() {} ~Singleton() {} Singleton(const Singleton

2015-03-25 16:54:11 399

原创 SQL查询语句练习

表设计Student(Sid, Sname, Sage, Ssex) 学生表 Course(Cid, Cname, Tid) 课程表 SC(Sid, Cid, score) 成绩表 Teacher(Tid, Tname) 教师表create table Student( Sid int, Sname nvarchar(32), Sage int, Ssex nvar

2015-03-25 09:26:45 971

原创 线程执行N次后,进程执行M次,如此循环S次

#include #include #define LOOP_S 10#define PRT_M 2#define PRT_N 1int g_flag = 0;pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;void

2015-03-13 12:28:21 700

原创 N个线程顺序输出,循环M遍

#include #include #define THREAD_N 3#define LOOP_M 10int num[THREAD_N];int flag = 0;pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER;pthread_mutex_t g_lock = PTHREAD_MUTEX_INITIALIZER;voi

2015-03-13 11:36:47 786

转载 TCP协议中的三次握手和四次挥手(图解)

http://blog.csdn.net/whuslei/article/details/6667471

2015-03-10 14:23:36 335

原创 简单位操作

1.求两个数的平均值(x&y)+((x^y)>>1)2.求绝对值int myAbs(int x){ int y = x >> 31; return (x^y) - y;}3.求整形数的二进制表示中1的个数int func(int n){ int count = 0; while (n) { count += n & 0x1u; n >>= 1; }}4

2015-03-08 21:26:45 422

原创 一些宏的写法

1.声明一个常数用以表示1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60*60*24*365)UL2.返回两个数的较大数(不能使用大于、小于、if语句)#define MAX(a, b) ((abs((a)-(b)))==((a)-(b))?(a):(b))3.返回两个数的较小数#define MIN(a, b) ((a)<(b)?(a):(

2015-03-08 01:17:40 690

原创 实现类的成员函数为回调函数

#include typedef int (*FuncPtr)(void); //声明回调函数类型class A{public: static int callBackFunc(void) //回调函数必需声明为static { return i_; //只能调用静态成员 }private: static int i_;};int A::i_ = 20;vo

2015-03-04 00:59:31 295

原创 String类的实现

#include class String{public: String(): data_(new char[1]) { *data_ = '\0'; } String(const char *str): data_(new char[strlen(str) + 1]) { strcpy(data_, str); } String(const String &

2015-03-03 22:38:02 329

原创 二叉树的遍历

#include #include #include #include #include using namespace std;typedef int ElemType;typedef struct BTNode{ ElemType data; struct BTNode *left; struct BTNode *right;}BTNode,

2015-03-03 09:43:57 467

原创 KMP算法的实现

#include #include #include void GetNext(const char *sub, int *next){ int slen = strlen(sub); int k = 0; next[0] = 0; for (int i = 1; i < slen; ++i) { while (k > 0 && sub[i] != sub[k])

2015-02-21 22:01:17 307

原创 顺序循环队列的实现

#include #include #define MAXSIZE 10typedef int ElemType;typedef struct{ ElemType data[MAXSIZE]; int front; int rear;}Queue;void Init(Queue *q);bool IsEmpty(Queue *q);void Enter(Queue *

2015-02-19 21:27:15 816

原创 链式队列的实现

#include #include typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}QueueNode;typedef struct { QueueNode *front; QueueNode *rear;}Queue;void Init(Queue *q);bo

2015-02-19 20:15:18 342

原创 链式栈的实现

#include #include #define INFINITY 65535#define MAXSIZE 100typedef int ElemType;typedef struct Node{ ElemType data; struct Node *next;}StackNode, *Stack;void Init(Stack *s);bool IsEmpty

2015-02-19 13:10:34 308

原创 顺序栈的实现

#include #include #define INFINITY 65535#define MAXSIZE 100typedef int ElemType;typedef struct { ElemType data[MAXSIZE]; int top;}Stack;void Init(Stack *s);bool IsEmpty(Stack *s);ElemT

2015-02-18 14:49:18 351

转载 静态链表的实现

/* 静态链表用一维数组表示链表便于在不设指针的高级程序语言中实现链表结构 数组的一个分量表示一个结点,一个结点由两个域组成: 数据域:data,用于存储要处理的数据元素 游标域:cur,用于代替指针指示结点在数据中的位置 特殊处理数组的第一个位置与最后一个位置 最后一个位置的游标指标第一个有数据的结点(相当于链表的头结点) 第一个位置的游标指标一个未使用的结点 */#include

2015-02-14 22:47:07 394

原创 双向链表的实现

/* 单链式存储结构中,只有一个指向后继的指针,从某点出发,只能顺序的访 访问,如果想访问上一个结点必须从头开始,时间复杂度:访问下一个结点 为O(1),访问上一个结点为O(n)而双向链表可以克服这个问题 双向链表的结点存在一个数据域和两个指针域:一个指向前驱一个指向后继 */ #include #include typedef int ElemType;

2015-02-13 17:37:10 356

原创 单链表的实现

/* ******************************************************************************* 用链接存储方式存储的线性表——链表,可以克服顺序表的插入与删除时间复杂度为O(n)缺点。 但其获知表长与访问元素的时间复杂度O(n)较顺序表O(1)比较变差了 比较适合频繁进行插入与删除操作,访问操作较少的情况 链表中的结点用

2015-02-13 12:22:22 440

转载 C/C++转载

C/C++堆栈指引http://www.cnblogs.com/Binhua-Liu/archive/2010/08/24/1803095.html

2015-02-09 17:53:16 450

原创 unp卷一 第一章~第六章

第1章 简介1.4 错误处理Unix errno值#include strerror(errno);1.7 OSI模型        应用层--表示层--会化层--传输层--网络层--数据链路层--物理层TCP/IP模型  应用层-------------------------传输层--网络层--网络接口层网络层设备:路由、多层交换机数据链路层:交

2015-01-27 23:47:15 802

原创 线程

线程标识线程ID只在它所属的进程环境中有效。pthread_equal用来对比两个线程ID。int pthread_equal(pthread_t tid1, pthread_t tid2);pthread_self用来获得自身的线程ID。pthread_t pthread_self(void);pthread_create用来创建线程int p

2015-01-21 01:16:10 372

原创 信号

信号概念信号是软件中断。产生信号的条件有:(1)当用户按某些终端键时,引发终端产生的信号。如Ctrl+C引发SIGINT。(2)硬件异常产生信号:除数为0、无效内存的引用等等。(3)进程调用kill(2)函数可将信号发送给另一个进程或进程组。(4)用户可用kill(1)命令将信号发送给其他进程。(5)当检测到某种软件条件已经发生,并应将其通知有关进程时也产生信号。例如S

2015-01-21 01:06:54 497

原创 进程控制

进程标识符每个进程都有一个非负整型表示的唯一进程ID。进程ID可以重用。ID为0的进程通常是调度进程,常常被称为交换进程。ID为1的进程通常是init进程,在自举过程结束时由内核调用。ID为2是页守护进程,负责支持虚拟存储系统的分页操作。除了进程ID,每个进程还有一些其他的标识符。下列函数返回这些标识符。#include pid_t getpid(void);  //进程ID

2015-01-21 00:58:59 427

原创 进程环境

进程终止有8种方式使进程终止,其中5种为正常终止,它们是(1)从main返回。(2)调用exit。(3)调用_exit或_Exit。(4)最后一个线程从其启动例程返回。(5)最后一个线程调用pthread_exit。异常终止有3种方式,它们是(1)调用abort。(2)接到一个信号并终止。(3)最后一个线程对取消请求做出响应。1.exit函数

2015-01-21 00:51:23 517

原创 时间和日期例程

由unix内核提供的基本时间服务是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数。time函数返回当前时间和日期。#include time_t time(time_t *calptr);时间值总是作为函数值返回。如果参数不为空,则时间值也存放在由calptr指向的单元内。gettimeofday提供了更高的分辨率(最高为微秒级)in

2015-01-21 00:48:08 413

原创 标准I/O库

标准I/O库处理很多细节,例如缓冲区分配,以优化长度执行I/O等。这些处理使用户不必担心如何选择使用正确的块长度。这使得它便于用户使用,但是如果不较深入地了解I/O库函数的操作,也会带来一些问题。流和FILE对象标准I/O文件流可用于单字节或多字节字符集。流的定向决定了所读、写的字符是单字节还是多字节流的。当一个流最初被创建时,它并没有定向。如若在未定向的流上使用一个多字节I/O函

2015-01-21 00:45:56 352

原创 文件和目录

stat、fstat和lstat函数#include int stat(const char *restrict pathname , struct stat *restrict buf);int fstat(int filedes, struct stat *buf);int lstat(const char *restrict pathname , struct stat

2015-01-21 00:34:23 458

原创 文件I/O

unix系统中的大多数文件I/O只需用到5个函数:open、read、write、lseek以及close。其中read和write函数被称为不带缓冲的I/O,不带缓冲指的是每个read和write都调用内核中一个系统调用。文件描述符文件标识符是非负整数。打开现存文件或新建文件时,内核会返回一个文件标识符。读写文件也需要使用文件标识符来指定等待读写的文件。习惯上,标准输入(

2015-01-11 00:17:09 486

原创 系统调用和库函数

系统调用和库函数都以C函数的形式出现,两者都为应用程序提供服务。必要时我们可以替换库函数,通常却不能替换系统调用。两者职责不同,以存储器分配函数malloc为例,其使用sbrk系统调用分配另外一块空间给进程,而库函数malloc则在用户层次管理这一空间。应用程序可以调用系统调用或者库函数,而很多库函数则会调用系统调用。系统调用通常提供一种最小接口,而库函数通常提供比较复杂的功能。如不带

2015-01-11 00:09:17 391

转载 NAT原理与NAT穿越

先做一个约定:内网A中有:A1(192.168.0.8)、A2(192.168.0.9)两用户、网关X1(一个NAT设备)有公网IP 1.2.3.4内网B中有:B1(192.168.1.8)、B2(192.168.1.9)两用户、网关Y1(一个NAT设备)有公网IP 1.2.3.5公网服务器:C(6.7.8.9)、D(6.7.8.10)NAT原理网络地址转换(NAT,N

2015-01-09 14:59:57 425

原创 简单UDP服务端和客户端

服务端代码:#include #include #include #include #include #include #include #include int main(int argc, char *argv[]){ int sockfd; struct sockaddr_in clt_addr, my_addr; if ((sockfd = socket(A

2015-01-09 13:42:42 898

原创 简单TCP服务端和客户端

服务端代码:#include #include #include #include #include #include #include #include int main(int argc, char *argv[]){ int sockfd; struct sockaddr_in my_addr, clt_addr; if ((sockfd = socket(A

2015-01-09 13:41:04 508

原创 守护进程

守护进程是在后台运行且不与任何控制终端关联的进程。守护进程没有控制终端通常源于它们由系统初始化脚本启动。然而守护进程也可能从某个终端由用户在shell提示符下键入命令行启动,这样的守护进程必须亲自脱离与控制终端的关联,从而避免与作业控制、终端会话管理、终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期地输出到终端。编程实例:#include #include

2015-01-08 16:44:24 469

转载 Linux软链接和硬链接

1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬链接】硬链接指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的

2015-01-07 17:41:03 319

原创 perror和strerror

#include #include #include int main(int argc, char *argv[]){ FILE *fd = fopen(argv[1], "r+"); if (fd == NULL) { perror("perror:"); printf("strerror:%s\n", strerror(errno)); } else { f

2015-01-06 10:22:20 335

原创 stdarg宏的用法

#include #include int sum(int n_values, ...){ va_list var_arg; int count; int sum = 0; va_start(var_arg, n_values); for (count = 0; count < n_values; ++count) { sum += va_arg(var_arg, in

2015-01-05 14:07:20 435

原创 用迭代法计算斐波那契数

#include long fabonacci(int n){ long result; long pre_result; long pre_pre_result; result = pre_result = 1; while (n > 2) { n -= 1; pre_pre_result = pre_result; pre_result = result;

2015-01-05 13:52:14 3574

原创 反转字符串

#include void reverse_string(char *string){ char *dest = string; while (*dest++ != '\0') ; dest -= 2; while (string < dest) { char t = *string; *string++ = *dest; *dest-- = t; }}

2015-01-05 11:01:59 289

空空如也

空空如也

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

TA关注的人

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