自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

原创 位运算

位运算是把数字用二进制表示后,对每一位上0或1的运算。

2017-04-13 16:01:54 97

原创 递归与循环

递归:在一个函数的内部调用这个函数本身。循环:通过设置计算的初始值及终止条件,在一个范围重复计算。递归优点:通常递归的代码会比较简洁。在树的前序,中序,后序遍历算法的代码中,递归的实现明显比循环的简单。递归缺点:递归是函数调用本身,函数调用时由时间和空间消耗的。每一次函数调用都在内存栈中分配空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需

2017-04-13 15:58:55 194

原创 算法之排序

排序:插入排序,冒泡排序,归并排序,快速排序。从额外空间消耗,平均时间复杂度,最差时间复杂度比较优缺点。根据数据元素是否完全在内存中,排序算法可分为:内部排序:排序期间元素全部存放在内存中的排序。外部排序:排序期间元素无法全部存放在内存中的排序。一.插入排序

2017-04-10 21:51:48 96

原创 算法之查找

查找:顺序查找,二分查找,哈希表查找,二叉排序树查找。如果题目要求在排序的数组中(或者部分排序的数组)查找一个数字或某个数字出现的次数,都可以尝试用二分法查找算法。哈希表和二叉排序树查找的重点在于考察对应的数据结构。哈希表优点: 能够利用它在O(1)时间查找某一元素,是查找效率最高的查找方式。哈希表缺点: 需要额外的空间来实现哈希表。

2017-04-10 21:42:33 113

原创 栈和队列

栈是一种常见的数据结构。操作系统会给每个线程创建一个栈用于存储函数调用时各个函数的参数、返回地址及临时变量。栈的特点:先进后出。最后被压入(push)栈的元素最先被弹出(pop)。队列的特点: 先进先出。两种数据结构相互联系。

2017-04-10 20:41:38 75

原创 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树。假如输入的前序遍历和中序遍历的结果都不含重复的数字。前序遍历:{1,2,3,7,3,5,6,8}中序遍历:{4,7,2,1,5,3,8,6}重建二叉树并输出头结点。struct BinaryTreeNode{ int nValue; BinaryTreeNode* pLeft;

2017-04-10 20:37:06 113

原创

树:除了根节点外每个节点只有一个父节点,根节点没有父节点;除了叶节点外所有节点都有一个或多个子节点,叶节点没有子节点。父节点和子节点之间用指针链接。树大部分为二叉树。二叉树:每个节点最多只有两个子节点。树的遍历方法:1. 前序遍历2. 中序遍历3. 后序遍历3种遍历都有递归和循环两种不同的实现方法,每一种遍历的帝国实现都比循环实现简洁的多

2017-04-09 17:05:12 141

原创 输入一个链表的头结点,从尾到头打印每个节点的值

不能改变链表本身结构,后进先出符合栈的特性。typedef struct ListNode{ int value; ListNode *pNext;}ListNode;void list_reserve(ListNode *pHead){ stack nodes; ListNode *pNode=pHead; while(pNode!=NULL)

2017-04-09 16:16:09 254

原创 链表

链表是一种动态数据结构,即创建链表时,当插入一个节点,我们只需要为新节点分配内存,然后调整指针的指向来确保新节点被链接到链表中。内存分配时每增加一个节点分配一次内存。单向链表节点定义:struct ListNode{ int m_nValue; ListNode *m_pNext; };在链表的末尾增加节点void AddToTail(ListNo

2017-04-09 14:14:19 112

原创 字符串基础知识

C/C++中每个字符串都以字符'\0'作为结尾。C/C++把常量字符串放到单独的一个内存区域。当几个指针赋给相同的常量字符串时,它们实际上指向相同的内存地址。但用常量内存初始化数组,情况却不同。例:int _tmain(int argc, _TCHAR* argv){ char str1[]="hello world"; char str2[]="hello world";

2017-03-20 20:58:16 128

原创 数组基础知识

1. 数组的空间与时间效率数组占据一块连续的内存并按照顺序存储数据。空间效率不好:创建数组时,需要首先制定数组容量的大小,然后根据大小分配内存。即使我们只在数组中存储一个数字,也要为所有的数据预先分配内训。时间效率很高:数组中的内存是连续的,可以根据下表在O(1)时间读写任何元素。                         可以根据此优点,使用数组实现哈希表。每个下标及数

2017-03-20 20:27:27 292

原创 虚函数

在继承中,如果基类和派生类中定义了同名的成员函数,当用基类指针指向公有派生类的对象后,可以用虚函数来实现通过基类指针找到相应的派生类成员函数。一. 为什么引入虚函数     根据肤质兼容规则,任何被说明为指向基类对象的指针都可以指向它的公有派生类对象,若试图指向它的私有派生类对象是被禁止的。反之,不能将一个声明为指向派生类对象的指针指向其基类对象。     声明为指向基类对象的指针,当

2017-02-09 22:02:10 431

原创 运算符重载

封装性、继承性和多态性是面向对象设计的三大支柱。      C++语言支持两种多态性:编译时的多态性和运行时的多态性。      编译时的多态性通过使用重载来获得,运行时的多态性通过使用继承和虚函数获得。      重载包括函数重载和运算符重载。一. 概述     1.定义        运算符重载是对已有的运算符赋予多重含义,同一个运算符作用域不用类型的数据导致不同的

2017-02-09 12:47:16 198

原创 类模板

类模板为类定义一种模式,使得类中的某些数据成员,某些成员函数的参数,某些成员函数的返回值,能取任意类型(包括系统预定义的和用户自定义的数据类型)。       如果一个类中数据成员的类型不能确定,或者某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的实际的类,而是代表一类类。       C++语言编译系统会根据类模板和特定的数据类型产生一个类,即

2017-02-08 22:39:06 127

原创 多重继承

在派生类的声明中,基类有多个,则这种继承方式为多重继承。定义如下:       class:[继承方式]基类名1,[继承方式]基类名2,...[继承方式]基类名n       {};一. 二义性和支配原则    1. 二义性的两种情况       (1) 一个派生类是多重派生即由多个基类派生而来,加入这些基类中的成员有成员名相同的情况,如果使用一个表达式引用了这些同

2017-02-07 13:31:11 253

原创 继承与派生--单一继承

继承是面向对象程序设计的第二个重要特性,通过继承实现了数据抽象基础上的代码重用。继承的作用是减少代码冗余,通过协调来减少接口和界面。两种继承方式:单一继承:派生类只能由一个直接基类。多重继承:派生类可以有多个直接基类。

2017-01-20 22:34:10 296

原创 指向类成员的指针

1.由类外指向类内的指针声明格式:类型符 类名::*指针名=类中数据成员地址描述;使用方法:类所定义的对象名.指针名#includeclass A{ public: int i,*p; A(){i=10;p=&i;}};int A::*p=&A::i; //p是类外指针void main(){ A aa,bb;

2017-01-05 16:14:26 195

原创 静态成员

静态成员分为静态数据成员和静态成员函数1. 静态数据成员    静态数据成员被存放在内存的某一单元内,该类的所有对象都可以访问它。无论建立多少个类的对象,都只有一个静态数据的副本。    含有静态数据成员的类在创建对象时不为静态数据成员分配存储空间。    class B{ static float x.y; int a,b;};创建一个类B的对象时,编译器

2017-01-05 14:22:27 161

原创 类的聚集——对象成员

对象成员也称为类的聚集,指在类的定义中数据成员可以为其他的类的对象,即类对象作为另一个类的数据成员。如果在类定义中包含有对象成员,则在创建类对象时先调用对象成员的构造函数,再调用类本身的构造函数。析构函数与构造函数的调用顺序正好相反。例1:含有对象成员的类的构造函数和析构函数的调用顺序#include#includeclass studentID{public:

2017-01-05 14:13:39 665

原创 类的对象

对象是类的实例,是属性和服务的封装体。1. 对象的定义两种方法:定义类的时候直接定义在使用时定义对象class location{.....};location dot1;2. 成员的访问无论是数据成员还是成员函数,只要是共有的(public),在类的外部就可以通过类的对象进行访问。通过对象调用成员           对象名.公有成员

2016-12-28 14:02:53 266

原创 类的基础知识

一.类由三部分构成:类名,数据成员和成员函数。class 类名{  private:             //私有数据成员和成员函数  public:            //公有数据成员和成员函数protected:            //受保护的数据成员和成员函数};1.私有成员private:    私有成员是在类中被隐藏

2016-12-27 14:28:24 405

原创 const 修饰符

C语言用#define定义常量#define PI 3.14159C++用const修饰符来定义常量const float PI=3.14159const可以与指针一起使用,组合情况有三种:指向常量的指针: 一个指向常量的指针变量         const char * pc="abcd";         使用了const, 不可以改变指针所指向的常量。pc是一

2016-12-26 15:16:35 161

原创 引用

引用用于程序的不同部分使用两个以上的变量名指向同一地址,使得对其中任一个变量的操作实际上都是对同一地址单元进行的操作。声明引用一般如下:int num;int &ref = num;int& ref=num;int & ref=num;注:引用不是值,不占用存储空间,声明引用时,目标的存储状态不会改变。引用一旦被初始化,就不能再重新赋值。#incl

2016-12-26 14:30:43 333

原创 动态内存的分配和释放

C++ 语言提供了两种方法进行内存的动态分配和释放:1. 从C标准库中继承来的malloc()和free()函数(包含头文件malloc.h)2. new和delete1.new 运算符指针变量= new 数据类型;new从堆内存中为程序分配可以保存某种类型数据的一块内存空间,并返回指向该内存的首地址,该地址存放于指针变量中。2.delete 运算符delete

2016-12-26 14:19:14 366

原创 软件开发绪论

1. 软件开发从本质上讲就是对软件所要处理的问题进行正确的认识,并把这种认识正确的描述出来。2.模块化程序设计的设计思想史:自顶向下、逐步求精。其程序结构按功能划分为若干个基本模块,这些模块成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一个模块内部均由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序、过程或函数。程序=数据结构+算法

2016-12-26 14:10:54 358

原创 sort()函数

使用sort()函数在做简单排序算法时候是非常好的方法。sort(buffer,buffer+n,cmp); buffer为待排序数组的首地址,buffer+n为待排序数组的最后一个数据的地址。cmp为自定义的排序规则函数,可省略。sort()函数默认是为升序排列,允许排序类型包括数值/字符/字符串。sort()也可以对结构体进行排序。cmp函数的返回值为true和false或1和0,

2016-12-16 18:55:09 389

原创 类的大小

32位机器上,有三个类A B C定义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序.struct A{ A() {} ~A() {} int m1; int m2;};struct B:A{ B() {} ~B() {} int m1; char m2; static char m3

2016-12-02 16:17:08 229

原创 函数模板和类模板

函数模板的实例化是由编译程序在处理函数调用时自动完成的类模板的实例化必须由程序员在程序中显式地指定函数模板针对仅参数类型不同的函数类模板针对仅数据成员和成员函数类型不同的类

2016-12-02 15:25:40 207

原创 .h头文件中的ifndef/define/endif 的作用

主要作用是防止重复引用,比如一个头文件定义如下:#ifndef _HEAD_H_#define _HEAD_H_//代码部分#endif假如该头文件第一次被引用,_HEAD_H_没有被定义,所以就执行宏定义,直到#endif该头文件第二次被引用的时候,_HEAD_H_已经被定义,下面的语句就不会执行

2016-12-02 15:16:29 2531

原创 基类和派生类,虚函数

基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自持有的成员。

2016-11-26 22:22:06 2321

原创 友元

友元有3种:友元函数友元类友元成员函数一.友元函数友元函数常常用来重载二元运算符。创建友元函数:1.将其原型放在类声明中,并在原型中加上关键字friend。friend Time operator*(double m, const Time & t);虽然operator*()是在类声明中声明的,但它不是成员函数,因此不能使用成员运算

2016-11-23 19:25:38 141

原创 类的构造函数和析构函数

类构造函数:专门用于构造新对象,将值赋予它们的数据成员。构造函数是一种特殊的类成员函数,在创建类对象时被调用。构造函数的名称和类名相同,但通过函数重载,可以创建多个重名的构造函数,条件是每个函数的参数列表都不同。构造函数没有声明类型。

2016-11-23 18:57:09 479

原创 常见文件系统 系统函数

常见文件系统 系统函数fcntl  文件控制   open  打开文件   creat  创建新文件   close  关闭文件描述字   read  读文件   write  写文件   readv  从文件读入数据到缓冲数组中   writev  将缓冲数组里的数据写入文件   pread 对文件随机读   pwrite  对文件随机写

2016-11-23 16:16:15 158

原创 C++11 STL中的容器

C++11 STL中的容器 ================================================== 一、顺序容器:vector:可变大小数组; deque:双端队列; list:双向链表; forward_list:单向链表; array:固定大小数组; string:与vector相似的容器,但专门用于保存字符。 ======

2016-11-23 16:09:14 319

原创 基类与派生类,虚函数

基类与派生类,虚函数

2016-11-22 18:20:45 526

原创 全局变量与局部变量

调用全局的变量前面要加::

2016-11-22 18:19:36 231

原创 C++ 复合类型--字符串

C++处理字符串有两种方法:C-字符串,基于string类库。一.C-字符串:     1. 定义:         以空字符结尾‘\0’. eg.: char cat={'f','a','b','\0'};         或使用字符串常量(string constanst)或字符串字面值(string literal),eg.: char bird[11]="M

2016-11-22 14:51:46 203

原创 fork,vfork,clone

fork()是全部复制 vfork()是共享内存 clone()是可以将父进程资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享,具体要复制哪些资源给子进程,由参数列表中的clone_flags来决定。另外,clone()返回的是子进程的pid。 clone是fork的升级版本,不仅可以创建进程或者线程,还可以指定创建新的命名空间(namespace)、有选

2016-11-21 23:37:34 122

原创 字符串相关

有如下程序段:char a[] = "xyz", b[] = {'x', 'y', 'z'};if (strlen(a) > strlen(b)) printf("a > b\n");else printf("a 则程序输出:achar a[] = "xyz", b[] = {'x', 'y', 'z'};a容易理解,strlen(a)=3;

2016-11-21 23:36:21 110

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

递归     时间复杂度:递归次数    空间复杂度:递归深度(调用栈帧)

2016-11-21 19:39:11 129

空空如也

空空如也

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

TA关注的人

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