- 博客(39)
- 收藏
- 关注
原创 二叉查找树、AVL树、红黑树原理及应用
一、二叉查找树1、概念:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质2、特点: a、任意节点左子树不为空的话,则左子树的值均小于根节点的值。 b、任意节点右子树不为空的话 ,则右子树的值均大于根节点的值。 c、任意节点的左右子树也分别是二叉查找树。3、局限性及应用 ...
2018-08-31 16:22:46
180
原创 进程间通信之共享内存
一、共享内存概念: 共享内存是进程间通信中最简单的方法之一。共享内存允许两个或更多的进程访问同一块内存当一个进程改变了这块地址空间中内容,其他进程就会察觉到这个改变。二、共享内存的特点: 1、共享内存允许两个不相关的进程访问同一个内存。 2、共享内存是两个正在运行的进程之间共享和传递数据的最有效的方法。 3、不同进程之间共享的内存通常安排同一段物理内存。 4、共享内存...
2018-05-04 16:23:59
176
原创 进程间通信之消息队列
一、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接受进程可以独立接受含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步阻塞问题,但是消息队列与命名管道一样,每个数据块都有最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。二、消息队列中的函数1、msgget函数:...
2018-05-04 14:55:39
204
原创 进程间通讯(FIFO)
一、有名管道 管道没有名字,因此它们只能用于有一个公共祖先各个进程之间的通信,我们无法在无亲缘关系的进程之间进程IPC通信。有名管道即FIFO,指先进先出,它是一个半双工的数据流,不同于管道的是每一个FIFO有一个路径名与之关联,从而允许无亲缘之间的进程进行通信。二、创建的函数 FIFO由mkfifo函数创建:int mkfifo(const char *pathname,mode_t...
2018-05-03 15:26:49
333
原创 管道(pipe)
一、管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。二、管道的本质: 1、其本质是一个伪文件(实为内核缓冲区)。 2、有两个文件描述符引用,一个表示读端,一个表示写端。 3、规定数据由管道的写端流入管道,由读端流出。三、管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。四...
2018-04-24 22:57:15
786
原创 堆和栈的区别
一个由C/C++编译的程序所占内存分为以下几个部分:1、栈区:由编译器或系统分配和释放的,如存放函数参数,或者局部变量等。2、堆区:由程序员分配和释放,诺程序员不释放,程序结束时则由OS回收。3.常量区(静态区):存放全局变量和静态变量的区域,初始化的全局变量和静态变量存放在一块区域,未初始化的全局量和静态变量存放在相邻的另一块区域。程序结束由系统自动释放。4、文字常量区:存放常量字符串的区域,程...
2018-04-20 20:18:14
363
原创 C++实现顺序表和单链表(无头)
一、顺序表seqlist.h#pragma once#define max 10class Node{private: int data[max]; int length;public: Node(); void Insert(int pos,int e); void Delete(int pos); void Print(); void Find(int e); void Clear(); vo...
2018-04-20 19:38:00
168
原创 C++实现一颗二叉树
Binary_Tree.h#pragma once#include<iostream>#include<stack>#include<queue>//节点struct Node{ char data; struct Node *Lchild,*Rchild;};template <class T>class Binary_Tree{private: ...
2018-04-20 19:19:09
169
原创 线程
一、线程的概念: 在一个程序里的一个执行路线就叫做线程,线程是一个进程内部的控制序列。 一切进程至少有一个线程。二、线程和进程之间的区别: 1、一个程序至少有一个进程,一个进程至少有一个线程。 2、线程的划分尺度小于进程,使得多线程的程序并发性高。 ...
2018-03-23 20:40:31
98
原创 BTree
#pragma oncetemplatestruct BTreeNode{pair _kvs[M]; // 多开一个空间,方便分裂BTreeNode* _subs[M+1];BTreeNode* _parent;size_t _size; // 关键字的数量BTreeNode():_parent(NULL),_size(0){
2017-12-08 17:49:13
162
原创 HashTable
#pragma once#include templatestruct __HashFunc{size_t operator()(const K& key){return (size_t)key;}};templatestruct __HashFunc{static size_t BKDRHash(const char* str)
2017-12-08 17:46:57
181
原创 map_set
#pragma once//#include ////void test_set()//{// typedef set::iterator SetIter;// set s1;// s1.insert(1);// //s1.insert(3);// s1.insert(1);// s1.insert(5);// s1.insert(7);//
2017-12-08 17:42:31
137
原创 gcc ,vim,gdb
一、vimvim修改一下配置文件后,如果你稍微会点vim的命令使用,那可比一般的编辑器好用啊,如果一点不会vim的命令使用,就跟一般编辑器一样使用。打开etc/vim/vimrc文件 这里的引号是注释的意思。去掉引号就可以了,我说明一下某些set的意思,其他的可以自己网上搜搜是啥意思,其实后面英文有注释的。如果自己的配置文件里面没有,可以手动添加。s
2017-12-08 17:38:30
172
原创 RBTree
#pragma onceenum Colour{RED,BLACK,};templatestruct RBTreeNode{ValueType _valueField;RBTreeNode* _left;RBTreeNode* _right;RBTreeNode* _parent;Colour _col;
2017-11-20 16:49:56
150
原创 AVL_Tree
一、AVL树的性质:1、左子树和右子树的高度之差绝对值不超过1.2、树中的每个左子树和右子树都是AVL树。3、每个节点都有一个平衡因子,任一点的平衡因子是-1、0、1,(每个节点的平衡因子等于右子树的高度减去左子树的高度)二、AVL树的效率:一颗AVL树有N个节点,其高度可以保持在log2N,插入/删除/查找的时间复杂度也是log2N。代码实现:#pragma
2017-11-20 16:40:31
218
原创 Huffman_Tree
一、哈夫曼树的构造:1、给出一个数组,以每个元素为基础,创建一个叶子结点数组。2、从中找出权值最小的两个节点,构建一棵树,这棵树的权值等于两个节点权值之和,左子树等于权值最小的那个节点,右子树等于权值次小的那个节点。3、将该树的根放入节点数组原来权值最小的那个位置。4、不断执行2.3过程。最终得到一颗哈夫曼树。二、哈夫曼的文件压缩:代码实现:#p
2017-11-20 16:27:34
167
原创 AVL_tree
实现代码如下:#pragma oncetemplatestruct AVLTreeNode{AVLTreeNode* _left;AVLTreeNode* _right;AVLTreeNode* _parent;K _key;V _value;int _bf; // 平衡因子AVLTreeNode(const K& key
2017-11-20 16:06:57
173
原创 linux增删查过的权限
查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other)
2017-11-07 22:59:23
119
原创 linx指令du,df,top,free,pastack
检测磁盘空间:df df 命令的使用格式: df [选项] [文件] df命令用于检测文件系统磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况。-a 显示所有文件系统的磁盘显示情况-m 以1024字节为单位显示-t 显示各指定文件系统的磁盘空间使用情况-T 显示文件系统-h 方便阅读方式显示 在电脑命令窗口
2017-11-07 22:49:12
707
原创 c++日期类的实现
#pragma once #include #include using namespace std; class Date { public: Date(int y = 1900, int m = 1, int d = 1); Date(const Date &d); //复制构造函数看成构造函数的重载, 只有参数不同
2017-11-03 10:30:06
171
原创 为什么模板不支持分离编译
在c++中,为了一个项目的规范,我们为您通常把代码归为三类:1、声明文件2、实现文件3、测试文件比如我们要用c++实现一个链表,那么我们就会创建这3个文件:LinkList.h //链表的相关声明LiskList.cpp //链表的实现代码Test.cpp //链表测试代码
2017-10-27 11:52:56
105
原创 vector&list
一、vector&list的使用和区别STL(标准模板库)是一个C++的软件库,也是C++标准程序库的一部分。vector和list相当于容器,这些容器应该都是STL里面的一个类。而vector封装数组,list封装链表。vector#includevectora(10); //类型为int,数量为10a[1] = {1}; //第二个元素赋值为1cout
2017-10-16 20:37:56
284
原创 栈和队列
#pragma once#include templateclass Stack{public:Stack():_a(NULL),_size(0),_capacity(0){}~Stack(){if (_a){delete [] _a;_capacity = _size = 0;}}void
2017-10-16 14:04:33
106
原创 迷宫的实现
#pragma oncestruct Pos{size_t _row;size_t _col;};templateclass Maze{public://Maze(int maze[][N])Maze(int* maze){for (size_t i = 0; i {for (size_t j = 0; j {//
2017-10-16 14:02:11
180
原创 智能指针
一、智能指针的发展历史智能指针的发展要RALL说起RALL要求,资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配,同时由析构函数完成资源的释放。在这种要求下,只要对象能正确 的析构就不会出现资源泄露的问题。1、C++98提出auto_Ptr,auto_Ptr的设计是让两个指针指向同一块空间,但是这样会存在释放不当,出现程序崩溃的问题。2、在Boost库中设
2017-09-26 19:13:18
113
原创 c++基础入门
一、名字空间名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局与域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字。namespace name1{int a = 0;}namespace name2{int b = 1;}name1::a = 3;name2::b = 4;名字命名空间解决了
2017-08-11 08:53:48
118
原创 菱形继承
一、菱形继承菱形继承的结构图:using namespace std;class Person{public:string _name;};class Student :public Person{protected:int _num;};class Teacher:public Person{protected:in
2017-08-07 16:59:47
149
原创 实现一个双向链表
实现一个双向链表的增删查改代码如下:#include#includeusing namespace std;typedef int DataType;struct ListNode{ListNode* _next;ListNode* _prev;ListNode* _data;ListNode(DataType x); _data(x), _next
2017-07-29 20:52:25
195
原创 继承&多态
一、继承是面向对象复用的重要手段。通过继承定义一个类继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西。三种类成员访问限定符1.public(公有)2.protected(保护)3.private(私有)。三种继承关系1.public(公有继承)2.protected(保护继承)3.private(私有继承)。class Person //基类/父类{
2017-07-29 09:05:51
146
转载 模拟String的增删查改
String的实现涉及很多C++的基础知识、内存控制及异常处理等问题,仔细研究起来非常复杂,本文主要做一个简单介绍和讲解模拟实现String类的增删查改。代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include #include assert.h>using namespace std;class String{publi
2017-07-28 20:26:18
176
原创 浅拷贝&深拷贝
一、简单的赋值浅拷贝#includeusing namespace std;#includeclass String{public:String(const char*str):_str(new char[strlen(str)+1]){strcpy(_str, str);}String(const String&str):_str ( str.
2017-07-28 20:16:58
153
原创 写时拷贝
一、浅拷贝1、概念:浅拷贝就是当在进行对象的复制时,只是进行对象数据成员的拷贝,其中默认的拷贝构造函数也是浅拷贝。大多数情况下使用浅拷贝时没有任何问题的,但是当出现动态成员就会出现问题。2、当浅拷贝时。出现了动态成员,当调用析构函数时,一块内存就有可能出现多次析构。二、写时拷贝1.引用计数的拷贝时用来解决浅拷贝存在的问题,所以它也是一种浅拷贝。class String{
2017-07-28 09:49:42
187
原创 动态内存管理
一、c语言内存申请相关的函数主要有alloca、calloc、malloc、realloc、free等。(1)、malloc:void*malloc(size_t size);malloc函数在使用时,只需要传递一个参数size,分配内存大小,一般需要用sizeof(type)*num手动计算。有事malloc所申请的空间可能会比实际申请的空间要大。(2)、calloc:void*
2017-07-27 20:18:23
113
原创 链表面试题
函数声明:typedef int DataType;typedef struct Node { DataType data; struct Node* next;}Node,*pNode,*pList;void InitList(pList *pplist);void Display(const pList plist);void PushBack(pList
2017-07-27 20:15:42
216
原创 C++引用的总结
1、引用介绍 简而言之,引用就是一个对象的别名,它通常用于函数的参数表中及函数返回值中,当然也可以独立使用。例如一个叫小明的同学,在班上同学们给他起了个外号,不管叫小明还是他的外号都是叫小明他自己就和引用一样,如下: int a; int &b = a;此时b就是a的引用,我们可以通过b来修改a,此处应注意:引用在创建时就应该初始化为指向一个已存
2017-07-22 17:55:41
153
原创 剖析C++的重载
一、函数重载的规则:1.函数名相同。2.参数的个数不同,参数的类型不同,参数的顺序不同,均可构成重载。3.返回值类型不同则不可以构成重载。如下:void add(int a,int b);void add(double a,double b);//可以构成重载char add(int a,int b);//不可以构成重载返回类型不同的函数不可以构成重载,因为有的
2017-07-19 09:32:14
234
原创 memset函数的使用
1、void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2、例子#includevoid main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",s);getchar
2017-07-18 10:21:44
298
转载 class类的总结
一、C++类的定义 C++中使用关键字class来定义类,其基本形式如下:class //类名{public://行为或属性protected://行为或属性private://行为或属性};实例:定义一个点(Point)类,具有以下属性和方法:属性:x坐标,y坐标方法:1、设置x,y的坐标值;2、输入
2017-07-18 09:45:55
223
原创 数组的运用
int main() { //一维数组 int a[] = {1,2,3,4}; printf(“%p\n”, a);// printf(“%p\n”, a+1); printf(“%d\n”, sizeof(*a)); // *a中a表示整型数组的首元素地址,*a表示首元素,整型数组,一个元素占4个字节。printf("%p\n", &a);printf("%p
2017-07-18 09:44:26
265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人