- 博客(48)
- 收藏
- 关注
原创 项目:大数的运算
项目背景:数据的范围超过long long等整型类型所能存储的范围。 项目简介:实现大数的输入和输出以及对它进行加、减、乘和除运算。 开发平台:Visual Studio 2012 技术要点:C++类和对象,string 代码实现://CalOfBigData.h#pragma once#include <string>#include <iostream>#include <casse
2017-06-24 14:00:58
402
原创 数据库事务及其四大特性
数据库事务是数据库运行中的逻辑工作单位,单个逻辑工作单元所执行的一系列操作,要么都执行,要么都不执行。例如银行取款事务分为2个步骤(1)存折减款(2)提取现金,2个步骤必须同时完成或者都不完成。数据库事务的四大特性(ACID):(1) 原子性(Atomicity): 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行
2017-04-12 18:36:56
10860
原创 位图的实现
#include #includeusing namespace std; class Bitmap{public: Bitmap() : _size(0) {} Bitmap(size_t size) :_size(0) { _array.resize((size>>5)+1); } void Set(size_t num) { size_t ind
2017-04-07 13:28:59
821
原创 哈希桶的实现
哈希桶用于哈希冲突的解决,也叫做开链法或拉链法。#include #include #include using namespace std;templatestruct HashBucketNode{ K _key; V _value; HashBucketNode* _next; HashBucketNode(const K& key, const V& value)
2017-04-07 13:28:40
1259
原创 哈希表的实现
#include #include #include using namespace std;enum Status { EMPTY, EXIST, DELETE,}; templatestruct KVNode { K _key; V _value; Status _status; KVNode(co
2017-04-05 19:51:02
1106
原创 AVL树的实现
AVL树左子树和右子树的高度之差绝对值不超过1;树中的每个左子树和右子树都是AVL树;每个节点都有平衡因子,任一节点的平衡因子为-1,0,1(平衡因子为右子树高度减去左子树高度)#includeusing namespace std;templatestruct AVLTreeNode{ K _key; V _value; AVLTreeNode* _lef
2017-04-05 19:49:44
801
原创 朋友圈问题(并查集)
问题描述: 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写出程序求出这n个人里一共有多少朋友圈。 例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友。则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果
2017-04-01 19:50:57
3205
原创 二叉搜索树
二叉搜索树:1.每个节点都有一个作为搜索依据的关键码(key),所有节点关键码(key);2.左子树上所有节点的1关键码(key)都小于根节点的关键码(key);3.右子树所有节点的关键码(key)都大于根节点的关键码(key);4.左右子树都是二叉搜索树。实现:二叉搜索树(节点插入、删除和查找)#includeusing namespace std;te
2017-04-01 19:50:28
792
原创 线索化二叉树
#includeusing namespace std;#include enum PointerTag { THREAD, LINK };template struct BinaryTreeNode_Thd{ T _data; // 数据 BinaryTreeNode_Thd* _left; // 左孩子 Bi
2017-04-01 19:26:33
694
原创 非递归实现二叉树遍历(前/中/后序)
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//前序遍历void _PrevO
2017-03-30 19:26:33
432
原创 关于二叉树节点个数(节点总个数、叶子节点个数和第 K层节点个数)
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//节点总个数size_t _size
2017-03-30 19:25:57
5284
原创 队列实现二叉树层序遍历
//基本数据结构templatestruct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) ,_left(NULL) ,_right(NULL) { }};//层序遍历,队列实现void _L
2017-03-30 19:21:08
1406
原创 递归实现二叉树遍历(前/中/后序)
void _PrevOrder(Node* root){ if(root == NULL) return; cout_data<<" "; _PrevOrder(root->_left); _PrevOrder(root->_right);} void _InOrder(Node* root) { if(root == NULL) return; _InOr
2017-03-30 19:06:18
716
原创 项目:文件压缩与解压缩
项目简介:统计文件中字符出现的次数,利用堆建造Huffman树(字符出现次数多的编码短,出现次数少的编码长);根据建造好的Huffman树形成编码,对文件进行压缩;将文件中出现的字符以及它们出现的次数写入配置文件,便于解压缩;根据配置文件读取相关信息,重建Huffman树,对压缩后的文件进行译码。项目实现://heap.h#pragma once#include
2017-03-30 18:18:14
1385
原创 顺序表实现
#include #include #include #include #define MAX 100typedef int DateType;typedef struct List{ int a[MAX]; int size; //size动态变化}SeqList,*pSeqList;void InitSeqList(pSeqList pSeq){ memset(
2017-03-30 18:10:21
334
原创 栈和队列的实现
栈:特点:数组实现,先进后出; 基本操作:出栈,入栈,判空,元素个数,取栈顶元素;队列:特点:链表实现,先进先出; 基本操作:出队,入队,判空,元素个数,取队首和队尾元素。#include #include using namespace std;//Stack implementationtemplateclass Stack{p
2017-03-30 17:27:46
886
原创 Shell中反引号(`)与$()用法的区别
在测试下面脚本内容时,我们发现它们的输出内容不同,这样就引发了一个问题:反引号(`)与$()用法有区别吗?echo `echo \\\\ `echo $(echo \\\\ )将脚本内容修法改为8个反斜杠(\):echo `echo \\\\\\\\`echo $(echo \\\\\\\\ )由此,我们可以得出结论:1.反引号齐
2017-03-23 19:21:48
3438
2
原创 eval命令使用
简介:eval命令首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于一次扫描无法实现其功能的变量,即该命令对变量进行两次扫描。eval命令也可以用于回显简单变量,不一定是复杂变量。实例:(1)eval命令用于回显简单变量(2)eval命令执行含有字符串的命令 eval命令第一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat test。(3
2017-03-23 19:21:06
1456
原创 路由表的建立
1.路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该由哪个接口发送,其中最后一条是缺省路由条目。2.路由条目:路由表中一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成,如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。3.路由表中的表项:destination mask pre costdestinatio
2017-03-04 21:43:01
1427
原创 daemon进程fork一次和fork两次区别
守护进程也称为精灵进程(Daemon),是运行在后台的一种特殊的进程。它独立于控制终端并且周期性的执行某种任务负等待处理某些发生的事件。因为他们没有控制终端,所以说他们是在后台运行的。 守护进程存在的原因: daemon函数存在的原因是因为控制终端由于某些原因(如断开终端连接)会发送一些信号的原因。而接受处理这些信号的缺省动作会让进程退出。这些信号会由于终端敲一些特殊按
2017-03-03 22:29:28
918
原创 CRC校验算法
1.简介 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。2.工作原理 循环冗余校验码(CRC)的基本原理是:在
2017-03-03 17:32:04
506
原创 可重入函数与线程安全的区别与联系
可重入函数重入:重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。可重入:当程序被多个线程反复执行,产生的结果正确。不可重入:当程序被多个线程反复调用,产生的结果出错。可重入函数:一个函数只访问自己的局部变量或参数。不可重入函数:当函数访问一个全局的变量或者参数时,有可能因为重入而造成混乱。线程安全线性安全:一个函
2017-02-24 13:46:38
701
原创 gcc下生成静态及动态链接库
gcc下生成静态及动态链接库利用下面几个程序来研究一下gcc下生成静态及动态链接库的步骤:test.h文件:test.c文件main.c文件gcc下生成静态链接库: 1. 生成test.o目标文件: 2.使用ar将test.o打包成libtest.a静态库:
2017-02-17 21:36:09
423
原创 Linux信号量的SEM_UNDO标志
信号量通过控制其他通信资源来实现进程间通信,在此过程中负责数据的互斥、同步等功能,主要函数semget,semop,semctl。semop函数主要功能为对信号量进行P/V操作。函数原型为:int semop(int semid,struct sembuf* sops,unsigned nsops);sembuf结构如下图:semop操作的sembuf结构的
2017-02-16 21:36:50
2848
1
原创 Linux下文件的三个时间
在Linux下我们创建一个test文件,然后用stat查看它的文件时间:从上图我们可以看到三个时间,Access time(访问时间),Modify time(修改时间),Change time(状态时间)。下面来解释一下三个时间:(1)访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是像之前的state还有ls命令对atime是不会有影响的
2017-01-02 17:34:10
458
原创 Linux下文件查找指令(which/whereis/locate/find
Liunx要查找某个文件,但不知道放在哪里,可以通过下面命令来查找:(1)which 查看可执行文件的位置(2)whereis 查看文件的位置(3)locate 配合数据库查看文件位置(4)find 实际搜查硬盘查询文件名称1.which指令 在PATH变量指令路径中,搜索某个系统指令位置,并且返回第一个搜索结果。 -n 指定文件名长度,指定的长度必
2017-01-02 12:13:58
2074
原创 Liunx下的vim配置
Liunx下的vim配置1.在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”,如果用户主目录存在,也可以直接进入该配置文件(如下图)。 进入之后,(1)设置语法高亮 syntax on (2)显示行号
2016-12-30 13:47:13
1467
原创 内存操作函数memcpy和memmove
memcpy和memmove函数 memcpy和memmove可对内存中任何数据类型进行拷贝,但strcpy仅可以对字符串进行拷贝; memcpy函数原型:void* memcpy(void *dst,const void* src,size_t n); 从源src所指内存的起始地址开始拷贝n个字
2016-12-16 23:04:59
622
原创 二位数组中数字的查找
问题描述:在一个二维数组中,每一行都按照从左到右的递增顺序排列,每一列都按照从下到上递增的顺序排列。请完成一个函数,输入这样的一个二位数组和一个整数,判断数组中是否含有该数。 实例:下面二位数组,每行每列是递增的,如果查找10,返回true;如果查找数字11,则返回false; 1 3 5 7 2 4 6 8
2016-12-10 10:46:08
440
原创 析构函数定义为虚函数场景(多态应用)
析构函数定义为虚函数场景(多态应用) 当对象生命周期结束时,每个析构函数只负责清理回收自己的资源。有时我们会遇到一个父类指针指向一个子类对象的情况,在撤销该指针时,编译器会实施静态绑定(编译时确定使用哪个函数),这样只会调用父类的析构函数而不调用子类析构函数,因而导致内存泄漏。为此,我们需要将析构函数定义为虚函数。 代码块1:class CBase{
2016-12-07 22:32:16
917
原创 二进制中1的个数
二进制中1的个数一.问题描述输入一个整数,输出该二进制中1的个数,例如整数8二进制表示为1000,有1位是1,如果输入8,输出1.二.问题分析三.问题解决(用代码说话)
2016-11-09 23:04:26
821
原创 矩阵(Matrix)
#include #include using namespace std;template//对称矩阵class SymmeticMatrix{public: //构造函数,实现对称矩阵初始化 SymmeticMatrix(T* Array,size_t sz) :_sz(sz*(sz+1)/2-1) ,_array(new T[_sz]) ,_n(sz) {
2016-11-08 13:36:41
429
原创 数据结构-广义表(GeneralizedList)实现
广义表广义表是非线性的数据结构,是线性表的一种推广,由N个序列组成的有序序列;广义表在表的描述中又得到了表,即允许表中有表,简而言之,广义表的定义是递归的。广义表的简单表示:(1)A=();(2)B=(a,b);(3)C=(c,(a,b));(4)D=(d,(c,(a,b)));
2016-09-28 22:16:46
708
原创 面试题:一个数组实现两个栈
一个数组实现两个栈问题分析 利用顺序表模拟实现栈(一个数组实现一个栈)问题解决方案一: 一个数组从中间分为两部分,中间左端为栈1,中间右端为栈2; 示例图: 存在缺点:方案一会存在当一个栈满了,另一个栈还是空的的现象,这样产生浪费空间的问题。方案二: 一个数组的两端分别作为两个栈的
2016-09-28 17:42:48
1968
原创 Linux下apache+PHP+MySQL环境配置
在Linux的root目录下依次输入下面3条命令,即可完成环境的配置: wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #权限设置 ./phpstudy.bin #运行安装 当环境配置完成后出现下面界面,证明配置成功:在浏览器访问地址输入:loca
2016-07-01 16:32:36
560
原创 指针和引用那些事
指针和引用的概念:指针:变量的内存地址,是一个常量;引用:一个已定义变量别名;指针和引用区别:(1)指针是一个地址,指向内存中一块存储单元,它的值可以发生变化,可以指向其他存储单元;引用是一个变量别名,和原来变量是同一个东西,即在内存中占有同一存储单元,被编译器实现为const指针,并且不可被多次初始化(重定义);话不多说,看下面例子:void test1(){
2016-07-01 16:18:47
657
原创 单链表基本操作
单链表基本操作//Linklist.h#pragma once#include #include #include typedef int DataType;typedef struct LinkNode{ DataType data; struct LinkNode *next;}LinkNode,*qLinkNode;typedef struct LinkList
2016-06-19 14:44:52
621
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人