数据结构--班级通讯录管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告书课程名称:数据结构
题目:班级通讯录管理系统
学生姓名:
专业:计算机专业
班别:
学号:
指导老师:**
日期:年月日
班级通讯录管理系统
一.问题描述
设计目的:
1.掌握线性链表的建立。
2.掌握线性链表的基本操作。
3.掌握查找的基本算法。
设计内容:
利用线性链表实现班级通讯录管理系统,具体功能:输入、输出、插入、删除、查找、追加、读入、显示、退
出,并能在屏幕上输出操作前后的结果。
二.基本要求
设计要求:
1.写出系统需求分析,并建模。
2.编程实现,界面友好。
3.输出操作前后的结果。
三.工具/工作准备
了解线性表有两种存储方法:顺序存储和链式存储,线性表基本操作是:线性表建立、插入、删除、查找、求线性表的长度、取
表元。
线性表顺序存储:
1.顺序表初始化即构造一个空表,初始化函数为指针
函数
2. 顺序表插入运算是指在第i个位置插入值为x的新元
素:将Ai~An顺序向后移动,为新元素让出位置;
将x置入空出的第i个位置;修改last指针(相当
于修改表长),使之仍指向最后一个元素。
3. 删除运算:运算方法与插入运算方法一致。
4. 按值查找:给定的值x与表中元素比较。
5. 优点:方法简单,容易实现;具有按元素序号随机访
问特点等。
6. 缺点:在表中做插入删除操作时,需平均移动大约表
中一半元素;需预先分配足够大的存储空间,
估计过大等。
线性表链式存储:
单链表
1.建立单链表:在链表表头或表尾插入结点,建立线
性表的链式存储;
2.查找操作:从链表的第一个元素结点查找,判断当
前结点是否是第i个,若是,则返回该结
点指针,否则继续查找,直到表结束为止,
没有第i个结点是返回空。
3.插入操作:后插点:s->next=p->next ;p->next=s;
前插结点:单链表头指针为L
q=L;
while(q->next!=p)
q=q->next;
s->next=q->next;
q->next=s;
4.删除操作:删除前驱结点
q->next=p->next;
free(q);
删除后继结点
s=p->next;
p->next=s->next;
free(s);
循环链表:对于单链表而言,最后一个结点的指针域是空
指针,如果将该单链表的表头置入该指针域,
则使得链表头尾相连,就构成了单链表。
双向链表:在单链表中的每个结点再加一个指向前驱的指
针域,用这种结点组成的链表称为双向链表。
需要安装Microsoft Visual C++6.0,打开运行此软件,在该软件置入代码的环境下打入自己预先设计好的数据结构算法及C语言代码。
四.分析与实现
【界面总体设计】
图一系统功能模块图
(1).在main函数中,首先调用Creat_LinkList()函数创建链表导入班级同学的数据信息,然后通过switch()语句实现操作命令,调用print()、Search()、In_LinkList()、Del_printLinkList()、Free_()、Inser_printLinkList()分别实现输出、查找、追加、删除、结束、插入的系统功能,主函数具体代码如下:
void main() //主函数
{ LinkList L;
LNode *p;
int w;
printf("\t\t----------------班级通讯录管理系统----------------\n"); printf("\n");
printf("\t\t-------------------计科本122班---------------------\n"); printf("\n");
printf(" ***请导入班级学生通讯录***\n");
printf("\n");
L=Creat_LinkList(); //实现链表建立
printf(" ***信息导入并保存完毕!\n");
printf("\n");
printf("\t\t 1.输出班级通讯录\n"); //实现选择性的操作
printf("\t\t 2.查找信息\n");
printf("\t\t 3.追加同学信息\n");
printf("\t\t 4.删除同学信息\n");
printf("\t\t 5.插入同学信息\n");
printf("\t\t 6.结束操作\n");
printf("\n");
printf(" ***输入要执行以上操作对应的数字:");
scanf("%d",&w);
switch(w) //switch语句执行操作命令 { case 1: print(L);break; //输出
case 2: Search(L);break; //查找
case 3: In_LinkList(L);break; //追加
case 4: Del_printLinkList(L);break; //删除
case 5: Inser_LinkList(L);break; //插入
case 6: Free_(L); //释放结点,退出
exit(0);
}
}
(2).创建链表函数:
LinkList Creat_LinkList() //创建
{ LinkList L=NULL; //建立空表
LNode *s ,*rear=NULL; //*rear是标记尾指针int i,x;
printf("请输入全班同学的人数: ");
scanf("%d",&x); //输入班级人数
printf("全班同学的信息记录是\n");
printf("\n");