《数据结构课程设计》
课程题目 |
通讯录系统 |
课程编号 |
j1620102 |
学生姓名 |
王友彦 |
所在专业 |
信息管理与信息系统 |
所在班级 |
信管1131 |
任课老师 |
易学明 |
实习时间 |
2015.1.10 |
设计成绩 |
|
老师评语 |
|
一. 问题描述
李刚是一爱折腾的人,当然爱折腾的人均有梦想,他想当中国的盖次呢。可不,现在个人好友信息多了,复杂了,他想制作一个个人通讯录的制作管理软件。 刚好这个学期学了数据结构课,所以他准备使用数据结构知识来实现了。并考虑使用双向链表作数据结构。并制定了初步要求:
(1)每个好友信息包含姓名、性别、住址、邮编、几岁、电话、QQ、微信帐号、生日等。
(2)作为一个完整的系统,应具有友好的界面和较强的容错能力。
二. 问题分析
三. 逻辑结构和存储结构设计
双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior
注意:
①双链表由头指针head惟一确定的
②带头结点的双链表的某些运算变得方便
③将头结点和尾结点链接起来,为双(向)循环链表
逻辑结构:利用数据结构所学的双链表知识,开辟新节点存放通讯录的信息,修改。
存储结构:开辟4个链表指针,指向链表的第一个节点,输入内容记录在一个新的节点里。
四. 算法设计
定义一个结构体类型
typedef struct person{
char name[15];
char sex[30];
char age[20];
charstreet[20];
char eip[20];
char phone[20];
char qq[20];
char weixin[20];
char birth[20];
}person;
定义双链表结点结构类型
typedef struct Dulnode{
person*list;
structDulnode *prior;
structDulnode *next;
}Dulnode,*Dullinklist;
五. 时间复杂度和空间复杂度分析
双链表仅仅是在单链表的结点中增加了一个指向其前驱的prior指针,因此,在双链表中执行按值查找和按位查找的操作和单链表相同。但双链表在插入和删除操作的实现上,和单链表有着较大的不同。这是因为“链”变化时也需要对prior指针做出修改,其关键在于保证在修改的过程中不断链。此外,双链表可以很方便地找到其前驱结点,因此,插入、删除结点算法的时间复杂度仅为O(1)。
空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。根据双向链表的操作,可以发现其空间复杂度为O(n)。
六. 源代码
#include<iostream>
#include<string>
using namespace std;
typedef structperson//定义一个结构体类型
{
charname[15];
charsex[30];
charage[20];
charstreet[20];
char eip[20];
charphone[20];
char qq[20];
char weixin[20];
charbirth[20];
}person;
typedef struct Dulnode//双向链表结点结构类型定义
{