数据结构课程设计

这篇博客详细介绍了如何运用数据结构中的双向链表知识设计一个个人通讯录管理软件,包括问题描述、问题分析、逻辑和存储结构设计、算法设计、时间复杂度和空间复杂度分析以及源代码实现。通过此设计,博主实现了添加、查找、删除和显示联系人信息的功能,并对程序的不足之处进行了反思。
摘要由CSDN通过智能技术生成

 

 

 

 

 

 

《数据结构课程设计》

 

 

 

 

 

 

课程题目

通讯录系统

课程编号

              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//双向链表结点结构类型定义

{

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值