自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 覆盖和重载

覆盖方法当我们需要在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现,在C++里,覆盖(overriding)就可以做到。C++可以让我们很容易实现这种既有共同特征又需要在不同的类里有不同的实现的方法。修改例题:为我们的Animal添加eat()方法,并在Pig中覆盖。class Animal{public:void sleep();};class Pig:pu...

2020-03-14 17:50:04 147

原创 继承机制中的构造器和析构器

基类有个带有参数的构造器class Animal{public:Animal(std::string theName);std::string name;}class Pig:public Animal{public:Pig(std::string theName);}//在构造器中定义方法Animal::Animal(std::string theName){name...

2020-03-14 16:23:05 168

原创 类的继承

继承是面对对象编程技术的一个核心概念,它使得传统的软件开发模式发生了革命性的变化。继承机制可以创建一个类的堆叠层次结构,每个子类都将继承在它的基类里定义的属性和方法。通过继承机制,程序员可以对现有的代码进行进一步的扩展,并应用在新的程序中。基类和子类基类:可以派生出其他的类,也可以成为父类或超类。 Animal类子类:从基类中派生出来的类。Turtle类和Pig类Animal...

2020-03-14 16:03:01 196

原创 this指针

this指针例class Human{char fishc;Human(char fishc);}Human::Human(char fishc){fishc = fishc;}Human()构造器有一个名为fishc的参数,虽然它与Human类里面的属性同名,但却是不相干的两样东西,所以并没有错.怎样让构造器知道哪个是参数,哪个是属性呢?这时候就需要用到this指针 : ...

2020-03-14 15:23:34 107

原创 构造器和析构器

构造器,它是类里的一种特殊的方法。构造器和通常方法的主要区别:构造器的名字必须和它所在的类的名字一样系统在创建某个类的实例时会第一时间自动调用这个类的构造器构造器永远不会返回任何值创建构造器,需要先把它的声明添加到类里:class Car{Car( void );} 注意大小写与类名保持一致。在结束声明之后开始定义构造器本身:Car::Car(void) // 不用写 ...

2020-03-11 19:49:21 396

原创 对象

我们从一个类开始,首先类是一个模型。当我们为这个类创建实例的时候,也就是对象本身。这跟我们之前讲解的定义和使用结构的过程很相似,但是这更有扩展性和前瞻性。对于初学者而言,我们先给大家一个区别:对象的内部可以有变量和函数,而结构通常只由各种变量构成。创建简单的类因此,我们首先需要知道的一件事情是如何编写一个简单对象的模型 – 类类(Class)就像是一副蓝图,它决定一个对象将是什么样的(具备...

2020-03-11 15:45:16 113

原创 联合,枚举和类型别名

联合联合与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能存储这些值中的一个。union mima{ unsigned long birthday;unsigned short ssn;char* pet;}  定义了这个联合类型之后,就可以像下面这样创建一个该类型的变量了:    mima mima_1;  再接下来,我们可以像对结构成员进行赋值那样对联合...

2020-03-11 15:22:31 191

原创 传值,传址和传引用

c++一条基本原则:在默认情况下,参数只能以值传递的方式给函数,被传递到函数的只是变量的值,永远不会是变量本身。绕开值传递问题的第一种方法是向函数传递变量的地址取代它的值。changeA(&name,name+1)...

2020-03-11 10:59:36 360

原创 复杂的数据类型(结构)

对象的基础-结构结构( Structure)是一种由程序员定义的、由其他变量类型组合而成的数据类型。定义一个结构的基本语法是struct name{type varname1;type varname2;};结构的应用当需要处理一些貝有多种属牲的数据时,结构往往是很好的进择。例如当我们在编写一个档案管理程序时,涉及到的基本特征有:姓名、身份证、性别。。。struct Fish...

2020-03-11 10:45:28 763

原创 复杂的数据类型(数组,指针)

复杂=简单+简单介绍三种数据类型:数组,指针,数据结构。数组数组是许多程序设计语言的重要组成部分,尤其在c程序中经常用到它们。数组的优点在于,一个数组可以把多个不同类型的值存储在同一个变量名下。数组仍需要被声明为某一种特定的类型:int,float,chartype name[x];注意:我们不会把不同数据类型的数据混杂保存在同一个数组中,(不同物种不可杂交)。指针c语言和c++...

2020-03-10 15:59:05 463

原创 函数的重载

C++里的函数重载( overloading)机制比我们此前见到的东西都高深,这种语言的灵活性和强大功能在它身上体现得淋漓尽致。所谓函数重载的实质就是用同样的名字再定义一个有着不同参数但有着同样用途的函数。(人格分裂、多重身份 注意:可以是参数个数上的不同,也可以是参数数据类型上的不同!对函数进行重载,事实上可以简化编程工作和提高代码可读性。事实上重载不是一个真正的面向对象特征,它只是...

2020-03-10 15:00:30 125

原创 c++的文件I/O

C++的文件操作在ifstream in;inopen(“test. txt”)和ofstream out;outopen(test. txt");它们都是用一个open函数来完成打开文件的功能。当然,这不是唯一的方法,我们还可以这样实现。ifstream in("test. txt );和ofstream out("test. txt);以上代码在创建一个 ifstream和 o...

2020-03-10 13:31:42 105

原创 c语言和c++在终端I/O处理的异同

问题:对一个整型数组求和要求:定义一个存储着n个元素的数组要求用C语言完成这个任务用c语言来写#include <stdio.h>int addarray( int array[], int n ) ;int main(){int data[]={0,1,2,3,4,5,6,7,8,9};int size = sizeof(data)/ sizeof(data[ 0])...

2020-03-09 14:00:10 175

原创 C++语言与OO思想介绍

C++的特点C语言有一个优点,即它的速度可以很快。写出来的程序可以很精练、简单、小巧,不用为了解决某个问题环绕太平洋一大圈。但如果将C和C++相比较,C++就经常会为了解决某个问题绕一个大圈,所以代码量相对较大,并且里边有一些不是必须的代码。但C+有个绝对的优势,就是针对不同的对象去做实例化,这就是所谓的OO思想。什么是OO思想OO思想,即面向对象(Object Oriented)...

2020-03-05 18:33:56 539

原创 排序

排序的基本概念与分类文绉绉的概念假设含有n个记录的序列为{r1,r2,…rn},其相应的关键字分别为{k1,k2,…kn},需确定1,2,…n的一种排列p1,p2,…n,使其相应的关键字满足kp1<=kp2<=…<=kpn非递减(或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,…rpn},这样的操作就称为排序。在排序问题中,通常将数据元素称为记录。...

2020-03-04 15:34:22 100

原创 散列表(哈希表)查找

散列表(哈希表)查找我们要在a[]中查找key关键字的记录: 顺序表查找:挨个儿比较有序表查找:二分法查找散列表查找:?记录的存储位置=f

2020-03-03 21:46:52 552

原创 二叉排序树

二叉排序树如果这样简单无序存储,删除固然简单,若要查找则困难。故而产生了二叉排序树这样的存储方式。二叉排序树( Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:1 若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;2 若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;3 即它的左、右子树也分别为二叉排序...

2020-03-03 18:03:23 118

原创 查找

静态查找和动态查找静态查找:数据集合稳定,不需要添加,删除元素的查找操作。动态查找:数据集合在查找的过程中需要同肘添加或删除元素的查找操作。查找结构对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用...

2020-03-03 14:28:31 157

原创 拓扑排序

拓扑排序一个无环的有向图称为无环图( Directed Acyclic Graph),简称DAG图。所有的工程或者某种流程都可以分为若干个小的工程或者阶段,我们称这些小的工程或阶段为“活动”。在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关糸,这样的有向图为顶点表示活动的网,我们称之为AOV网( Active On Vertex Network)。AOV网中的弧...

2020-03-03 13:05:00 103

原创 图的遍历

图的遍历对于图的遍历,需要科学地设计遍历方案,通常有两种遍历次序方案:深度优先遍历和广度优先遍历。深度优先遍历深度优先遍历( Depthfirstsearch),也有称为深度优先搜索,简称为DFS。我们可以约定右手原则:在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。深度优先遍历其实就是一个递归的过程。它的具体思想类似找钥匙方案,无论从哪一间房间开始都...

2020-03-03 11:41:08 197

原创 数据结构(图的存储结构)

图的存储结构因为任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系(内存物理位置是线性的,图的元素关系是平面的)。邻接矩阵(无向图)考虑到图是由顶点和边或弧两部分组成,合在一起比较困难,那就很自然地考虑到分为两个结构来分别存储。顶点因为不区分大小、主次,所以用一个一维数组来存储是狠不错的选择。而边或弧由于是顶点与顶点之间的关系,一维数组肯定就搞不定...

2020-03-02 20:26:55 601

原创 数据结构(图)

图的定义图( Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,是图G中顶点的集合,E是图G中边的集合。注意:1 线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为顶点( Vertex)。2 线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,而图结构在咱国内大部分的教材中强调顶点集合V要有穷非空。3 ...

2020-03-02 19:59:42 166

原创 赫夫曼树

在数据膨胀、信息爆炸的今天,数据压缩的意义不言而喻。谈到数据压缩,就不能不提赫夫曼(Huffman)编码,赫夫曼编码是首个实用的压缩编码方案。赫夫曼树定义与原理结点的路径长度:从根结点到该结点的路径上的连接数。树的路径长度:树中每个叶子结点的路径长度之和。结点带权路径长度:结点的路径长度与结点权值的乘积。树的带权路径长度:WPL( Weighted Path Length)是树中所有叶子...

2020-02-28 18:59:31 117

原创 数据结构和算法(线索二叉树)

线索二叉树我们将已经定义好的结构进行“扩容”ltag为0时指向该结点的左孩子,为1时指向该结点的前驱。rtag为0时指向该结点的右孩子,为1时指向该结点的后继。线索二叉树结构如图:树到二叉树的转换树转换成相应的二叉树分两个步骤:1 在树中所有的兄弟结点之间加一连线2 对每个结点,除了保留与其长子的连线外,去掉该结点与其他孩子的连线森林到二叉树的转化森林转换为二叉树...

2020-02-28 18:53:45 503

原创 数据结构和算法(二叉树)

二叉树的定义世上树有万千种,唯有二叉课上讲。这里的二叉是二叉树,因为二叉树使用的范围最广,最具有代表意义,因此我们重点讨论二叉树。二叉树( BinaryTree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。这个定义显然是递归形式的,自古有“神使用递归,人使用迭代!二叉树的特点...

2020-02-26 18:19:42 187

原创 数据结构与算法(树)

树的定义树(Tree)是n(n>=0)个结点的有限集。当n=0时成为空树,在任意一棵非空树中:1 有且仅有一个特定的称为根(Root)的结点;2 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、.Tm,其中每一个集合本身又是棵树,并且称为根的子树( Subtree)注意:n>时,根结点是唯一的,坚决不可能存在多个根结点m>θ肘,...

2020-02-26 17:45:58 326

原创 BF和KMP算法

字符串字符串的定义定义:串( String)是由零个或多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2a3…an” (n>=0)串可以是空串,即没有字符,直接由””表示(注意里边没有空格),或者可以用希腊字母Φ来表示。子串与主串,例如“lie”是“believe”的子串,反之则倒过来。字符串的比较字符串比较大小跟传统的数字比较有点差别,比的是字符串里每个字符的A...

2020-02-25 14:59:00 149

原创 数据结构和算法(队列)

队列的定义队列( queue)是只允许在一端进行插入操作而在另一端进行删除操作的线性表。与栈相反,队列是一种先进先出( First inFirst out,FIF0)的线性表。与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础。应用:我们的输入缓冲区接受键盘的输入就是按队列的形式输入和输出的,不然的话就很容闹出问题。队列的链式存储结构队列既可以...

2020-02-25 13:12:33 147

原创 数据结构和算法(栈)

栈的定义定义:栈(Stack)是一个后进先出(Last in first out,LIFo)的线性表,它要求只在表尾进行删除和插入操作。所谓的栈,其实也就是一个特殊的线性表(顺序表、链表),但是它在操作上有一些特殊的要求和限制:1 栈的元素必须“后进先出”。2 栈的操作只能在这个线性表的表尾进行。3 注:对于栈来说,这个表尾称为栈的栈顶(top)相应的表头称为栈底( bottom)。...

2020-02-24 19:38:42 238

原创 数据结构和算法(线性表 上)

线性表的定义线性表(List):由零个或多个数据元素组成的有限序列。若元素存在多个,则第一个元素无前驱,而最后个元素无后继,其他元素都有且只有一个前驱和后继。 另外,线性表强调是有限的。若将线性表记为(a1,…ai-1,ai,ai+1,…an)则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。线性表元素的个数n(n&gt...

2020-02-24 17:18:11 266

原创 数据结构和算法(时间、空间复杂度)

算法效率的度量方法:有事后分析估算和事前分析估算。事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:1.算法采用的策略,方案2.编译产生的代码质量3.问题的输入规模4.机器执行指令的速度函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比...

2020-02-22 19:50:21 381

原创 数据结构和算法(算法)

数据结构和算法的关系,就是一对好朋友,不离不弃。算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。(学习的技巧和方式)对于给定的问题,可以有多种算法来解决。算法的五个基本特征:输入、输出、有穷性、确定性和可行性。输入:算法具有零个或多个输入。输出:算法至少有一个或多个输出。有穷性:算法执行有限个步骤后,自动结束而不会无限循环,并且每个...

2020-02-22 15:49:23 111

原创 i++陷阱

表达式a[i]=i++;是非法的,禁止一边修改一边使用i值的表达式,对i的一处访问(a[i])与最终存储在i中的值(i++计算得到)毫无关系。i=i++;的行为是未定义,即根据编译器和解释器不同,这行代码输出可能是不一样的。...

2020-02-22 15:06:36 97

原创 数据结构和算法(绪论)

数据结构和算法绪论数据结构:数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之 间的关条和操作等相关问题的学科。数据结构就是关糸,就是数据元素相互之间存在的一种或多种特定关系的集合。程序设计=数据结构+算法传统上,数据结构分为逻辑结构和物理结构。逻辑结构:是指数据对象中数据元素之间的相互关系。物理结构:是指数据的逻辑结构在计算机中的存储形式。四大逻辑结构...

2020-02-22 14:53:41 304

原创 sizeof和strlen

sizeof和strlen**sizeof(…)**是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。**strlen(…)*是函数,要在运行时才能计算。参数必须是字符型指针(char)...

2020-02-18 14:48:47 153

原创 数组和指针区别

数组和指针数组定义char a[6];请求预留6个字符的位置,并用名称a表示。也就是说,有一个称为“a”的位置,可以放入6个字符。指针声明char *p;请求一个位置放置一个指针,用名称“p”表示。这个指针几乎可以指向任何位置:任何字符或任何连续的字符,或者哪里也不指。*声明 char a[] =“hello”;char p =“world”; 将会初始化下图所示的数据结果:**数组和...

2020-02-11 15:09:20 198

原创 空指针

空指针空指针:它“保证与任何对象或函数的指针值都不相等”。也就是说,空指针不会指向任何地方,它不是任何对象或函数的地址。每种指针类型都有一个空指针,而不同类型的空指针的内部表示可能不尽相同。取地址操作符&永远也不会返回空指针。同样对ma11oc的成功调用也不会返回空指针。(如果失败,ma11oc的确返回空指针,这是空指针的典型用法:表示“未分配”或者“尚未指向任何地方”的“特殊”指针值。...

2020-02-10 21:35:05 3797

原创 定义类型

比较用户定义类型 typedef和# definetypedef char String_t;#define String_d char *String_t s1, s2;String_d s3, 34;s1、s2和s3都被定义成了char,但s4却被定义成了char。

2020-02-10 12:00:45 679

原创 字符指针变量和字符数组

字符指针变量和字符数组(1)字符数组由若干个元素组成,每个元素中放一个字符;而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。(2)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值 char str[14]; str=“I love China!”;而对字符指针变量,可以采用下面方法赋值: char *a;a=“I love China...

2020-02-09 12:14:51 289

原创 指针和指针变量

指针和指针变量指针:一个变量的地址称为该变量的指针。指针变量:专门用来存放另一变量的地址(指针)的变量。用来指向另一变量。指针变量的值=指针变量中存放的值=指针(地址)int i;float *p;//p是指向实型变量的指针变量,指针变量名是p,*p为指针变量p所指向的存储单元p=&i;//&i为变量i的地址*p=3;//将3赋给指针变量p所指向的变量i,与i=3;作用...

2020-02-09 11:23:42 1956

空空如也

空空如也

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

TA关注的人

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