《数据结构链表结构的相关函数库的设计.》由会员分享,可在线阅读,更多相关《数据结构链表结构的相关函数库的设计.(19页珍藏版)》请在金锄头文库上搜索。
1、数据结构课程设计报告学号2014-2015学年 第一学期1208210146数据结构课程设计报告题目:链表结构的相关函数库的设计专业:计算机科学与技术班级:12级计科(3)班姓名:指导教师:成绩:计算机与信息工程系2014 年 12月 15 日目录1 问题分析和任务定义11.1 任务定义11.2 面临的问题,进行分析解决,模块之间的联系。12概要设计和数据结构的选择22.1 数据结构的选择22.2 结构图22.3 函数实现的具体算法举例33 课程设计思路63.1 设计函数库64 测试结果及其分析74.1 初始化74.2 逆序输入元素84.3 单链表的长度84.4 遍历输出单链表84.5检索查找
2、94.6输入插入元素的值和位置94.7删除元素105 小结10参考文献10附录:程序源代码11数据结构课程设计报告1 问题分析和任务定义1.1 任务定义 设计出链表结构的相关函数库,以便在程序设计中调用。进行链表中元素的输入、查找、插入、删除等操作的课程设计。要求: (1)所设计的数据结构应尽可能节省存储空间。(2)程序的运行时间应尽可能少。 从题目看出所设计的程序应能达到的功能,设计好的程序要满足以上两点。在数据输入方面可以根据链表的特点即存储空间的连续,从创建链表到插入,删除,查找元素以及输出一系列的步骤,连贯而下。算法的实现依赖于所采用的存储结构,所以选择什么样的存储方式在课程设计中尤为
3、重要,这也是本程序好坏的一个评定。 1.2 面临的问题,进行分析解决,模块之间的联系。(1)在内存中开辟一块连续的内存空间,进行分析解决(2)利用物理位置的相邻来表示变量,达到预期效果,很好的完成任务。查找元素以及输出一系列的步骤,连贯而下。(3)使用链表的数据结构来满足尽可能节省存储空间的要求,达到要求,从创建链表到插入,删除,查找元素以及输出一系列的步骤,连贯而下。(4)输出界面设计与各个模块的联系,设计出链表结构的相关函数库,以便在程序设计中调用,进行链表中元素的分析。02概要设计和数据结构的选择2.1 数据结构的选择本程序选择的数据结构是线性表中的链式结构(单链表),原因如下:单链表的
4、定义:(1)单链表是线性表的链接存储表示。其各个数据元素可以相继存储,也可以不相继存储,不过它为每个数据元素附加了一个链接指针,并形成的一个结点。(2) 单链表的每一个结点分为两个部分:data和link。(3) 链表的第一个结点的地址可以通过链表的头指针first找到,其他结点的地址则在前趋结点的link域中,链表的最后一个结点没有后继,在结点的link域中放一个空指针NULL。(4)头指针first为空的单链表为空表,该链表一个结点也没有,相对地,头指针first不为空且首元结点存在的单链表为非空表,表中至少有一个结点。2.2 结构图创建单链表输入数据插入数据删除数据查找数据输出数据计算表
5、长图 1 结构图2.3 函数实现的具体算法举例(1)插入函数/* 在带头结点的单链线性表L中第i个位置之前插入元素e */int Insert_List(LinkList L,int i,ElemType e) int j=0; LinkList p=L,s; while(p&jnext; j+; if(!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(struct LNode); s-data=e; s-next=p-next; p-next=s; return OK; (2) 删除函数int Delete_List(LinkList L,in
6、t i,ElemType *e) /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */ int j=0; LinkList p=L,q; while(p-next&jnext; j+; if(!p-next|ji-1) return 0; q=p-next; p-next=q-next; *e=q-data; free(q); return 1; (3)查找元素/* 当按位置查找元素,第i个元素存在时,其值赋给e并返回1,否则返回0 */ int GetElem_List(LinkList L,int i,ElemType *e) int j=0; LinkList p=L;
7、 while(p&jnext; j+; if(!p|ji) printf(链表不存在或参数i错); return 0; *e=p-data; /* 取第i个元素 */ return 1; (5)显示单链表int Disp_List(LinkList L)/*显示单链表*/ LinkList p=L-next; if(p=Null) printf(单链表为空表); else printf(输出单链表:n); while(p!=Null) printf(%d,p-data); printf(-); p=p-next; printf(n); return 1; (6)求单链表表长int Length
8、_List(LinkList L) int i=0; LinkList p=L-next; while(p) i+; p=p-next; return i; 3 课程设计思路一般的说,其过程如下: A. 分析链表特点 B. 分析链表功能以及操作 C. 设计函数库 D. 制定调试计划:初步调试计划 E. 编写主函数,方便后面的测试 F. 制定完整的程序测试计划 G. 书写文档,系统说明 H. 复查和审核:从技术的角度审查,从管理的角度审查3.1 设计函数库设计函数库不能随心所欲,想编写什么函数就编写什么函数,而是要根据分析链表所得结果,从分析结果入手,由分析我们知道链表可以进行的操作有:输入、输
9、出、插入一个元素、删除一个元素、查找一个元素、取出一个元素。根据这些操作分别写出函数:int Insert_List(); /*插入元素*/int Delete_List(); /*删除元素*/int GetElem_List(); /*查找元素*/int Disp_List(); /*显示元素*/ int Length_List();/*求表长*/4 测试结果及其分析4.1 初始化图2 初始化4.2 逆序输入元素图3 逆序输入元素4.3 单链表的长度 图4 计算长度4.4 遍历输出单链表图 5遍历4.5检索查找 图 6查找4.6输入插入元素的值和位置图 7插入4.7删除元素图 8 插入5 小
10、结通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c+语言语法的应用,以及深刻的掌握了数据结构和c/c+语言的结合运用。 在编程过程中,遇到了许多问题,在一次次的运行错误后,问题被一步步改正,也从中学到了许多知识。虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。参考文献 1王昆仑,李红等编著. 数据结构与算法. 北京:中国铁道出版社,2007. 2苏仕华等编著. 数据结构课程设计. 北京:机械工业出版社 ,2005. 3苏仕华编著. 数据结构与算法解析.合肥:中国科学技术大学出版社,20
11、04. 4郭嵩山等著国际大学生程序设计竞赛例题解北京:电子工业出版社,2008.附录:程序源代码#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define Null 0typedef int ElemType; typedef struct LNode ElemType data; struct LNode *next; LNode ,*LinkList;/*初始化单链表,即产生一个带头结点的空表,创建成功则返回空表的头指针*/LinkList Init_List(void) LinkList
12、L; L=(LinkList) malloc(sizeof(LNode); if(L) L-next=NULL; /产生空表,头结点的next域为空 return L; /*按逆序产生一个长度为n链表,参数为初始化的空链表,及线性表长度n*/*每个元素依次插入在头结点后*/int Create_List(LinkList L,int n) int i; LinkList s; /*s变量用于保存新结点地址*/ printf(生成有%d个元素的线性表:n,n); for(i=n;i0;i-) printf(请输入线性表中第 %d 个元素:n,i); /*逆序输入元素*/ s=(LinkList)malloc(sizeof(LNode); if(!s) printf(创建结点不成功n); return 0; scanf(%d,&s-data); s-next=L-next; L-next=s; return 1;/* 求单链表表长, 返回L中数据元素个数 */ int Length_List(LinkList L) int i=0; LinkList p=L-next; while(p) i+; p=p-next; return i; /* 当按位置查找元素,第i个元素存在时,其值赋给e并返回1,否则返回0 */