附加题、组链表与通讯录(期末模拟)

//代码未测试,仅供参考

题目描述

组链表是一种常用的数据结构,它由数组加链表组成,往往用于信息检索中。

每个链表由n个链表结点组成,每个链表都有头结点,头结点不存放实际数据,纯粹作为一个索引。

所有链表的头结点组成一个数组,即数组的每个元素都是一个链表头结点,它的后面延伸着一个链表。

例如一个通讯录包含五个联系人,每个联系人都有姓名和电话,每个联系人都对应一个链表结点。

Tom 8111

Any 1222

Ken 2333

Kim 2444

Tim 8222

我们先创建一个数组包含26个链表头结点,对应26个大写字母。因为有五个联系人,因此创建五个链表结点

因为上述联系人的姓名的首字母为A\K\T,因此把五个链表结点分别加入到三个头结点之后,形成三个链表。

其他字母的头结点因为无联系人,所以是空链表。构成组链表如下所示:

A--Any.1222

K--Kim.2444--Ken.2333

T--Tim.8222--Tom.8444

 

现在使用组链表来实现通讯录,通讯录是多个联系人的信息集合,每个联系人都包含姓名和电话属性。

每个联系人对应一个链表结点,姓名首字母相同的联系人放在同一个链表中。联系人的类定义基本写好,如下参考代码

通讯录的类界面如下代码,操作包括:

1、该类没有构造函数,使用输入函数Input实现数据的输入和通讯录的初始化

2、打印函数Print,输出整个通讯录,输出格式参考样本

3、插入新的联系人,重载运算符+=来实现,如果联系人姓名已经存在,则用新的电话覆盖旧电话

注意:插入采用头插法,即新结点直接插入头结点之后

4、查找联系人姓名,重载运算符()来实现,查找成功返回链表结点指针,失败返回NULL

5、合并两个通讯录,重载运算符+来实现,合并结果放在第一个通讯录中,即左操作数。

通讯录的合并实际上是两个相同首字母的链表合并。对于相同首字母的两个链表i和j合并过程如下:

1)第二个链表j从头开始,取出联系人信息,在第一个链表i中查找。

2)如果联系人已存在,则用第二个通讯录的电话覆盖第一个通讯录的电话

3)如果联系人不存在,则把联系人插入到第一个链表i中

 

程序要求:

1、联系人类定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值