自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 【c语言】棋盘游戏--三子棋

一、问题概述大家都玩过棋盘游戏吧,像五子棋一样,玩家或者是电脑一人下一次,当玩家或者是电脑的某一方先将各自的五个棋子下成一条线时,谁就赢,棋盘游戏就会结束。                           当然,我今天要介绍的是三子棋,和五子棋的原理是一样的,当玩家或者是电脑的某一方先将各自的三个棋子下成一条线时,谁就赢,棋盘游戏就会结束。下面我们用如下棋盘模拟一下电脑上的棋盘

2016-12-01 11:01:22 2903

原创 用栈和递归求解迷宫问题

一、问题概述小时候,我们都玩过走迷宫的游戏吧。看一下这个图例:遇到这种问题时,我们第一反应都会先找到迷宫的入口点,然后对上下左右四个方向进行寻迹, 检测当前位置是否是通路,是否可以通过,直至找到出口位置,才是迷宫的正确轨迹。如若走到死胡 同里,则必须返回重新选择路径走。 我们来模拟一下迷宫问题,我们的迷宫是这样的:哈哈~虽然有点low!但是可以帮助我们解决实

2016-11-30 21:27:17 10902

原创 用栈实现后缀表达式求解问题

一、问题概述:人们经常书写的数学表达式属于中缀表达式,今天要解决的是,后缀表达式的求解问题。如下图分别为举例的中缀表达式和后缀表达式:二、解决思路我们用栈存储后缀表达式中的数据部分,当遇到操作符时就取出栈中的栈顶两个元素,检测操作符的类型,并进行相应的计算(这里要注意的是,对于除法运算,栈顶的两个元素的位置得区分)。如下所示:三、实现代码

2016-11-29 14:55:47 3992

原创 Stack/Queue与Vector/List的联系

Vector:(顺序表【数组存储】)1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去。2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可。不会改动原有的空间。适用于多次重复的对尾部插删。3.顺序存储,地址是连续的。4.头插和头删都需要移动一定的大小。时间复杂度为o(N)。而链表只需o(1)。List:(链表)1.需要每次都创建节点。2.适用于

2016-11-25 23:48:52 1068

原创 c++详解【new和delete】

说起new和delete,了解过c++的人应该都知道吧,它是用来分配内存和释放内存的两个操作符。与c语言中的malloc和free类似。c语言中使用malloc/calloc/realloc/free进行动态内存分配,malloc/calloc/realloc用来在堆上分配空间,free将申请的空间释放掉。malloc:void FunTest(){ int *pTest =

2016-11-21 09:22:34 28982 2

原创 c++【深度剖析shared_ptr】

shared_ptr解决了scoped_ptr管理单个对象的缺陷,且解决了防拷贝的问题。shared_ptr可以管理多个对象,并且实现了资源共享。但是仍然存在一些问题,比如,我们熟悉的双向链表:struct Node{Node(const int& value):_pNext(NULL),_pPre(NULL),_value(value){}Node* _p

2016-11-21 08:31:25 934 2

原创 c++详解【智能指针】

智能指针?是一个指针吗?这里给大家说的是,它不是一个指针,但它模拟了指针所具有的功能。那么,为什么要有智能指针的引入呢?看看下面的例子吧~void FunTest(){ int *p = new int[10]; FILE *pFile = fopen("1.txt","r"); if(pFile == NULL) { return; } if(p) { de

2016-11-17 09:02:01 578

原创 远程仓库

上节我们安装好了git,并配置好git,github之间的ssh。这节我们就开始用git管理我们的仓库吧。(这节在windows下安装的git bash上给大家演示吧)首先,创建好一个仓库,主要步骤如下:创建好仓库后,就会出现如下页面:打开git bash,输入create a new repository中的命令即可在github上上传代码喽。例:比如

2016-11-12 13:06:38 439

原创 【送给Git初学者】

好多人都听过Git吧,目前最流行的分布式版本管理系统。还有好多类似的cvs、svn(速度慢、必须联网,这些是集中式版本控制系统).....那么,它是用来干什么的呢?举个例子可能更好理解吧!比如你写了一篇博客,然后发表了。过了几天后,你发现博客的某些内容需要更改,得重新编辑,但是你并不想把原来的内容丢弃,以防以后会用。每修改一次,就编写一篇博客,那么时间长了,这时,就有一大堆的相当于副本类的

2016-11-09 21:10:28 531

原创 c++详解【继承】

学过c++的人都知道,c++的三大特性:封装、继承、多态。我们今天说的是c++的继承,那么为什么要引入继承,它有什么特点呢?首先,继承的特点是:使代码复用,为后面学习多态做铺垫。继承分为:私有继承(private)、公有继承(public)、保护继承(protected)。分别举例介绍一下它们各自的特性吧:一、继承私有继承://Inherit.h#pragma

2016-11-03 16:33:18 433 1

原创 静态多态之泛型编程(模板)

起初,我们写不同类型的加法函数是这样写的吧://Template.h#pragma onceint Add(const int left,const int right){ return left+right;}char Add(const char left,const char right){ return left+right;}float Add(co

2016-11-02 21:33:18 599

原创 python之字典

python之字典

2016-10-05 19:50:19 374

原创 python之条件、循环语句

其实,很多语言的语法都是相通的,包括初学python一样。今天要说的是条件、循环语句。这部分也是相对比较简单的,就python而言,只是书写方式稍作改动罢了。1、条件语句(1)格式:if 判断条件: 执行语句……else: 执行语句……条件为真时,执行if条件下的内容;条件为假时,执行else条件下的内容;(2)当判断多个条件时,还有另外一种格式:

2016-10-05 15:17:57 1385

原创 python入门--基本语法

标准数据类型:Number(数字),String(字符串),List(列表),Tuple(元组),Sets(集合),Dictionary(字典)Number只支持int(表示长整型),float,bool,complex(复数)python中有type()函数检测变量类型del+要删除对象;可以删除对象(1)python可以为多个变量赋值:eg:a,b=

2016-09-25 17:32:10 394

原创 c++之指针&&引用

引用

2016-09-24 16:03:36 8341 1

原创 c++命名空间

命名空间

2016-09-24 12:48:25 635

原创 一系列链表题

1、链表的逆置:

2016-09-16 13:21:09 349

原创 有趣的约瑟夫环问题

大家有没有听过约瑟夫环这个问题呢?我们先来看看它是一个什么样的问题~约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Flavius Josephus)提出的。该问题的说法不一,传说他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士

2016-09-16 12:45:09 513

原创 有趣的链表相关题型

链表:也是线性表的一种。形象的来说:就像火车的一个个车厢一样,一个个的链起来的。它有一个特点:它的头没有前驱,尾没有后继。为什么会引入链表这个概念呢?之前我们知道的顺序表,是用数组的形式保存数据的。它使用起来也非常方便,优点在于它的尾删尾插非常方便,直接将数组空间大小加1,给最后一个数组赋值就ok了。但是对于数组来说,也有一定的缺点。比如:如果在中间插入或删除的话,就得移动一定得位

2016-09-16 12:16:14 358

原创 详解volatile关键字

volatile字面意思:易变的。在计算机里,是防止优化的意思,然而是怎么防止优化的呢?待我一一道来哦。先看这样一个例子:#includeusing namespace std;int main(){ int num = 10; int *p = &num; *p = 20; cout<<num<<endl; getchar(); return 0;}结果是什么呢?

2016-09-14 22:41:53 621 2

原创 剖析printf函数

printf是什么,对于起初学习c语言的同学来说肯定都特别的疑惑。在这里,解答一下:它是一个函数。既然是一个函数的话,想必肯定有返回值和参数吧。那么它的返回值和参数是什么呢?1、看一下这个例子,可能更好理解点:这个看起来只是个printf函数,但它却在printf函数基础上嵌套了好几层printf,这样下来结果是什么呢?我们就知道,printf(buf, fmt, ar

2016-09-13 17:28:27 500

原创 时间复杂度&空间复杂度

我们编过不少代码,起初学习的时候我们习惯性的认为,只要代码能正确的运行就ok啦~很少考虑代码的优化带来的好处。今天说一下影响代码性能的两个重要指标--时间复杂度&空间复杂度。时间复杂度:就是函数(指数学中的函数),具体执行的操作次数。通常用渐进表达式O()来表示。空间复杂度:对象的个数。占用的空间。算法分析一般分为三类:最坏情况、平均情况、最好情况。算法分析要保持大局观,忽略掉常数

2016-09-06 14:20:52 556

原创 c++之类型萃取

刚刚我们接触过模板类,类似于这样的:在这个类中,我们如何知道它是什么类型的呢?这里,我们可以在类中加入一个内嵌类型,如:这样就可以知道它是用户自定义的还是本身类型就拥有的,我们用到了类型萃取的方式。我们把__IsPodType叫做内嵌型别。当我们遇到其他类型时,就将__IsPodType定义为__FalseType;当遇到自定义类型时,就将__IsPodTy

2016-08-30 21:47:05 643

原创 详解强制类型转换

今天谈谈类型转换的问题吧,之前我们也遇到过类型转换,比如c语言中这样的赋值:显然,i和j是不同类型的变量,但是却可以完成赋值,结果是这样的:其实它们是做了隐式的类型转换,相当于:double j = (double)i;所以成功的赋值。还有另外一种:结果是:像这样的,属于显示的类型转换。这样类似的还有很多。下面我介绍c++中几种特殊的类型转换

2016-08-30 14:08:29 1064

原创 linux之睡眠函数(my_sleep)

我们在程序中,很多次用到sleep()函数,让它睡眠几秒后再执行该进程。今天呢,我要给大家实现一下sleep函数。看看代码哦:

2016-07-15 11:13:31 2923 2

原创 linux之多线程(1)

我们之前讲了进程,今天我们重新认识另外一个概念---线程。我们首先会想到的是进程和线程有什么区别和联系,对吧?进程是由程序执行起来,跑在操作系统的,是系统进行资源分配和调度的基本单位。进程具有资源独占性,进程是只有通过进程间通信才能进入临界区享受临界资源,访问同一块地址空间。而线程是什么呢?线程最大的特点就是资源共享,在同一个进程中,各个线程之间资源是共享的。说到这里,我就举一个现实生活中最普遍的

2016-07-14 21:26:04 1249

原创 linux之管道

管道(PIPE)是linux中一个重要的通信方式,在进程中,我们通过从一个进程中读取到的数据转到另一个进程中的写数据中,这时就要有不同的进程之间共享同一份资源,就是所谓的进程间通信。由于进程的特点是资源独占,所以我们就借助管道来实现。我们常说的管道多指无名管道,还有一种是命名管道(一次生成多个目标文件[FIFO])。下面分别讲解一下:管道的特点:单向数据通信,有血缘关系的进程通信,生命周期(随

2016-07-06 15:59:05 477

原创 linux---谈谈vfork和fork的区别及exit与return

fork():创建子进程的函数,是大家比较熟悉的吧。pid_t id = fork();这里的vfork();也是创建子进程的函数。现在我们来剖析一下它们吧。第一例:先看一个fork()的例子哦。对于fork()而言,创建子进程成功后直接打印出父子进程执行的两条语句。即:这里要特别强调的是:父子进程的调度的顺序是由调度器决定的。再看看vfork()函

2016-06-17 21:13:39 6767 6

原创 linux之父子进程的输出

首先,我们来回忆一下父进程与子进程,前几节讲了如何创建子进程,像这样的,pid_t id = fork(); 这样我们就创建好了一个子进程,然而fork()函数的返回值是什么呢?这里要记住:子进程返回0,父进程返回子进程的pid,如果创建失败的话就返回-1.由于是父进程创建的子进程,那么子进程就继承自父进程。比如,子进程继承了父进程的数据空间,堆和栈的副本。但是,父子进程是不是就共享同一片地址空间

2016-06-17 20:14:51 8709 4

原创 linux--几种常见的进程调度算法

1 先来先服务(队列)先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直

2016-06-14 17:46:52 3605

原创 说说堆及堆排序

#pragma once #include#include#includeusing namespace std;templatestruct Less{ bool operator()(const T& left,const T& right) { return (left < right); } };templatestruct Greater{ boo

2016-06-10 18:29:41 373

原创 linux之task_struct

每个进程中都有一个进程控制块--PCB。PCB--维护进程相关的信息。然而,linux内核的进程控制快就是task_struct结构体,它可以保存进程的信息。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

2016-06-08 21:43:31 451

原创 linux-----强大的find

650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0029.gif" alt="j_0029.gif" />我又回来了。哈哈。今天我们来说一下linux中的另一个强大的find命令,灰常重要,灰常重要,灰常重要。显而易见,find就是对某一个文件或者目录的查找喽。但是它的一个显著的特点就是:一般放在后台执行,从整个文件系统中遍历,当然

2016-06-08 21:24:12 717 2

原创 初识Linux

650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0029.gif" alt="j_0029.gif" />计算机已经成为生活中不可或缺的一部分,大家上网,查资料,敲代码等一系列的活动都来自计算机,然而大家可能都不会在意每执行一个动作的时候,计算机内部是如何运作的。首先来说一下,计算机有五大单元,分别是:输入单元(如键盘,鼠标,扫描仪

2016-06-08 21:24:09 645

原创 模板

模板是泛型编程的基础,即与类型无关的逻辑代码。利用模板机制可以显著减少冗余信息,能大幅度地节约程序代码,进一步提高面向对象程序的可重用性和可维护性。模板是实现代码重用机制的一种工具,它可以实现类型参数化;模板分为函数模板和类模板。为了使用函数名相同,参数不同,返回值可同可不同的函数时,我们起初用了重载的方式。#includeusing namespace std;int add(int a,

2016-06-08 21:24:06 314

原创 动态顺序表

//SeqList.h#ifndef __SEQLIST_H__#define __SEQLIST_H__#include#include#includetypedef int DataType;typedef struct SeqList{ DataType* array; size_t size; DataType capacity;    //容量}SeqList,

2016-06-08 21:24:03 526

原创 已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并,按学号升序排列。

#include #include #define N 10typedef struct student{    int num;    float score;    struct student *next;}stu;stu *creat(){    int i;    stu *p,*head = NULL,*tail = head;    for (i = 0

2016-06-08 21:24:01 11499 3

原创 有两个链表a,b,设结点包括学号,姓名。从a链表中删去与b链表中有相同学号的那些结点。

#include  #include #include  typedef struct linknode {  int num; char name[20]; struct linknode *next; }node; node *creat() {  node *h = NULL,*s,*t; int d; int i = 1;  char name1[20];

2016-06-08 21:23:58 2738

原创 静态顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。顺序表分为静态存储的顺序表和动态存储的顺序表。这里先说明静态顺序表的基本操作的实现://SeqList.h#ifndef __SEQLIST_H__#define __SEQLIS

2016-06-08 21:23:55 553

原创 函数指针

之前我们了解了指针,知道如何定义一个指针,接着知道二级指针如何使用。下面我们简单的来回忆一下:int a = 10;     //一个整形变量int *p = &a;    //一个指向整形的指针int **q = &p;   //q是一个指向p的指针,即它是一个指向整形的指针的指针在这里我们要认识一个新的指针,函数指针,即指向函数的指针。例:int (*fun)();   //fun是函数指

2016-06-08 21:23:52 516

空空如也

空空如也

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

TA关注的人

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