数据结构
jieniyimiao
真的英雄,在于,以脆弱的凡人之躯,而具有神性的不可战胜。
展开
-
问题:如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元?.md
1,3,5元面值若干,凑钱问题算法思想假如要计算11元需要的面值数最小,那么,11元减去一张1元或者3元或者5元,即10元,8元,6元分别需要的面值数,取出最小,加上1,即可以得到11元最小的。所以,n元最小问题,是由n-1元,n-3元,n-5元三种状态里面取到的最优解。其中计算的递归树为:d(11) = min{d(10),d(8),d(6)} + 1递推式d(i) = mi...原创 2019-11-09 11:52:45 · 2566 阅读 · 0 评论 -
单链表反转
从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。Node* ReverseList(Node* head) { Node *p,*q; p=head->next; while(p->next!=NULL) //在这个循环过程中p所指的元素一直是不变的 { q=p原创 2015-09-23 16:20:52 · 1189 阅读 · 0 评论 -
STL中set底层实现方式? 为什么不用hash?
红黑树与hash table最大的不同是,红黑树是有序结构,而hash table不是。但不是说set就不能用hash,如果只是判断set中的元素是否存在,那么hash显然更合适,因为set 的访问操作时间复杂度是log(N)的,而使用hash底层实现的hash_set是近似O(1)的。然而,set应该更加被强调理解为“集合”,而集合所涉及的操作并、交、差等,即STL提供的如交集set_inter原创 2015-10-21 21:56:31 · 2797 阅读 · 0 评论 -
从B 树、B+ 树、B* 树
第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找原创 2015-08-19 21:33:00 · 1594 阅读 · 0 评论 -
Strassen矩阵相乘算法
引言Strassen的矩阵相乘方法是一种典型的分治算法。目前为止,我们已经见过一些分治策略的算法了,例如归并排序和Karatsuba大数快速乘法。现在,让我再来看看分治策略的背后是什么。同动态规划不同,在动态规划中,为了得到最终的解决方案,我们经常需要把一个大的问题“展开”为几个子问题,但是这里,我们会更多的谈到如何把一些子解决方案组合到一起。这些子问题的解决方案是对等的,他们的归并方式也是通过某原创 2015-08-17 20:04:48 · 1981 阅读 · 0 评论 -
浅析常用的排序算法
排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序、分配排序和计数排序。插入排序主要包括直接插入排序,折半插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序原创 2015-08-03 20:40:48 · 1190 阅读 · 2 评论 -
[数据结构]最小堆的类模板实现
堆数据结构是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为最大堆和最小堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。1、根结点若有子树,则子树一定也是堆。2、根结点一定大于(或小于)子结点。因为要求堆必须是完全二叉树,所以可以用线性的数据结构,比如数组,来实现堆。利用数组实现,则对于长为N的堆中的元素从0到N-1排列原创 2015-07-30 18:06:26 · 2944 阅读 · 1 评论 -
[数据结构]二叉树之二叉链表的类模板实现
该类模板实现了一个二叉树的模板类,采用二叉链表实现。定义二叉树节点类,采用二叉链表实现。/////////////////////////#include #include #include #include using namespace std;templatestruct BinTreeNode //二叉树节点类的定义,使用二叉链表{ T data; B原创 2015-07-29 16:02:00 · 4987 阅读 · 2 评论 -
[数据结构]队列之链式队列的类模板实现
链式队列是基于单链表的一种存储表示队列的对头指针指向单链表的第一个节点,队尾指针指向单链表的最后一个节点,退出一个元素 则删除对头指针的节点,添加元素则在队尾增加一个节点使用条件:数据元素变动比较大的情况。不存在溢出的情况队列的抽象基类:#ifndef QUEUE#define QUEUE//队列的抽象基类templateclass Queue{publi原创 2015-06-23 16:06:40 · 2264 阅读 · 0 评论 -
[数据结构]队列之顺序队列的类模板实现
队列是一种限定存取位置的线性表,允许插入的一端叫做队尾(rear),允许删除的一端叫做队首(front)。队列具有FIFO的性质队列的存储表示也有两种方式:基于数组的,基于列表的。基于数组的叫做顺序队列,基于列表的叫做链式队列。一下是基于动态数组的顺序队列的模板类的实现。顺序队列的抽象基类如下所示:只提供了接口和显式的默认构造函数和析构函数,在派生类中调用。#i原创 2015-06-23 13:26:13 · 1405 阅读 · 0 评论 -
[数据结构]栈之顺序栈的类模板实现
栈的数组实现形式,采用动态分配数组,不够时可以调整栈的大小。Stack.h文件:主要定义栈的抽象基类,提供公共的接口函数。#ifndef STACK#define STACK//栈的抽象基类templateclass Stack{public: Stack(){} ~Stack(){} virtual void Push(const T& x原创 2015-06-20 15:48:40 · 2170 阅读 · 1 评论 -
[数据结构]栈之链式栈的类模板实现
栈的抽象基类的实现:(不用抽象基类也是可以的,为了使用虚函数方便)#ifndef STACK#define STACK//栈的抽象基类templateclass Stack{public: Stack(){} ~Stack(){} virtual void Push(const T& x)=0; virtual bool Pop(T& x原创 2015-06-22 11:18:01 · 2055 阅读 · 0 评论 -
[数据结构]线性表之单链表的类模板实现
类的具体实现如下://///////////////////////#include"LinearList.h"#include #include using namespace std;templatestruct LinkNode //链表节点类{ T data; LinkNode* link; LinkNode(LinkNode* ptr原创 2015-06-18 13:43:51 · 1538 阅读 · 0 评论 -
[数据结构]线性表之顺序表的类模板实现
LinearList.h抽象基类:#ifndef LINEARLIST#define LINEARLIST//线性表的抽象基类templateclass LinearList{public: LinearList(){};//如果派生类不需要向基类构造函数传递参数,则就会调用基类默认构造函数,所以,要么不写,要么就自己写默认构造函数。 ~LinearLis原创 2015-06-17 17:31:20 · 2629 阅读 · 0 评论