C++链表与键值对
《算法》一书中,在算法3.1中提到了Map的实现,这里根据书上的思想,用单向链表简单写了写。
#ifndef SEQUENTIAL_H #define SEQUENTIAL_H template<class K, class V> class Link { private: class Node { public: K key=; V value=; Node *next=nullptr; public: Node(K, V, Node*); Node(){}; }; private: Node *first; int _length; int _capicty; public: Link(); V& get(K key); void put(K key, V value); int Size() const; int Capicty() const; bool Delete(K key); ~Link(); }; template<class K, class V> Link<K, V>::Node::Node(K key, V value, Node* node) { this->key = key; this->value = value; next = node; } template<class K, class V> V& Link<K, V>::get(K key) { Node *x = first; ; i < _length&& x != nullptr; i++) { if (x->key == key) return x->value; x = x->next; } } //如果没有K,则在链表尾加入新的键值对 template<class K, class V> void Link<K, V>::put(K key, V value) { Node *x = first; bool flag = false; ; i < _length; i++) { if (x->key == key) { x ->value = value; flag = true; break; } x = x->next; } if (!flag) { >= _capicty) { Node *m = first; _capicty *= ; Node **n = new Node*[_capicty]; ; i < _capicty; i++) { n[i] = new Node(); } ; i < _capicty - ; i++) { n[i]->next = n[i + ]; } ; i < _capicty && m!=nullptr; i++) { n[i] = m; m = m->next; } delete[] first; first = n[]; } int l = _length; Node *y = first; while (l) { y = y->next; l--; } y->value = value; y->key = key; y->next = y->next; _length++; } } template<class K, class V> Link<K, V>::~Link() { if (first != nullptr) delete[] first; } template<class K, class V> Link<K, V>::Link() { Node** n = ]; _capicty = ; _length = ; ; i < ; i++) { n[i] = new Node(); } ; i < -; i++) { n[i]->next = n[i+]; } first = n[]; } template<class K, class V> int Link<K, V>::Size() const { return _length; } //当前链表容量 template<class K, class V> int Link<K, V>::Capicty() const { return _capicty; } template<class K, class V> bool Link<K, V>::Delete(K key) { bool flag = false; Node* n = first->next; Node* b = first; if (b->key == key) { _length--; first = first->next; return true; } ; i < _length; i++) { if (n->key == key) { b->next = n->next; _length--; flag = true; break; } b = b->next; n = n->next; } return flag; } #endif
C++链表与键值对的更多相关文章
- (转)C#中键值对类型Hashtable与Dictionary比较和相关用法
最近在使用C#中的Hashtable与Dictionary的时候,想知道其区别,通过查找网络相关博客资料,作出下列总结. Hashtable与Dictionary虽然都是作为键值对的载体,但是采用的是 ...
- 浅谈Redis数据库的键值设计(转)
丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- 从源码看HashMap键值对集合
之前我们看过了两种类型的集合,ArrayList集合和LinkedList集合,两种集合各有优势,我们不具体说了,但是本篇要看的集合可以完成它们完成不了的任务.比如:现有一篇文章,要你统计其中出现了哪 ...
- [Redis]Redis的五种数据类型与键值/服务器相关命令
-------------------------------------------------------------------------------------- String(字符串):最 ...
- 数据结构(一): 键值对 Map
Map基本介绍 Map 也称为:映射表/关联数组,基本思想就是键值对的关联,可以用键来查找值. Java标准的类库包含了Map的几种基本的实现,包括:HashMap,TreeMap,LinkedHas ...
- redis基础之基本键值操作和使用(三)
前言 redis安装完毕后开始使用redis,先熟悉命令行操作. redis数据的类型 键:redis的所有的键都是string类型: 值:五种类型 string:字符串类型:一个string最大可以 ...
- [19/03/26-星期二] 容器_Map(图、键值对、映射)接口之HashMap(散列映射)&TreeMap(树映射)
一.概念&方法 现实生活中,我们经常需要成对存储某些信息.比如,我们使用的微信,一个手机号只能对应一个微信账户,这就是一种成对存储的关系. Map就是用来存储“键(key)-值(value) ...
- 浅谈REDIS数据库的键值设计(转)
add by zhj: 关系数据库表的一条记录可以映射成Redis中的一个hash类型,其实数据库记录本来就是键值对.这样,要比本文中的键设计用更少的键,更节省内存,因为每个键除了它的键值占用内存外, ...
随机推荐
- tyvj P1716 - 上帝造题的七分钟 二维树状数组区间查询及修改 二维线段树
P1716 - 上帝造题的七分钟 From Riatre Normal (OI)总时限:50s 内存限制:128MB 代码长度限制:64KB 背景 Background 裸体就意味着 ...
- [BZOJ 1086] [SCOI2005] 王室联邦 【树分块】
题目链接:BZOJ - 1086 题目分析 这道题要求给树分块,使得每一块的大小在 [B, 3B] 之间,并且可以通过一个块外的节点(块根)使得整个块联通. 那么我们使用一种 DFS,维护一个栈,DF ...
- 应用安全技术趋势之 Top 5
而今,大多数应用都依赖于像入侵防护系统(Instrusion Prevention System)和 Web 应用防火墙(Web Application Firewall,以下全文简称 WAF)这样的 ...
- Delphi在win7/vista下写注册表等需要管理员权限的解决方案
看到论坛好多人问win7下写注册表的问题,我结合自己的理解写了一点东西,首先声明一下,本人初学Delphi,水平有限,大家见笑了,有什么不对之处请老鸟多指点. [背景]win7/Vista提供的UAC ...
- Android如何正确的保存文件
在Android 官方开发文档中有一篇文档来介绍如何保存应用的数据,但笔者用过很多程序(从知名的到不知名的)处理的都不是很完美,或者 没有按照Android 开发团队建议的方式去保存他们应用的数据.当 ...
- 使用HttpServletRequestWrapper在filter修改request参数
javax.servlet.ServletRequest中的 Map<String, String[]> parameterMap = request.getParameterMap(); ...
- 2.5.4 使用popupWindow
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- 【HDOJ】2589 正方形划分
暴力DFS /* 2589 */ #include <cstdio> #include <cstring> #include <cstdlib> #define M ...
- Spark(Hive) SQL数据类型使用详解(Python)
Spark SQL使用时需要有若干“表”的存在,这些“表”可以来自于Hive,也可以来自“临时表”.如果“表”来自于Hive,它的模式(列名.列类型等)在创建时已经确定,一般情况下我们直接通过Spar ...
- Research Papers
NSE, $\bbu$ [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001] [Papers]NSE, $u$, Lorentz space [Bjorl ...