数据结构与算法应用C++
文章平均质量分 78
月光迟暮
菜鸡
展开
-
搜索树
二叉搜索树的应用不是很多,但他是重要的数据结构AVL树和红黑树的基础。二叉搜索树二叉搜索树是一棵二叉树,可能为空;一棵非空的二叉搜索树满足以下特征:每个元素有一个关键字,并且任意两个关键字都不同;因此,所有的关键字都是唯一的;在根节点的左子树中,元素的关键字(如果有的话)都小于根节点的关键字;在根节点的右子树中,元素的关键字(如果有的话)都大于根节点的关键字;根节点的左、右子树也都是二叉搜索树。若是有重复值的二叉搜索树则把大于改成大于等于,小于改成小于等于。索引二叉搜索树源于普通二叉搜索原创 2021-02-01 19:45:55 · 1715 阅读 · 0 评论 -
竞赛树(tournament tree)
竞赛树的基本操作是替换最大(或最小)元素。如果有n个元素,这个基本操作的用时为O(logn)O(logn)O(logn),虽然用堆和左高树也能用近似的时间(O(logn)O(logn)O(logn))完成这个操作,但是用来实现可预见的断接操作都不容易,当我们需要按指定的方式断开连接时,比如选择最先插入的元素,或选择最左端元素(假定每个元素都有一个从左到右的名次),这时,竞赛树就成了我们要选择的数据结构。有两种竞赛树:赢者树和输者树,赢者树更直观且模拟的是现实的竞赛树,但输者树的实现更加高效。...原创 2021-02-01 16:04:09 · 2088 阅读 · 0 评论 -
优先级队列
优先级队列优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先级队列执行的操作有1)查找一个元素;2)插入一个新元素3)删除一个元素。与这些操作对应的是top、push、pop。在最小优先级队列中,查找和删除的元素都是优先级最小的元素;在最大优先级队列中,查找和删除的元素都是优先级最大的元素。堆一棵大根树:每个节点的值都大于或等于其子节点的值。一棵大根堆:既是大根树也是完全二叉树。(图中的a和c)大根堆的操作大根堆的插入其中a是初始状态,通过插入后,状态应该变为b,其插入过原创 2021-01-31 20:24:20 · 455 阅读 · 0 评论 -
二叉树和其他树
树一棵树t是一个非空的有限元素的集合,其中一个元素为根,其余的元素(如果有的话)组成t的子树,数根是1级,孩子是2级,一个树的高度或深度为数树中级的个数。一个元素的度是指其孩子的个数。叶节点的度为0,一棵树的度是指其元素度的最大值。二叉树一棵二叉树是t个有限元素的集合,当二叉树为空时,其中有一个元素称为根,余下的元素被划分成两科二叉树,分别称为t的左子树和右子树。二叉树和树的根本区别是:二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。而树的每个元素可有任意数量的子树。在二叉树中,每原创 2021-01-31 10:37:43 · 438 阅读 · 0 评论 -
跳表和散列
增加了额外的向前指针的链表叫做跳表。它采用随机技术来决定链表的哪些节点应增加向前指针,以及增加多少个指针,跳表的查找、插入、删除的平均复杂度为O(logn)O(logn)O(logn),然而,最坏情况下的时间复杂度却变成O(n)O(n)O(n)。散列是用来查找、插入、删除的另一种随机方法。与跳表相比,它把操作时间提高到O(1)O(1)O(1),但最坏情况下的时间复杂度认为O(n)O(n)O(n)。字典字典是由一些形如(k,v)的数对组成的集合,其中k是关键字,v是与关键字k对应的值。任意两个数对,其关原创 2021-01-30 22:49:21 · 536 阅读 · 0 评论 -
队列及其应用
队列的各种实现队列和栈一样,是一种特殊的线性表。队列的插入和删除操作分别在线性表的两端进行。因此,队列是一个先进先出(FIFO)的线性表。队列(queue)是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾(back或rear),删除元素的那一端称为队首(front)#ifndef QUEUE_H_INCLUDED#define QUEUE_H_INCLUDEDusing namespace std;template<class T>class queue原创 2021-01-25 09:21:53 · 951 阅读 · 0 评论 -
栈及其应用
栈的各种实现栈是一种LIFO的结构,是一种特殊的线性表,其插入(也称入栈或压栈)和删除(出栈或弹栈)操作都在表的同一端进行。这一端成为栈顶,另一端称为栈底。#ifndef STACK_H_INCLUDED#define STACK_H_INCLUDEDusing namespace std;template<class T>class stack{public: virtual ~stack(){} virtual bool empty()const = 0;原创 2021-01-22 15:18:28 · 638 阅读 · 0 评论 -
数组与矩阵
在实际应用中,数据通常以表的形式出现。尽管用数组来描述表是最自然的方式,但为了减少程序所需的时间和空间,经常采用自定义的描述方式。例如,当表中大部分元素都为0的时候,就会采用自定义的描述方式。一个数组的每一个实例都是形如**(索引,值)**的...原创 2021-01-20 20:05:45 · 728 阅读 · 0 评论 -
并查集
等价关系假定一个具有n个元素的集合U={1,2,...,n}U=\{1,2,...,n\}U={1,2,...,n},另一个具有r个关系的集合R={(i1,j1),(i2,j2),...,(ir,jr)}R=\{(i_1,j_1),(i_2,j_2),...,(i_r,j_r)\}R={(i1,j1),(i2,j2),...,(ir,jr)}。关系R是一个等价关系,当且仅当如下条件为真时成立:对于所有的a,有(a,a)∈R(a,a)\in R(a,a)∈R时(即关系是自反的)当且仅当(b原创 2021-01-19 15:04:31 · 94 阅读 · 0 评论 -
桶排序,基数排序
桶排序这里是百度百科桶排序介绍图,排序方法描述就是:对于要排序的目标取值范围在0~n-1的m个数,实例说明,排序3,5,6,1,2,4,3这7个数字,取值在0~9之间;首先建立10个桶子,编号分别为0、1、2……9,按照这7个数字,把他们分别放到相应编号的桶子中从桶子中按顺序收集数据注明:源数据为按链表排列,每个桶子也是一个链表。代码如下:template<class T>void chain<T>::binSort(int range){// Sort t原创 2021-01-18 15:24:50 · 532 阅读 · 0 评论 -
线性表——数组描述
异常类的定义// exception classes for various error types#ifndef myExceptions_#define myExceptions_#include <string>using namespace std;// illegal parameter valueclass illegalParameterValue{ public: illegalParameterValue(string theMessag原创 2021-01-16 19:13:52 · 245 阅读 · 0 评论 -
C++基础2
本篇博客没有营养,仅仅作为个人笔记使用#include<iostream>using namespace std;template<class T>//顺序搜索int sequentialSearch(T a[], int n, const T& x){//在数组a[0:n-1]中查找元素x //如果找到返回该元素位置,如果没找到范湖-1 int i; for (i = 0;i < n && a[i] != x;i++);原创 2021-01-16 10:44:49 · 156 阅读 · 0 评论 -
程序性能分析、渐进记法、性能测量
程序性能分析程序性能指的是运行这个程序所需要的内存和时间的多少。用两种方法确定程序的性能:一个是分析方法即性能分析,一个是实验方法即性能测量。空间复杂度空间复杂度的组成指令空间指令空间指的是编译之后程序指令所需要的存储空间数据空间数据空间指的是所有常量和变量值所需要的存储空间,它由两个部分构成:常量和简单变量所需要的存储空间动态数组和动态类实例等对象所需要的空间环境栈空间环境栈空间用来保存暂停的函数和方法在恢复运行时所需要的信息返回地址正在调用的函数的所有局部变量的值以及原创 2021-01-16 09:31:53 · 179 阅读 · 0 评论 -
C++基础
C++基础知识本文作为《数据结构与算法应用-C++语言描述》的先验知识,为了日后更好学习这本书打好C++基础函数与参数传值参数计算一个整数表达式int Abc(int a,int b,int c){ return a + b + c;}a,b,c是函数Abc的形式参数。当Abc(2,x,y)被执行时,a被赋值为2,b为x,c为y。与传值形式参数相对应的实际参数的值将在函数执行之前被复制给形式参数,复制过程是由该形式参数所属数据类型的复制构造函数( copy constructor原创 2021-01-14 21:57:37 · 134 阅读 · 0 评论