数据结构——线性表:字典(C++)

数据结构——线性表:字典(C++),第1张

概述本文章向大家介绍数据结构——线性表:字典(C++),主要包括数据结构——线性表:字典(C++)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

内容概要:

字典的相关概念

注意事项

简单的字典实现

一、字典的相关概念

字典(dictionary)是在数据库中具有存储、查询和删除记录的功能的线性表。

数据库中的记录一般是靠关键码(key)描述的,类似人们的ID号码。

关键码应当具有可比性(comparable)。

二、注意事项

由于关键码类型非常多,不能编写出通用的字典。

关键码不是记录的类的基本属性,也不是类中任意的域,它只是在使用记录时与环境相关的属性。

字典中的任一基本元素包含一条记录及与该记录相关的关键码,记录和关键码的组合称为键值对。

三、一个简单的字典

字典抽象类

键值对模板类

(int-char)字典类

#pragma once

//dictionary_ADT.h

template

class Dictionary

{

private:

voID operator =(const Dictionary&){}

Dictionary(Dictionary&){}

public:

Dictionary(){}

virtual ~Dictionary() {}

virtual voID clear()=0;

virtual voID insert(const Key&,const E&) = 0;

virtual E remove(const Key&) = 0;

virtual E removeAny() = 0;

virtual E find(const Key&)const = 0;

virtual int size() = 0;

};

#pragma once

//key-value pair.h

template

class KVpair

{

private:

Key k;

E e;

public:

KVpair() {}

KVpair(const KVpair&kv) { k = kv.k; e = kv.e; }

KVpair(const Key&k0,const E&e0) { k = k0; e = e0; }

~KVpair() {};

Key key() { return k; }

E element() { return e; }

voID setKey(const Key&k0) { k = k0; }

};

#pragma once

//array based dictionary.h

#include"dictionary_ADT.h"

#include"key-value pair.h"

#include

class ADict:public Dictionary

{

private:

KVpair*List;

int Maxsize;

int Size;

public:

ADict(int defaultSize = 100) { List = new KVpair[defaultSize]; Maxsize=100; Size = 0; }

~ADict() { delete List; }

voID clear() { delete List; }

voID insert(const int&k0,const char&e0)

{

assert(Size <= Maxsize);//List is full

KVpair it(k0,e0);

List[Size++] = it;

}

char remove(const int&k0)

{

for (int i = 0; i < Size; i++)

if (List[i].key() == k0)

{

char temp = List[i].element();

for (int k = 0; k < Size-i-1; k++)

List[i + k] = List[i + k + 1];

Size--;

return temp;

}

return 0;

}

char removeAny()

{

assert(Size != 0);//List is empty

return List[--Size].element();//remove the last one

}

char find(const int&k)const

{

for(int i=0;i

if (List[i].key() == k)

return List[i].element();

return 0;

}

int size() { return Size; }

};

//问题:键值对模板类对象动态数组List为什么会无成员,初步判断应该是由于模板的问题,

//数组元素大小不确定,所以这里把Key和E都分别具体化为int和char类型的,当然也可

//以通过使用链表来解决。

//dictionary_main.cpp

#include"array based dictionary.h"

#include

using namespace std;

int main()

{

ADict cc(10);

for (int i = 0; i < 20; i++)

cc.insert(101 + i,(char)(97 + i));

cout << endl;

cout << cc.find(101) << endl;

cout << "size:" << cc.size() << endl;

cout << "107:" << cc.remove(107) << endl;

cout << "104" << cc.remove(104) << endl;

cout << "after remove size:" << cc.size() << endl;

for (int i = 0; i < cc.size(); i++)

cout<

system("pause");

}

//注:这个程序有些隐性的问题,还没有解决,运行过程中有可能会出现“ *.exe已经触发一个断点”

//的问题,导致程序无法调试,也有可能导致堆和栈的损坏,这是内存超限的问题。

总结

以上是内存溢出为你收集整理的数据结构——线性表:字典(C++)全部内容,希望文章能够帮你解决数据结构——线性表:字典(C++)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存