字 典

字典:以集合为基础,并支持支持Member,Insert和Remove三种运算的抽象数据类型。
字典是一些元素的集合,每个元素有一个称作关键码的域,不同元素的关键码互不相同
组织方式:线性表,跳表(skip list),散列表(hash table)
线性表

#include<assert.h>

template<typename E,typename K>
class ChainNode{
public:
E data;
ChainNode<E,K> *link;
ChainNode():link(NULL){};
ChainNode(E& e1,ChainNode<E,K>*next=NULL):data(e1),link(next){};
};

template<typename E,typename K>
class SortedChain{
public:
SortedChain(){
first = new ChainNode<E,K>;
assert(first!=NULL);
}
~SortedChain();
ChainNode<E,K> *Search(const K k1)const;
void Insert(const K k1,E& e1);
bool Remove(const K k1,E& e1);
ChainNode<E,K> *Begin(){
return first->link;
}
ChainNode<E,K> *Next(ChainNode<E,K> *current)const{
if(current!=NULL)
return current->link;
return NULL;
}
private:
ChainNode<E,K> *first;
};

template<typename E,typename K>
ChainNode<E,K>* SortedChain<T>::Search(const K k1) const
{
ChainNode<E,K> *p = first->link;
while(p!=NULL&&p->data<k1)
p = p->link;
if(p!=NULL&&p->data==k1)
return p;
return NULL;
}

/*
在大于k1之后插入e1,如果有k1用e1替换
*/
template<typename E,typename K>
void SortedChain<T>::Insert(const K k1, E &e1)
{
ChainNode<E,K> *pre,*p,*newNode;
p = first->link;
pre = first;
while(p!=NULL&&p->data<k1){
pre = p;
p = p->link;
}
if(p!=NULL&&p->data==k1){
p->data = e1;
return;
}
newNode = new ChainNode<E,K>(e1);
assert(newNode!=NULL);
newNode->link = p;
pre->link = newNode;
}

/*
删除k1
*/
template<typename E,typename K>
bool SortedChain<E,K>::Remove(const K k1, E &e1)
{
ChainNode<E,K> *p,*pre;
p = first->link;
pre = first;
while(p!=NULL&&p->data<k1){
pre = p;
p = p->link;
}
if(p!=NULL&&p->data==k1){
pre->link = p->link;
p->data = e1;
delete p;
return true;
}
return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值