通讯录制作(数据结构课程设计)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

课程名称数据结构课程设计课题名称通讯录的制作

学院信息工程学院

姓名

学号

专业层次

班级

任课教师

目录

一、课程设计题目及所涉及知识点 (2)

二、课程设计思路及算法描述 (2)

设计思路 (2)

算法描述 (3)

三、课程设计中遇到的难点及解决办法 (4)

四、总结 (4)

五、结论 (4)

六、附录—主要源程序代码及运行结果 (4)

一、课程设计题目及所涉及知识点

设计题目:通讯录的制作

知识点:链表的增,删,改,查、基本的文件操作、字符数组的处理函数、分支结构和循环结构的熟练使用、结构体的定义与调用、函数的调用、结构体指针在各函数之间的调用。

二、课程设计思路及算法描述

设计思路:1、确定程序要实现的功能即(1)实现对数据文件的保存,对数据记录进行添加,可以对数据记录进行查询,可以对数据记录进行删除,可以对数据记录进行显示,可以对数据记录进行修改。

(2)在实现上述函数之后,设置分支结构,对操作进行选择。上述函数中有几种不同的操作需要用户按照自己的意愿选择。如,查询方式的选择,删除方式的

选择等。

2、确定程序所需要的功能块,存储结构-结构体,malloc申请存储空间,各

功能函数—对链表进行初始化line *initLine(line *p) ,对链表进行插入操作

line *insertLine(line *p), 将整理好的数据保存到文件内:saveFile(line *p),

姓名查询selectLine_name(),手机号查询selectLine_Id(),使用姓名进行修改

line *amendLine(),使用用手机号进行修改line *amendLine_num(),删除刚插入

的数据line *delLine(),指定名字删除int select_name(),指定手机号删除

select_ID(),具体执行删除的链表操作line *delLine(),显示链表数据display(),控制台程序主界面zcd(),返回函数fh(),主函数部分main();。

3、编写代码具体实现各项功能,并进行调试。

算法描述:

链表插入(Link List Insertion)的基本思想:

同顺序表一样,向链表中增添元素,根据添加位置不同,可分为以下 3 种情况:插入到链表的头部(头节点之后),作为首元节点;插入到链表中间的某个位

置;插入到链表的最末端,作为链表中最后一个数据元素;虽然新元素的插入位置

不固定,但是链表插入元素的思想是固定的,只需做以下两步操作,即可将新元素

插入到指定的位置:

1.将新结点的 next 指针指向插入位置后的结点;

2.将插入位置前结点的 next 指针指向插入结点;

算法实现:

//p为原链表,elem表示新数据元素,add表示新元素要插入的位置

link * insertElem(link * p,int elem,int add){

link * temp=p;//创建临时结点temp

//首先找到要插入位置的上一个结点

for (int i=1; i

if (temp==NULL) {

printf("插入位置无效\n");

return p;

}

temp=temp->next;

}

//创建插入结点c

link * c=(link*)malloc(sizeof(link));

c->elem=elem;

//向链表中插入结点

c->next=temp->next;

temp->next=c;

return p;

}

链表删除(Linked list deletion)的基本思想:

从链表中删除指定数据元素时,实则就是将存有该数据元素的节点从链表中摘除,但作为一名合格的程序员,要对存储空间负责,对不再利用的存储空间要及时释放。因此,从链表中删除数据元素需要进行以下 2 步操作:

1.将结点从链表中摘下来;

2.手动释放掉结点,回收被结点占用的存储空间;

其中,从链表上摘除某节点的实现非常简单,只需找到该节点的直接前驱节点 temp,执行一行程序:

temp->next=temp->next->next;

算法实现:

//p为原链表,add为要删除元素的值

link * delElem(link * p,int add){

link * temp=p;

//temp指向被删除结点的上一个结点

for (int i=1; i

temp=temp->next;

}

link * del=temp->next;//单独设置一个指针指向被删除结点,以防丢失 temp->next=temp->next->next;//删除某个结点的方法就是更改前一个结点的指针域

free(del);//手动释放该结点,防止内存泄漏

return p;

}

链表查找(Link list lookup)的基本思想:

在链表中查找指定数据元素,最常用的方法是:从表头依次遍历表中节点,

用被查找元素与各节点数据域中存储的数据元素进行比对,直至比对成功或遍历至链表最末端的NULL(比对失败的标志)。

算法实现:

//p为原链表,elem表示被查找元素、

int selectElem(link * p,int elem){

//新建一个指针t,初始化为头指针 p

link * t=p;

int i=1;

//由于头节点的存在,因此while中的判断为t->next

while (t->next) {

t=t->next;

if (t->elem==elem) {

return i;

}

i++;

}

//程序执行至此处,表示查找失败

return -1;

相关文档
最新文档