前言
在mooc上学习了链表中的顺序表和单链表,并使用单链表数据结构跟着老师完成通讯录创建。通过这次链表练习使用,做一些总结。
自顶向下设计探索。
功能需求
在功能实现上,通讯录主要包括,创建联系人,删除联系人,显示联系人,退出通讯录。
通讯录
- 创建联系人
- 联系人信息
- 插入到存储结构中
- 删除联系人
- 获取删除联系人编号
- 删除联系人
- 显示联系人
- 遍历存储结构
- 退出通讯录
- 退出控制台
软件设计
- 模块划分
- 主控模块(主函数)
- 命令读取模块
- 命令解析模块
- 命令处理模块
- 结构划分
- 链表结构
- 构建函数
- 析构函数
- 清空
- is空
- 长度
- 获取节点
- 节点位置
- 前驱
- 后继
- 插入
- 删除
- 插入头
- 插入尾
- 遍历
- 节点结构
- 数据域
- 指针域
- 函数
- 数据域结构
- 姓名
- 电话
- 函数
- 链表结构
附录:
链表头文件相关声明定义
List.h
#ifndef LIST_H #define LIST_H #include "Node.h" class List { public: List(); ~List(); void ClearList(); bool ListEmpty(); int ListLength(); bool GetElem(int i, Node *pNode); int LocateElem(Node *pNode); bool PriorElem(Node *pCurrentNode, Node *pPreNode); bool NextElem(Node *pCurrentNode, Node *pNextNode); bool ListInsert(int i, Node *pNode); bool ListDelete(int i, Node *pNode); bool ListInsertHead(Node *pNode); bool ListInsertTail(Node *pNode); void ListTraverse(); private: Node *m_pList; int m_iLength; }; #endif
节点头文件相关声明定义
Node.h
#ifndef NODE_H #define NODE_H #include "Person.h" class Node { public: Person date; Node *next; void printNode(); }; #endif
数据域相关声明定义
Person.h
#ifndef PERSON_H #define PERSON_H #include <string> #include <ostream> using namespace std; class Person { friend ostream &operator<<(ostream &out, Person &person); //Global Function public: string name; string phone; Person &operator=(Person &person); bool operator==(Person &person); }; #endif