- 博客(48)
- 收藏
- 关注
原创 AVL树
AVL平衡二叉查找树概述:介绍: 在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。特点:1.本身首先是一棵二叉搜索树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为...
2018-04-22 21:32:48 272
原创 插入排序的实现
插入排序(默认从小到大)插入排序是排序算法的一种,它不改变原有的序列(数组),而是创建一个新的序列,在新序列上进行操作。基本思想及举例说明 插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。 在实际使用中,通常是排序整个无序数组,所以把这个无序数组分为两部分排序好的子数组和待插入的元素。第一轮...
2018-04-22 21:23:05 283
原创 I/O复用三种方式的比较
select,poll,epoll都是IO多路复用的机制。 I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O...
2018-04-17 19:27:44 916
原创 Select函数
在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状态。(我们是要想从一个文件描述符中读或者写,还是关注一个描述符中是否出现异常) •我们要等待多长时间。(我们可以等待无限长的时间,等待固定的一段时间,或者根本就不等待) 从 select函数返回后,内...
2018-04-17 17:05:44 297
原创 面向对象程序设计
面向对象与程序设计: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一...
2018-04-15 20:01:40 310
原创 计算一年有多少秒
//输入一个年份,判断这一年有多少秒;//分别判断平年和闰年//闰年能被4整除并且不能被100整除或者可以被400整除#include<iostream>using namespace std;void second(int year){ if((year%4 == 0 && year%100 != 0) ||year%400 == 0)//判断是否是闰年...
2018-04-15 17:52:04 6724
原创 虚函数
虚函数: 在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行...
2018-04-15 14:05:49 205
原创 带外数据
带外数据: 使用与普通数据不同的通道独立传送给用户,是相连的每一对流套接口间一个逻辑上独立的传输通道。也称为紧急数据,相比于普通数据有更高的优先级,总是立即发送。 传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方。为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的...
2018-04-14 20:50:07 221
原创 判断质数
#include<iostream>using namespace std;int main(){ int a=0; // num因数的个数 int num=0; // 输入的整数top:while(1)//top为goto跳转到的标记 { cout<<"请输入一个整数:"; cin>>num; if(num == 0 || num...
2018-04-14 17:46:34 288
原创 希尔排序
希尔排序的基本思想是:先将整个待排序列分割成若干子序列分别进行进行直接插入排序,等到整个待排序列基本有序时,再对全体记录依次进行直接插入排序。希尔排序也叫缩小增量排序,是1959年由D.L.Shell提出来的。希尔排序的具体实现方法和步骤:a、选择一个步长序列d1,d2,d3,...,dk,其中,di > dj,dk = 1;b、按步长序列个数K对序列进行K趟排序c、每趟排序,根据对应的步长...
2018-04-11 18:57:42 168
原创 内存覆盖
//memmove()函数解决内存覆盖问题#include<iostream>#include<assert.h>using namespace std;void *memmove(void *dest, const void *source, size_t count){assert((NULL != dest) && (NULL != sour...
2018-04-11 18:49:19 366
转载 简易五子棋
#include<iostream>#include<iomanip>using namespace std;const int X = 21; //棋盘行数const int Y = 21; //棋盘列数char p[X][Y]; //定义棋盘int m=0;//定义临时点,保存输入坐标int n=0; void display() //输出棋盘{...
2018-04-11 17:49:37 258
原创 Socket
socket的概念: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算...
2018-04-11 17:00:25 338
原创 STL的组件
1,、容器各种数据结构,用来存放数据,STL容器是一种class template。2、算法各种常用算法如sort,search,copy,erase等等,从实现的角度讲,STL算法是一种function template3、迭代器 扮演容器和算法之间的胶合剂,是所谓的“泛型指针”,从实现的角度讲,迭代器是一种将operator*,operator ->,operator++,operat...
2018-04-10 20:36:10 163
原创 图的遍历
//图的遍历#include <iostream>using namespace std;#include <queue>#define SIZE 10struct Edge{ Edge(int v):destvalue(v),link(NULL){} int destvalue; Edge *link;};struct Vertex{ Vert...
2018-04-10 20:24:26 270
原创 Strcat和Strcpy的实现
#include<assert.h>#include<stdio.h>#include<iostream>using namespace std;char* my_strcat(char *strDest, const char *strSrc){ assert(strDest != NULL && strSrc != NULL);...
2018-04-10 19:58:25 355
原创 注释转换C++->C
//头文件ConvertComment.h#ifndef _CONVERTCOMMENT_H#define _CONVERTCOMMENT_H#include<iostream>using namespace std;void EventPro(char ch);void EventProAtNo(char ch);void EventProAtC(char ch);...
2018-04-10 17:43:26 152
原创 二叉树的四种遍历遍历以及查找拷贝
#include<iostream>#include<queue>using namespace std;class Node//创建节点{public: Node(char c):m_value(c),m_left(NULL),m_right(NULL){}//初始化参数 char m_value; Node *m_left; Node *m_righ...
2018-04-08 17:24:47 233
原创 简易滚动条实现
#include<iostream>#include<windows.h>using namespace std;void main(){ char str[] = "include<string>"; int len = strlen(str); int k = 0;//统计显示框的长度 for(int i=0;i<len;++i) {...
2018-04-08 17:07:18 257
原创 TCP与UDP的比较
TCP:面向连接 传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP:面向无连接 用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能...
2018-04-03 17:10:50 524
原创 UDP通信
UDP服务器程序:#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>#include<sys/socket.h>#include<netinet/in.h>int main(){ int sockSer = s...
2018-04-03 16:50:03 229
原创 Linux中读写锁--读锁优先
my_pthread_rwlock.h:#pragma once#include<pthread.h>#include<stdio.h>typedef struct{ pthread_mutex_t rw_mutex; pthread_cond_t rw_condreaders; pthread_cond_t rw_condwrite...
2018-04-03 16:43:02 580 1
原创 Linux中读写锁--写锁优先
my_pthread_rwlock.c#include"my_pthread_rwlock.h"#include<errno.h>int my_pthread_rwlock_rdlock(my_pthread_rwlock_t *rw){ int result; if(rw->rw_magic != RW_MAGIC) return -1;...
2018-03-31 18:34:57 1132
原创 网络字节序和大小端
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用大端排序方式。转换函数: htons把unsigned short类型从主机序转换到网络序 (host to net short) htonl 把unsigned long类型从主机序转换到网络序 (host to ...
2018-03-31 18:15:05 395
原创 快速排序
快速排序算法原理: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。#include<iostream>using namespace std;void QS(int *a,int left,int right)...
2018-03-30 20:33:27 162
原创 调用STL函数排序
#include<iostream>using namespace std;#include <queue>#include<string>#include<string.h>#include <vector>#include <iterator>#include<functional>#inclu
2018-03-27 16:46:09 223
原创 简单优化冒泡排序法
相对于普通冒泡排序,增加了以下功能:1.动态开辟空间2.输入数据完成后将开辟但是没有用到的空间进行释放,所以此处用到了计数器n3.数据输入完成标志,输入任意字符并回车结束添加数据#include<iostream>using namespace std;#define SIZE 10//宏定义SIZE大小为10void main(){ int size = SIZE; in...
2018-03-27 16:39:14 273
原创 简单进度条以及时针转动函数
#include<iostream>#include<windows.h>using namespace std;void main(){ int i; for(i = 1;i<=100;i++) { printf("\b\b\b\b%d%%",i); Sleep(100);//休眠100ms }//百分比 cout<<end...
2018-03-27 16:26:37 221
原创 异常处理
异常处理:关键字 try throw catch下面是实现除法的程序,当程序异常(除数为零)时进行的相关异常处理:#include<iostream>using namespace std;int Dev(int a,int b){ if(b == 0) { throw b;//抛出异常 } return a/b;}void main(){ int ...
2018-03-27 16:14:53 138
原创 线程
什么是线程 在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个进程内部的一个控制序列”。 典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。 线程的优点(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步...
2018-03-26 17:36:15 155
原创 类模板实现单链表
特别注意:编写函数前必须先进行模板的声明#include<iostream>using namespace std;template<typename type>class list;//声明list类template<typename type>class listnode{ friend class list<type>;//访问私...
2018-03-22 21:12:42 1720
原创 比较大小的函数模板
函数模板不是直接执行的程序,而是执行后通过编译器进行转换,转换成模板函数进行实现#include<iostream>using namespace std;template<typename type>//函数模板type Max(type a,type b){ cout<<typeid(type).name()<<endl;//进行参数的...
2018-03-22 19:54:44 4838 2
原创 static和const的比较
static(静态):分为静态成员变量和静态成员函数,作用域为整个类,所有成员函数可以共享。静态成员变量:static int data;定义在类的私有(private)成员里面,但是静态成员的初始化要在类外面,即int 类名 ::data = 6;静态成员函数:static void main(){ }可以访问静态成员变量但是不能访问普通私有成员变量,因为它里面没有this指针普通函数例如vo...
2018-03-22 18:04:10 225
原创 友元函数和成员函数
C++中的友元函数:功能:可以直接访问类的私有成员,同样成员函数也可以访问,而普通非成员函数不可以。并且友元函数不受类的控制,无论是放到public,protected或者private中,都是一样的。下面是访问私有成员的两种方法,分别是编写的成员函数以及友元函数//成员函数访问类的私有成员#include<iostream>using namespace std;class In...
2018-03-21 21:10:40 1727
原创 linux中的压缩与解压缩
Zip:目前应用最多的压缩方式优点:可以在不同操作品台上使用缺点:支持的压缩率不是很高压缩方式:zip -r name.zip directory_to_compress解压方式:unzip name.zipTar:linux中应用广泛的压缩方式优点:花费很少的CPU以及时间去打包文件压缩方式:tar -cvf name.tar directory_to_compress解压方式:tar -xvf...
2018-03-20 21:11:59 200
原创 深浅拷贝和赋值
#include<iostream>using namespace std;class String //私有成员变量中有指针类型,一般要编辑拷贝构造函数和赋值函数,预防浅拷贝和浅赋值{public: //构造函数 String(const char *str = "") { if(*str == NULL)//为空不等价于为‘\0’ { data = (c...
2018-03-15 21:05:10 316
原创 最大公约数与最小公倍数
#include<iostream>using namespace std;int gongyue(int &max,int &min){ if(max < min) { swap(max,min); } while(max%min != 0) { int t = min; min = max%min; max = t; } r...
2018-03-08 16:55:39 179
原创 一维数组逆置
#include<iostream>using namespace std;void reverse(int a[],int n){ for(int i = 0;i<n/2;++i) { swap(a[i],a[n-i-1]); }}void main(){ int a[10]; int n = sizeof(a)/sizeof(a[0]); co...
2018-03-08 15:57:56 2768
原创 求图形周长(三角形和矩形)并且求它们周长之和
//用shape类定义求周长函数#include<iostream>using namespace std;class shape//抽象类{public: virtual float length() = 0;//求图形周长的函数};float total(shape *s[],int n)//求不同形状图形周长总和的函数{ float sum = 0.0; f...
2018-02-05 16:17:21 938
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人