数据结构
参照《算法(第四版)》记录的数据结构与算法
芒果黑
这个作者很懒,什么都没留下…
展开
-
【数据结构】c++实现基于有序数组的符号表查找
上一篇使用链表实现符号表的查找,无论是查找还是插入都需要遍历整个链表,非常的低效。今天使用数组通过二分查找来实现,相比顺序循环会高效得多。它使用的数据结构是一对平行数组,一个存储键一个存储值。先来看代码:template<class T, class K> class ArraySearch{public: ArraySearch(int capacity...原创 2019-12-15 16:53:04 · 305 阅读 · 0 评论 -
【数据结构】c++实现基于无序链表的符号表查找
符号表符号表最主要的目的就是将一个键和一个值联系起来。用例能够将一个键值对插入符号表并希望在之后能够从符号表的所有键值对中按照键直接找到对应的值。要实现符号表,我们首先要定义其背后的数据结构,并指明创建并操作这种数据结构以实现插入、查找等操作所需的算法。无序链表中的顺序查找符号表中使用的数据结构的一个简单选择是链表,每个结点存储一个键值对。查找的实现即为遍历链表,比较需被查找的键和...原创 2019-12-09 22:54:57 · 498 阅读 · 0 评论 -
【数据结构】数据结构之二分查找
先上代码//二分查找,数组必须为有序的int binarySearch(int key, int *a, int length){ int lo = 0; int hi = length - 1; //被查找的键要么不存在,要么必然存在于a[lo..hi]之中 while(lo <= hi) { int mid = lo + ...原创 2019-06-18 21:50:26 · 270 阅读 · 0 评论 -
【数据结构】c++利用两个栈实现特定格式的算术表达式的值
先上代码double expression(string &str){ stack<char> ops; stack<double> vals; for(int i = 0; i < str.size(); ++i) { char ch = str.at(i); if(ch == '(')...原创 2019-06-19 22:39:09 · 258 阅读 · 0 评论 -
【数据结构】c++栈的实现
栈是一种基于后进先出策略的集合类型。当你的邮件在桌上放成一叠时,使用的就是栈。新的邮件来到时你将它们放在最上面,当你有空时你会一封一封地从上到下阅读它们。这就是一种后进先出的情况。栈的实现有两种,一种是顺序栈,一种是链式栈。顾名思义,顺序栈就是通过数组来实现,链式栈就是通过链表来实现的。1.下面是顺序栈的代码实现:template <class T> cla...原创 2019-07-28 22:21:31 · 1014 阅读 · 0 评论 -
【数据结构】c++队列的实现
队列是一种基于先进先出策略的集合类型。按照任务产生的顺序完成他们的策略我们每天都会遇到:在剧院门前排队的人们、在收费站前排队的汽车或计算机上某种软件中等待处理的任务。任务服务性策略的基本原则都是公平。在提到公平时大多数人的第一个想法就是应该优先服务等待最久的人,这正是先进先出策略的准则。队列是许多日常现象的自然模型,他也是无数应用程序的核心。首先看代码:template<class...原创 2019-07-28 23:01:28 · 738 阅读 · 0 评论 -
【数据结构】c++实现背包
背包是一种不支持从中删除元素的集合数据类型。它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素(用例也可以检查背包是否为空或者获取背包中元素的数量)。迭代的顺序不确定且与用例无关。要理解背包的概念,可以想象一个非常喜欢收集弹子球的人。他讲所有的弹子球都放在一个背包里,一次一个,并且会不时在所有弹子球中寻找某一颗拥有某种特点的弹子球。使用Bag的API,用例可以将元素添加进背包并根...原创 2019-07-29 21:11:41 · 1144 阅读 · 0 评论 -
【数据结构】算法数量级的分类
我们在实现算法时使用了几种结构性的原语(普通语句、条件语句、循环、嵌套语句和方法调用),所以成本增长的数量级一般都是问题规模N的若干函数之一。下表总结了这些函数以及他们的称谓、与之对应的典型代码以及一些例子。描述 增长的数量级 典型代码 说明 举例 常熟级别 1 a = b + c 普通语句 将两个数相加 对数级别 logN ...原创 2019-08-18 21:22:32 · 4313 阅读 · 0 评论