自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

七月朔风

爬在路上的码虫

  • 博客(36)
  • 收藏
  • 关注

原创 浅析几个常见进程调度算法

今天来谈谈操作系统的几个常见的进程调度算法。那么第一步首先要了解什么是进程调度算法?简单来说就是根据系统的资源分配策略所规定的资源分配算法。举个例子来说明。假设任务一在执行完成后选择哪个任务来进行使得某一因素最小,这个因素可能是进程执行的总时间或是磁盘寻道时间等等。因此对于不同的系统目标有着不同的要求,要选择的调度算法也就不尽相同。接下来,就聊聊几个常见的进程调度算法。      Firs

2016-06-05 15:57:18 666

原创 Linux下的第一步——进度条(gcc&Makefile)

相信大家在初步学习C/C++的时候都写过“hello world”的代码。在学习了C/C++之后进入Linux系统的学习我们不用再从“hello world”这种入门级程序开始了,毕竟已经有了几年的小经验,但是重新开始在一个新的系统下编写代码,特别是对于Linux中庞杂的指令是需要一个熟悉与练习的过程的。进度条的小程序对于我们熟悉指令,练习VIM下代码的编辑以及gcc和Makefile等工具的使用

2016-06-03 13:51:43 639

原创 剖析linux下Find指令

无论在何种系统下,都需要进行查找。Windows下进行查找我们已经轻车熟路了,但是linux下该如何进行查找呢?今天我就来讲讲如何进行查找。通常情况下我们都是使用whereis和locate来进行查找的。但是如果遇到真的找不到的情况,就需要用find指令来进行查找了。但是使用find命令有一个缺点就是比较慢,因为whereis和locate都是利用数据库来查找数据的,速度相对来说是比较快的,但并没

2016-06-03 13:15:39 351

原创 浅谈Linux下VIM配置

vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。初识Linux,对于很多东西还在学习中。但是作为一个熟悉了VS编译环境的菜鸟来说,面对Linux的界面只有吐槽了。。。去网上搜索了一些关于vim配置的相关文档,自己进行了一些配置,当然还不禁全面,以后可以继续进行配置。下面就将

2016-06-03 13:15:36 336

原创 将博客搬至CSDN

博客以后转到CSDN了。。。。

2016-06-03 13:15:33 224

原创 广义表的C++简单实现

广义表是数据结构中非常关键的一部分,它的学习对于树和二叉树有很大的起承作用。那么,它是怎么实现的呢?广义表的实现应用到了一个很熟悉的算法——递归。来看看它的代码吧!#pragma once#include#includeusing namespace std;enum Type{ HEAD,//头 VALUE, //值 SUB, //子表};struct Generaliz

2016-06-03 13:15:31 437

原创 简单剖析稀疏矩阵的转置

矩阵我们在线性代数中所学的一种有力的工具,可用它可以处理很多的工程问题。今天,我们不讨论矩阵本身,而是研究如何来存储矩阵,使得矩阵的运算能够更加高效。首先,我们了解矩阵中的一种特殊矩阵——>稀疏矩阵。那么什么是稀疏矩阵呢?如果在矩阵中,多数的元素为0,通常认为非零元素比上矩阵所有元素的值小于等于0.05时,则称此矩阵为稀疏矩阵(sparse matrix)。有时候为了节省存储空间,我们可以对这类矩

2016-06-03 13:15:28 1298

原创 浅谈复杂链表的复制

链表是一种很常见的数据结构,单链表、双向链表、循环链表和复杂链表都是其衍生物。复杂链表之所以命名为复杂链表,也正是由于其结构的复杂。它比其他其他种类的链表多了一个指针域,这个指针域可以指向链表中的任一结点,也可以为空。其结构定义如下:struct ComplexNode{ DataType _data; struct ComplexNode * _next; struct ComplexN

2016-06-03 13:15:25 881

原创 一个数组实现两个栈

利用一个数组实现两个栈是数据结构中的一道经典面试题,那么如何来求解呢?大多数人为了方便都采取了静态实现方式,但是这种方式不能进行扩容,不够完美。博主利用C++尝试了一下动态实现。首先,通过了解栈的特点(后进先出),可以想到如下几个方案:First>>将数组的下标为奇数的位置都插入栈1的元素,数组的下标为偶数的位置都插入栈2的元素。这种方式插入删除时需要利用数组的下标来控制对栈1操作还是栈2操作,这

2016-06-03 13:15:22 525

原创 应用栈求解迷宫问题(C++实现)

栈是数据结构中一种重要的线性结构,限定仅在表尾进行插入和删除操作的线性表,因此我们也可以认为它是一种特殊的线性表。由于栈的这个特点,我们又可以称其为后进先出的结构。如图所示:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/7E/DF/wKioL1cLi_vRu4ebAAARqXsqTA8989.png" title="捕获.PNG

2016-06-03 13:15:19 6177

原创 智能指针的简单剖析和实现

在C语言中我们用指针来进行内存管理,这也是C语言的强大之处。然而,也正是指针的存在使得C语言变得令人懊恼,内存泄漏、垂悬指针等等问题。强大的C++则采用智能指针(Smart_Ptr)来处理这个问题.好了,什么是智能指针呢?智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。这样以防止内存泄漏。智能指针都有哪些种类呢?650) this.width=650;" src="http:/

2016-06-03 13:15:16 272

原创 链表笔试题汇编(五)

题目:判断单链表是否带环。分析:链表在内存中地址不是连续的,因此有可能出现带环的问题,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一个环。如何判断一个链表是否带环呢?最简单易行的方法就是定义两个指针,一个快指针一个慢指针,均初始化为指向链表的头。接下来,将快指针每次前进两步,慢指针每次前进一步,即Slow=Slow->_next;Fast=Fast->_next->_

2016-06-03 13:15:13 281

原创 C++实现单链表

C++和C语言最大的不同就是类和模板。利用C++实现单链表当然少不了类。首先利用结构体定义好结点。struct Node{  DataType _data; struct Node* _next; Node(const DataType& d) :_data(d) ,_next(NULL) { }};接下来,利用类的构造函数、析构函数以及运算符的重载等来将链表搭建起来。cl

2016-06-03 13:15:11 224

原创 利用C++类实现顺序表

以前写过用C语言实现的顺序表,现在来看看用C++类实现的吧class SeqList{public: SeqList(int capacity=DEFAULT_CAPACITY) :_capacity(capacity) ,_size(0) ,_pData(0) { _pData=new DataType[_capacity]; } ~SeqList() { i

2016-06-03 13:15:08 1318

原创 string类的实现终极版

写时拷贝(COW)的实现:#include#includeusing namespace std;class String{public: String(char *str="") :_str(new char[strlen(str)+sizeof(int)+1]) { *(int*)_str=1; _str+=4; strcpy(_str,str); }

2016-06-03 13:15:05 341

原创 string类的实现加强版

对上次的实现做了改进之后,实现为如下代码:#include#includeusing namespace std;class String{ public: String(char *str="") :_str(new char[strlen(str+1)]) { strcpy(_str,str); } String(const String& str) :_st

2016-06-03 13:15:02 283

原创 string类的实现

利用C++实现string类,代码如下:#include#include#includeusing namespace std;class String{public: String(const char *str) :_str(new char [strlen(str)+1]) { strcpy(_str,str); } String(const String&

2016-06-03 13:14:59 295

原创 利用C++日期类实现简单的日期计算器

网络上有一个日期计算器可以通过输入的日期来计算天数,或者通过日期加减天数来计算出相应的日期。这个小工具对在我们生活中还是非常有用的,它的代码实现是不是很难呢?其实用我们学习过的C++类来处理问题就变得很简单了。参考代码:(加强版)#include#includeusing namespace std;class Date{public: Date(int year=1900,int 

2016-06-03 13:14:57 677 3

原创 链表笔试题汇编(四)

题目:合并两个有序链表。递归实现参考代码:LinkList *Merge(LinkList *pHead1,LinkList *pHead2){ if(pHead1==NULL) { return pHead2; } else if(pHead2==NULL) { return pHead1; } LinkList *pNewMergeHead=NULL; if((pHe

2016-06-03 13:14:54 233

原创 链表笔试题汇编(三)

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。参考代码:void ReverseList(pList *pHead){ pLinkList cur=*pHead; pLinkList prev=NULL; pLinkList pNewHead=NULL; assert(pHead); if(cur==NULL) { return; } if(c

2016-06-03 13:14:51 284

原创 链表笔试题汇编(二)

题目:输入一个链表输出其倒数第k个结点。参考代码:LinkList *FindktoTail(LinkList *pHead,unsigned int k){ LinkList *L1=pHead; LinkList *L2=NULL; unsigned int i=0; if(pHead==NULL || k==0 ) { return NULL; } for(i=0 ; i

2016-06-03 13:14:48 310

原创 链表笔试题汇编(一)

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。分析:删除结点可以从链表的头结点开始顺序遍历,发现某个结点的next指向要删除的结点时,将该结点的next指向要删除的下一个结点。但是基于这种思路,得到的时间复杂度是O(n)。删除结点只是让这个结点不出现在该链表中,可以采取覆盖的方式。也就是将下一个结点的内容复制到需要删除的结点上覆盖掉原有的内容。这样的话,就可以达到

2016-06-03 13:14:45 357

原创 面试题:数值的整数次方

题目:实现函数double power(double base,int exp)求base的exp次方。不得使用库函数,同时不需要考虑大数问题。分析:pow函数我们已经使用过很多次,对于其函数原型我们也很熟悉。    double pow( double x, double y );    很快我们就会写出如下的代码:double MyPowerwithUnsigned(double base,i

2016-06-03 13:14:43 352

原创 巧用位运算求解二进制中1的个数

位运算是将数字化为二进制后,对每一位的0或1进行的运算。一般的运算有与&、或|、异或^和移位等。如何利用位运算来求解二进制中1的个数呢?首先大多数人想到的是先判断最右边的一位是不是1,接着将其右移一位,知道数为0停止。将一个数与上1则可以解决这个问题。代码如下:int NumofOne1(int num){ int count=0; while(num) { if(num&1) {

2016-06-03 13:14:40 1464

原创 面试题:旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。例如输入{1,2,3,4,5}的一个旋转为{3,4,5,1,2},该数组的最小值为1。分析:首先想到的肯定是遍历一遍找出最小的元素,但是这样的时间复杂度为o(n),且没有利用到旋转数组的特性。观察可得,旋转数组可以分为两个有序的子数组。而且前一个数组的元素均大于后一个

2016-06-03 13:14:37 306

原创 struct和typedef struct详细解析

struct和typedef struct分三块来讲述:  1 首先://注意在C和C++里不同    在C中定义一个结构体类型要用typedef:    typedef struct Student    {    int a;    }Stu;    于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)    这里的Stu

2016-06-03 13:14:34 220

原创 二维数组的查找

题目:在一个二维数组中,每一行都按照从左到右递增,每一列都按照从上到下递增,请完成一个函数,输入这样一个二维数组和整数,判断其中是否含有该数。代码:#include#include#define COL 4#define ROW 4using namespace std;bool find(int *arr,int columns,int rows,int num){ bool 

2016-06-03 13:14:31 298

转载 C++中四个与类型转换相关的关键字

1 reinterpret_cast'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。如果情况是从一个指针到整型的拷贝,内容的解释是系统相关的,所以任何的实现都

2016-06-03 13:14:28 449

原创 引用和指针的那些事儿

提到引用和指针这两个东西,很容易将两者混淆,而这个问题又是笔试题中的常客。今天,我们就来聊聊指针和引用的那些事儿。首先,指针和引用都是与地址相关的概念,然而在本质上却是存在大大的不同。指针是指向的是一块内存,指针里面存放的内容是它指向的那块内存的地址;而引用只是给那块地址重新起了一个别名而已,并没有为其分配任何内存空间。其次,我们知道引用只能在定义时初始化一次,之后不能改变其指向其他变量,而指针是

2016-06-03 13:14:26 607

原创 C++入门小程序练习

初识C++,向大家介绍几个我用来做练习编写的几道小程序,都是C++Primer上面的练习题,分享给大家。eg1:编写程序,使用递减运算符在循环中按递减顺序打印出10到1之间的整数。代码如下:#include#includeusing namespace std;int main(){ int i=10; while(i) { cout<<i; --i; } system

2016-06-03 13:14:23 23986 3

原创 C++道路上的第一步

学习一门新的程序设计语言的最好方法就是联系编写程序。有了之前学习C语言的经验,又加上两者之间的共性,相信会得心应手一些。和学习C语言一样,我首先编写了一个简单的c++程序。#include#includeusing namespace std;int main(){ cout<<"helleo world"<<endl; system("pause"); return 0;}程序

2016-06-03 13:14:20 332

原创 字符串转化为整数的算法改进及优化

我们知道C语言有一个库函数atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。那么如何实现这个函数呢?很多同学很快会写出下列代码:int StrtoInt(char str[]){ assert(str); int num=0; while(*str) { num=num*10+*str-'0'; ++str; } return

2016-06-03 13:14:17 350

原创 字符串转化为整数的算法改进及优化

我们知道C语言有一个库函数atoi (表示 alphanumeric to integer)是把字符串转换成整型数的一个函数。那么如何实现这个函数呢?很多同学很快会写出下列代码:int StrtoInt(char str[]){ assert(str); int num=0; while(*str) { num=num*10+*str-'0'; ++str; } return

2016-06-03 13:14:14 333

原创 浅谈字符串处理函数(三)

前面我们谈到了strcpy和strncpy这两个函数。这两个函数都没有考虑到内存重叠,假如要考虑内存重叠,我们又该如何实现呢?所谓重叠,就是src未处理的部分已经被dst给覆盖了memcpy的函数原型如下:void *memcpy(void *dest, const void *src, size_t n);memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所

2016-06-03 13:14:11 260

原创 浅谈字符串处理函数(二)

上篇我们介绍了strcpy函数,但是strcpy函数是一个存在潜在危险性的函数。试想一下,如果我们事先给的目的字符串数组太小,而需要拷贝的源字符串长度大于目的字符串长度,此时这个函数会怎么办呢?所以,接下来我们介绍一个它的升级版strncpy函数。strncpy 是 C语言的库函数之一,把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest。strncpy的

2016-06-03 13:14:09 267

原创 浅谈字符串处理函数的实现(一)

C语言标准库中有许多处理字符串的库函数,例如strlen、strcpy、strcat、strcmp和strstr等等。这些库函数的实现使得我们平时处理字符串简单轻松了许多。那么这些库函数到底是怎样实现的呢?了解了其具体实现后,相信对于应用将更加得心应手,不会再出现参数调用出错,返回值不对等低级错误了。今天我先带大家了解了解其一,字符串拷贝函数strcpy。strcpy函数的原型是:char *st

2016-06-03 13:14:06 287

空空如也

空空如也

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

TA关注的人

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