自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 问答 (1)
  • 收藏
  • 关注

转载 C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解

在C++的类定义里面,可以看到类似下面的定义:class List {private: Node * p_head; int length; ……Public: int GetLength () const; bool GetNodeInfo(const int index,Node & buffer) const {…… } bool

2017-12-30 20:51:18 239

原创 有关联的多表查询

前言数据库最多的操作应该就是查询了,尤其是有关联的多表之间的查询了。下面会介绍几种多表查询的操作的语句和实例演示,一方面是作为自己的总结,一方面希望可以帮助到需要使用的同学。对于下面的代码示例都是基于学生表,课程表,成绩表三张表。 学号是学生表中的主键课程号是课程表中的主键成绩表中的学号和课程号分别为外键,和学生表,课程表建立联系 - 简单多表查询首先要指定查询中都用到了那些表,然后在whe

2017-12-24 11:32:32 590

原创 数据库的存储过程

下面的代码示例为sqlserver。对于数据库的操作可以每次直接输入SQL语句,也可以使用过程存储。 两者的区别 存储过程是创建好就存在与数据中当中的,所以可以大大提高效率,减少一些重复性的操作。 例如:对于学生表当中要插入10000条记录,如果只简单使用SQL语句,需要输入重复性的语句INSERT INTO STUDENT VALUES注:下文的代码演示基于一张学生表,课程表,和一张成绩

2017-12-22 17:11:23 477

原创 基础I/O总结

引言对于文件I/O,即打开文件,读文件,写文件这个应该都不太陌生,这篇文章会首先回忆一下C语言中的一些基础I/O,进而引入到Linux下的文件I/O。C语言中的文件I/O打开文件#include<stdio.h>FILE *fopen(const char *path,const char *mode) 返回值:FILE* :文件指针参数:path:文件路径mode:打开方式这里的打开方式一

2017-12-21 14:45:26 264

原创 理解vfork函数

前言vfork这个函数,起初是在fork函数没有实现写实拷贝机制的时候出现的一个东西。然而现在的fork的函数早已经支持写实拷贝。 提到写实拷贝就多说几句,在操作系统中,创建一个子进程你就得给他分配进程所需的资源,如果每次创建子进程后都要拷贝父进程的资源有点太降低效率了。就是在这个环境下衍生出了vfork这个函数,父子进程同时使用同一份内存空间,虽然省去了重新开辟和拷贝的动作,但却非常危险。写实拷

2017-12-13 15:51:01 1100

原创 进程的基本控制

前言:整个操作系统都在围绕进程这一概念具体展开,所以对于进程的控制就显得十分重要,这篇文章主要讲述以下几点:1. 进程创建 2. 进程退出 3. 进程等待 4. 进程程序替换进程创建在操作系统中,对于父子进程的概念非常重要,必要linux自带的bash,对于你在命令行输入的一些指令,它是不会自己去处理你这些请求的,而是通过创建子进程去处理,它只需要知道子进程返回的消息就好了。为什么要基于

2017-12-10 23:19:37 581

原创 布隆过滤器

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。背景介绍: 在一个集合内想要快速查找一个元素是否存在,如果是整数集合的话,可以直接采用位图,可以在O(1)的时间复杂度内判断出是否存在,但是位图的缺陷很

2017-12-07 14:48:51 229

原创 位图

位图(Bit Map)是一个数组的每一个数据的每一个二进制位表示一个数据,0表示数据不存在,1表示数据存在。不好理解的话,由下面这道题来引出位图的使用: 给出40亿个不重复的无符号整数,没排过序,给出一个无符号整数,如何快速判断一个数是否在这40亿个数中?解题思路:首先没由给出数的范围,只说了无符号整数,所以就要考虑到0到最大整数42亿的整个区间的所有数。所有数据没有排过序,故而不能使用类似二

2017-12-07 11:15:43 347

原创 两个栈实现一个队列&两个队列实现一个栈

两个栈实现一个队列实现思路:定义两个栈stack1,stack2。stack1存放入队列序列,stack2存放出队列序列。如果进行Push操作,直接对stack1进行操作。如果进行Pop操作,stack2不为空,直接对stack2进行Pop操作,如果stack2为空,将stack1中的数据Push进stack2,然后对stack2进行操作。整个流程如下图: 先Push 1 2 3,然后进

2017-12-06 15:37:17 272

原创 出栈的合法性检测

对于一个给定的入栈顺序,可能的出栈顺序会有很多,但是肯定都要遵循栈“后进先出”的特点,那么怎么进行合法性检测呢?算法思想如下:定义变量InIndex标记入栈序列的当前位置,定义OutIndex标记出栈序列的当前位置对InIndex和Outindex处的数进行比较,如果相同,同时往后走。如果不相同,则出栈序列去和辅助栈的栈顶的数据比较,如果相同,则pop掉栈顶,++OutIndex,然后继续和栈

2017-12-02 18:24:01 1026

原创 实现最小栈

题目要求实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)首先针对这道题有多重解决方案。 1、定义两个栈,一个正常栈,另一个栈的栈顶始终保存整个栈内的最小值。思路如下:无论Push什么数据,正常栈肯定直接Push进去。而当新Push的数据大于最小栈的栈顶时,最小栈将自己的栈顶再次Push一遍。而当新Push的数据小于最小栈的栈顶时,意思是该

2017-12-02 17:17:30 889

原创 九种常见排序的比较和实现

首先排序算法大的可以分为:关键字比较非关键字比较关键字比较关键字比较就是通过关键字之间的比较和移动,从而使整个序列有序, 而关键字比较的算法,又可以像下面这样划分:对于排序算法之间的比较,无异于时间复杂度和空间复杂度,看下面这张表格 由上表不难得出下面这几个重要的点:从平均时间性能而言,快速排序最佳,其所需时间最佳,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。堆排序和归并之间,

2017-12-01 13:24:02 951

原创 冒泡排序

冒泡排序(Bubble Sort)见名知意,就是从前至后依次比较相邻的两个数据的大小,将大的往后移动,这样经过一次完整的比较和移动,就可以将序列中最大的一个数放置到序列的最后,这也就是它名字的由来,就像水里的水泡一样, 越往上浮越大。算法过程:比较相邻的元素,如果第一个比第二个大,就交换两个的位置。从序列的开头一直到结尾一直重复这样的工作,这样一趟结束够就可以将最大的数放置到最后。进行第二趟排

2017-12-01 11:21:44 344

原创 基数排序

基数排序(Radix Sorting)是一种与其他排序算法完全不同的排序方法,其他的排序算法都是通过关键字之间的比较和移动来完成的,而基数排序则不需要比较,而是采用一种多关键字的思想。什么是多关键字的思想呢? 给定一组数据,我可以先按个位的大小对所有数进行排序,然后再按十位进行排序,一直到最高位,这样就可以使整组数据变得有效,这样从最低位开始的方法称为最低位优先(Least Significant

2017-12-01 10:00:50 535

空空如也

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

TA关注的人

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