通讯录制作(数据结构课程设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;