HM080 后元前移做删除
HM080 后元前移做删除
来源: 第 80 集 通讯录管理系统-删除联系人-功能实现
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
已经能用 isExist 判断姓名在不在。现在封装 deletePerson,用地址传递接收通讯录。
删除步骤:
- 读入要删的姓名,调用
isExist。返回 \(-1\) 就输出查无此人,不要乱动数组。 - 若返回值 \(ret \ge 0\),从下标 \(ret\) 起把后面的元素一个一个往前挪:先让 \(ret+1\) 覆盖 \(ret\),再让 \(ret+2\) 覆盖 \(ret+1\),直到最后一名有效联系人。循环写成 \(i\) 从 \(ret\) 到 \(mSize-2\),每次
personArray[i] = personArray[i+1]。 - 不能先把最后一名往前甩。例如张三、李四、王五、赵六要删李四:必须先把王五盖到李四的位置,再把赵六盖到王五的位置;若先挪赵六,王五会丢。
- 挪完后
mSize--,这是逻辑删除:容量仍是 \(1000\),只是当前人数少一个。然后输出删除成功。
读入通讯录和若干次删除。每次删除后立刻输出提示;全部结束后再按当前顺序输出剩余联系人。若已空,输出 当前记录为空。
输入格式
第一行一个整数 \(n\)(\(0 \le n \le 100\))。
接下来 \(n\) 行,每行:姓名、性别、年龄、电话、住址,均不含空白。
下一行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行,每行一个要删除的姓名。
输出格式
对每次删除先输出一行 删除成功 或 查无此人。
然后输出剩余名单:每人一行,姓名、性别、年龄、电话、住址,空格分隔。若没有人了,输出一行 当前记录为空。行末换行。
样例
输入 #1
4
张三 1 18 111 海淀
李四 2 20 222 朝阳
王五 1 21 333 西城
赵六 1 22 444 东城
2
李四
孙七
输出 #1
删除成功
查无此人
张三 1 18 111 海淀
王五 1 21 333 西城
赵六 1 22 444 东城
输入 #2
1
张三 1 18 111 北京
1
张三
输出 #2
删除成功
当前记录为空
说明
样例 1 删李四后,王五、赵六依次前移,张三不动;再删不存在的孙七,名单不变。必须先查下标再从该位置向后覆盖,最后人数减一。只提示成功却不移动元素,显示时仍会看到被删的人。
信息
- ID
- 1079
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者