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类型,其实数据库记录本来就是键值对.这样,要比本文中的键设计用更少的键,更节省内存,因为每个键除了它的键值占用内存外, ...
随机推荐
- LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters
LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...
- 判断是否为ie(包含ie11)
if (!!window.ActiveXObject || "ActiveXObject" in window) { alert("IsIE"); }
- (转载)mysqli使用prepared语句
(转载)http://kaozjlin.iteye.com/blog/890855 mysqli函数库支持prepared语句的使用.它们对于在执行大量具有不同数据的相同查询时,可以提高执行速度.它们 ...
- 卡特兰数(Catalan Number) 算法、数论 组合~
Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为( ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- 正则表达式的先行断言(lookahead)和后行断言(lookbehind)
正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern) 零宽 ...
- jsp文件中的alert等等
<script type="text/javascript"> alert("aa: ${message}") </script>
- mysql 引擎区分
MySQL常用的存储引擎为MyISAM.InnoDB.MEMORY.MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表. MyISAM是MySQL的默认存储引擎.MyISAM不支 ...
- java 解析xml文件案例
package xmlTest; import javax.xml.parsers.*; import org.w3c.dom.*; public class GetXml { public stat ...
- nORA-01000: 超出打开游标的最大数(SDE连接)
1.运行ArcObjects代码报错: IFeatureCursor pCursor = null; try { pCursor = m_pCatchLayer.m_pFeatureClass.Sea ...