![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构、算法与应用(C++版)
文章平均质量分 50
helenandyoyo
这个作者很懒,什么都没留下…
展开
-
笔记二:计数排序、选择排序、冒泡排序、插入排序
计数排序1、 名次 :所谓名次,通俗理解即为该元素在序列中排行老几的意思。2.、如何求名次:依次对每一个元素进行比较,若排在自己(该元素)前面的元素比自己大,则前面的元素在排行计数上加1,反之则自己加1。3、利用附加数组的计数排序:根据自身名次重新整理一份排序序列存储在附加数组中,然后将附加数组值拷贝到原序列中。 1)代码:template<typename T> void SortClass原创 2016-04-26 15:04:44 · 1656 阅读 · 0 评论 -
笔记十二:智能指针(二)
导语:在智能指针(一) 中讲解了智能指针的实现方式一,即雇佣一个使用计数类记录共享对象。现在讲解智能指针的另一种实现方式,句柄形式的智能指针。在介绍句柄形式的智能指针之前,先介绍代理类。代理类:1、现假设存在一个基类和它的派生类,设计如下:基类:class Animal{public: Animal () {cout << "Create Animal..."<<endl;} v原创 2016-07-06 17:46:03 · 1320 阅读 · 0 评论 -
笔记十三:设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
引言: 假设现在有一个超市(Market),超市销售饼干(Biscuit)、水果(Fruit)、饮料(Drink)三种食品。 按照常规,我们建立三个类:class Biscuit、class Fruit、class Drink。class Biscuit{public: Biscuit(){} ~Biscuit(){} void Show(){ cout << "H原创 2016-07-14 10:43:49 · 1010 阅读 · 0 评论 -
笔记十:复制构造函数、深拷贝、浅拷贝
复制构造函数 定义: 只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数成为复制构造函数。复制构造函数可用于: 1、根据另一个同类型的对象显示或隐式初始化一个对象 2、复制一个对象,将它作为实参传递给一个函数 3、从函数返回时复制一个对象 4、初始化顺序容器中的元素 5、根据元素初始化列表初始化数组元素 ——以上定义来自《C+原创 2016-06-05 16:14:40 · 3372 阅读 · 0 评论 -
笔记一:n个元素的所有排列递归算法
求n个元素的所有排列组合问题:给定n个元素,设序列为{a,b,c},求所有的排列组合。思路:每次递归,对组合的第一个元素排序。 代码:#include<iostream>#include<iterator>#include<algorithm>using namespace std;template<class T>void permutation(T list[], int k, int原创 2016-04-24 16:57:34 · 9406 阅读 · 0 评论 -
笔记七:基于数组的循环队列的实现
定义:队列也是一种线性表。其特点是队列的插入与删除在两端进行,是一个先进先出(FIFO)的线性表。插入元素的一端叫队尾,删除元素的一端叫队首。三种表现形式:1、 公式1: location(i)=i——队列第i个元素映射到数组中,即为下标为i的元素,i>=0。 2、 公式2:location(i)=location(队首元素)+i——队列第i个元素在数组中的位置只与队首元素有关,则删除原创 2016-05-07 21:40:24 · 1986 阅读 · 0 评论 -
笔记六:基于数组的栈的实现
栈定义:后进先出的数据结构实现一:基于数组表示的线性表的派生栈的实现。 原理:把线性表的插入和删除操作限制在同一端进行,即得到栈的表现形式。 操作:把数组线性表的右端定义为栈顶。 代码:template<typename T> class stack{public: virtual ~stack() {}; virtual bool empty() const = 0;原创 2016-05-06 21:50:15 · 702 阅读 · 0 评论 -
笔记九:二叉树的创建、递归与非递归版前序、中序、后序查找、树高和节点判断
代码:#include<iostream>#include<vector>#include<stack>using namespace std;template<typename T>struct binaryTreeNode{ T element; binaryTreeNode<T> *leftChild; //左子树 binaryTreeNode<T原创 2016-05-30 16:23:25 · 2886 阅读 · 2 评论 -
笔记五:线性表——单链表表示
线性链表注意: firstnode指的就是第一个节点,而不是一个指向第一个节点的指针。代码:#include<iostream>using namespace std;template<typename T>struct chainNode{ T element; chainNode* next; chainNode() {}; chainNode(const原创 2016-05-05 21:39:07 · 434 阅读 · 0 评论 -
笔记四:线性表——数组描述
线性表定义:有序表,元素按照一定顺序形成的有序集合。数组描述的线性表:1、代码:#pragma warning(disable:4996)#include<iostream>#include<iterator>#include<algorithm>using namespace std;typedef struct{ int a; int b;} Mytype;temp原创 2016-05-05 10:02:44 · 1058 阅读 · 0 评论 -
笔记八:静态变量、静态成员函数、函数指针、静态函数指针
静态变量http://www.cnblogs.com/dongzhiquan/archive/2009/07/21/1994792.html 一文对静态变量进行了充分的阐述,现整理部分重要内容如下,加深印象。1、静态变量的存储方式和生命周期:属于静态存储方式,其存储空间为内存中的静态数据区,该区域的数据在整个程序的运行期间不会释放,所以其生命周期为整个程序运行时间段。2、静态局部变量:定义在函数体内转载 2016-05-23 21:39:26 · 2621 阅读 · 0 评论 -
笔记三:const 在变量、函数、指针中的使用
const限定符在变量、函数、指针中的使用个人理解: 不管是在变量、函数、指针等中加入const限定符,一般都按照优先级高低+从右向左结合的方式去理解(ps:如理解有误,望指教~)case 1:const int butfsize = 512; 理解: a):没有优先级,则变量名bufsize首先与int结合,表明是一个int型变量; b):声明为int型的bufsize变量再与const原创 2016-04-28 20:25:36 · 525 阅读 · 0 评论 -
笔记十一:智能指针(一)
前言:浅拷贝容易出现对同一内存空间进行2次撤销,造成程序崩溃。于是,我们可以利用指针智能来解决这一问题。本节主要介绍利用使用计数类构造智能指针类。使用计数: 智能指针将一个计数器与类指向的对象相关联。使用计数跟踪该类有多少个对象共享同一指针。使用计数为0时,删除对象。规则: 1、每次创建类的新对象时,初始化指针并将计数器置1 (计数器置1的原因是在执行析构函数时,计数器先减1,然后再判断是否为0原创 2016-06-22 09:54:54 · 464 阅读 · 0 评论