




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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&&j<i-1) p=p->next; j+; if(!p|j>i-1) return ERROR; s=(LinkList)malloc(sizeof(struct LNode); s->data=e; s->next=p->next; p->next=s; re
6、turn OK; (2) 删除函数int Delete_List(LinkList L,int i,ElemType *e) /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */ int j=0; LinkList p=L,q; while(p->next&&j<i-1) p=p->next; j+; if(!p->next|j>i-1) return 0; q=p->next; p->next=q->next; *e=q->data; free(q); return 1; (3)查找元素/* 当按位置查找
7、元素,第i个元素存在时,其值赋给e并返回1,否则返回0 */ int GetElem_List(LinkList L,int i,ElemType *e) int j=0; LinkList p=L; while(p&&j<i) p=p->next; j+; if(!p|j>i) printf("链表不存在或参数i错"); return 0; *e=p->data; /* 取第i个元素 */ return 1; (5)显示单链表int Disp_List(LinkList L)/*显示单链表*/ LinkList p=L->ne
8、xt; 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_List(LinkList L) int i=0; LinkList p=L->next; while(p) i+; p=p->next; ret
9、urn i; 3 课程设计思路一般的说,其过程如下: A. 分析链表特点 B. 分析链表功能以及操作 C. 设计函数库 D. 制定调试计划:初步调试计划 E. 编写主函数,方便后面的测试 F. 制定完整的程序测试计划 G. 书写文档,系统说明 H. 复查和审核:从技术的角度审查,从管理的角度审查3.1 设计函数库设计函数库不能随心所欲,想编写什么函数就编写什么函数,而是要根据分析链表所得结果,从分析结果入手,由分析我们知道链表可以进行的操作有:输入、输出、插入一个元素、删除一个元素、查找一个元素、取出一个元素。根据这些操作分别写出函数:int Insert_List(); /*插入元素*/in
10、t 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 小结通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c+语言语法的应用,以及深刻的掌握了数据结构和c/c+语言的
11、结合运用。 在编程过程中,遇到了许多问题,在一次次的运行错误后,问题被一步步改正,也从中学到了许多知识。虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。参考文献 1王昆仑,李红等编著. 数据结构与算法. 北京:中国铁道出版社,2007. 2苏仕华等编著. 数据结构课程设计. 北京:机械工业出版社 ,2005. 3苏仕华编著. 数据结构与算法解析.合肥:中国科学技术大学出版社,2004. 4郭嵩山等著国际大学生程序设计竞赛例题解北京:电子工业出版社,2008.附录:程序源代码#include<stdlib.h>
12、#include<stdio.h>#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 L; L=(LinkList) malloc(sizeof(LNode); if(
13、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;i>0;i-) printf("请输入线性表中第 %d 个元素:n",i); /*逆序输入元素*/ s=(LinkList)malloc(si
14、zeof(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,否则
15、返回0 */ int GetElem_List(LinkList L,int i,ElemType *e) int j=0; LinkList p=L; while(p&&j<i) p=p->next; j+; if(!p|j>i) printf("链表不存在或参数i错"); return 0; *e=p->data; /* 取第i个元素 */ return 1; /* 按元素查找,查找链表中是否存在值为e的元素,存在,则返回L中第一个e元素的位序,若不存在,则返回值为0 */ int Locate_List(LinkList L,E
16、lemType e) int i=0; LinkList p=L; while(p&&p->data!=e) p=p->next; i+; if(p) return i; else return 0; /* 在带头结点的单链线性表L中第i个位置之前插入元素e */int Insert_List(LinkList L,int i,ElemType e) int j=0; LinkList p=L,s; while(p&&j<i-1) p=p->next; j+; if(!p|j>i-1) return ERROR; s=(LinkLi
17、st)malloc(sizeof(struct LNode); s->data=e; s->next=p->next; p->next=s; return OK; int Delete_List(LinkList L,int i,ElemType *e) /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */ int j=0; LinkList p=L,q; while(p->next&&j<i-1) p=p->next; j+; if(!p->next|j>i-1) return 0; q=p->ne
18、xt; p->next=q->next; *e=q->data; free(q); return 1; 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&qu
19、ot;); return 1; /*显示选择提示信息函数*/void ShowSelect() printf("n请选择要执行的操作:n"); printf("-n"); printf(" 1-初始化n"); printf(" 2-逆序输入元素n"); printf(" 3-求单链表长度n"); printf(" 4-遍历输出单链表n"); printf(" 5-在单链表中检索查找n"); printf(" 6-向单链表中插入元素n")
20、; printf(" 7-从单链表中删除元素n"); printf(" 0- 退出n"); printf("-n"); printf("please input number 07 nn");int main(void)LinkList PL=NULL;int i,x,flag; int len; /*表示单链表长*/ int select; /*select变量表示用户的选择项*/ShowSelect();scanf("%d",&select);while(select!=0)switch(select)case 1: PL=Init_List(); break; case 2: printf("请输入线性表中元素个数:n");scanf("%d",&le
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件设计师考试经验分享试题及答案
- 2025年软件设计师考试资讯获取途径试题及答案
- 全面覆盖网络管理员考试试题及答案
- 2025设备采购合同简化版范本
- 车站安保措施与乘客安全管理计划
- 班级尊重与包容氛围的构建计划
- 国际法体系的构建与完善分析试题及答案
- 员工上班的现评语
- 行政管理考试前的复习计划:试题及答案
- 计算机水平考试试题及答案分享
- 《无人机结构与系统》第1章 无人机结构与飞行原理
- 中国交通文化
- 肠道病毒(共33张PPT)
- DB33T 2540-2022 生物安全实验室管理评价规范
- 2023届高三语文模拟试卷及参考答案2023年全国高考(北京卷)语文及试题解析
- 清华大学抬头信纸
- 设备一级保养表(行吊)
- 《教育心理学电子书》word版
- 工业园区智慧环保安全应急管理平台方案
- 国家邮政纸箱尺寸
- T∕CGMA 033001-2018 压缩空气站能效分级指南
评论
0/150
提交评论