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类型,其实数据库记录本来就是键值对.这样,要比本文中的键设计用更少的键,更节省内存,因为每个键除了它的键值占用内存外, ...
随机推荐
- matlab操作之--读取指定文件夹下的“指定格式”文件
%% 正负样本所在folder fext='*.png';%要读取的文件格式 positiveFolder='F:\课题\Crater detection\machingLearning\Positi ...
- 你的 Docker 应用是安全的吗?
近一年来,Docker 已经逐渐成为 container 界的事实标准,成为技术人员不可或缺的技能之一,就像 Docker 宣称的那样,「Build,Ship,and Run Any App,Anyw ...
- 初级Oracle和SQL学习者的学习笔记。韩顺平-玩转oracle。
我自己就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,觉得很深入浅出,收获了很多.同时自己也做了不少笔记,现在想将纸质笔记以自己的话总结出来.俗话说得好:教学总是相 ...
- 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量
14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量 InnoDB 使用后台线程来服 ...
- java 集合框架图
Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型. Java 2集合框架图集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架 ...
- Qt新建项目No valid kits found解决思路
Qt新建项目No valid kits found解决思路 第一次用Qt Creator创建Project时,进入Kit Selection窗口后,会提示No Valid kits found. Pl ...
- 悟透Javascript undefined,null,"",0这四个值转换为逻辑值时就是false &this关键字
话题一:undefined,null,"",0这四个值转换为逻辑值时就是false 也就是在if判断时会把上面的五个作为false来判断.但是它们的类型确是不尽相同的,如下所示. ...
- (转)ASP.NET MVC路由配置
一.命名参数规范+匿名对象 1 routes.MapRoute(name: "Default", 2 url: "{controller}/{action}/{id}&q ...
- (转载)vsftpd简易配置
(转载)http://licong.blog.51cto.com/542131/145748/ 写篇关于vsftp配置的文章,加深自己的记忆,便于自己查阅,同时也希望能给其他需要的朋友一点借鉴.本文如 ...
- XenServer的某台机器一直pending住怎么办
XenServer某台VM在操作后,图标一直显示成黄色,无法完成操作,成假死的状态.可以用下面命令强制终止VM: 1.在你假死的机器获得UUID 2.在XenServer的控制台输入如下命令获得ID ...