数据结构课程设计报告链表

上传人:石磨 文档编号:193467642 上传时间:2021-08-21 格式:DOC 页数:13 大小:94.50KB
返回 下载 相关 举报
数据结构课程设计报告链表_第1页
第1页 / 共13页
数据结构课程设计报告链表_第2页
第2页 / 共13页
数据结构课程设计报告链表_第3页
第3页 / 共13页
数据结构课程设计报告链表_第4页
第4页 / 共13页
数据结构课程设计报告链表_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《数据结构课程设计报告链表》由会员分享,可在线阅读,更多相关《数据结构课程设计报告链表(13页珍藏版)》请在金锄头文库上搜索。

1、高级语言程序设计课程设计报告 班级: 姓名: 学号: 设计时间: 一、应用程序的名称:链表二、应用程序的主题与设计目的:实现一个链表的建立、输出,并且完成节点的插入、删除操作。三、应用程序简介:1、基本结构 A、功能模块图链表的基本操作链表的建立节点的删除链表的输出节点的插入节点的插入链表的建立节点的删除链表的输出B、各模块流程图Head=NULL,n=0开始(1) 链表的建立: 开辟一个新节点,使p1、P2指向它2读入一个学生数据给p1所指的结点p1num=0?Y1Head=NULL,n=01P1num=0?NHead=p1p2next=NULL341Head=NULLP=headP2nex

2、t=p1P2next=p1Head=p1p2next=NULL12n=n+1n=1?NYp2=p1结束在开辟一个新节点,使p1指向它读入一个学生数据给p1所指结点(2) 链表的输出:开始P=headHead=NULLNYP指向的不是结点34pnum,pscore输出p指向的节点并且p指向下一个节点pnum,pscorep=NULLp=NULL结束 结束(3) 链表结点的删除开始Head=NULL?开始num=p1num或p1=NULLHead=NULL?P1=headP1=headnum=p1num或p1=NULL?YNP2=p1P2后移一个位置P2=p1“空表”“空表”P1=p1nextP1

3、后移一个位置Num=p1numNNum=p1numYP1=head?Np1是要删除的结点P1=head找不到Yhead=p1next(删除一个结点)P2next=p1next(删除一个结点)“找不到”结束P2next=next结束Head=p1next(4) 链表节点的插入开始P1=head,p0=stud原来的链表是空表?YNP1=p1nextP2=p1P0nump1num,p1所指的不是表尾节点?NYP0numnum?Head=p1?Head=p0P0next=p0(插到表头之前)P2next=p0,p0next=p1n=n+1结束将p0所指的结点作为唯一节点NYP1指向头结点YN插到表中

4、间P1next=p0P0next=NULL2、基本内容:(源代码及注释)#include#include#define LEN sizeof(struct student)int n;struct studentint num;int score;struct student *next;struct student *creat(void) /*定义函数,此函数带回一个指向链表头的指针*/struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(LEN); /*开辟一个新单元*/scanf(%

5、d,%d,&p1-num,&p1-score);head=NULL;while(p1-num!=0) n=n+1; if(n=1)head=p1; else p2-next=p1; /*把p1所指的结点连接在p2所指的结点后面*/ p2=p1; p1=(struct student*)malloc(LEN); scanf(%d,%d,&p1-num,&p1-score);p2-next=NULL;return(head); /*函数返回head的值,即链表中第一个节点的起始地址*/void print(struct student*head)struct student*p;printf(nN

6、ow,these %d records are:n,n);p=head;if(head!=NULL) do printf(%d %dn,p-num,p-score); p=p-next; while(p!=NULL);struct student*del(struct student*head,int num)struct student*p1,*p2;if(head=NULL) printf(nlist null! n); return head; p1=head;while(num!=p1-num & p1-next!=NULL) /*p1指向的不是所要找的节点,且后有节点*/ p2=p1

7、; p1=p1-next; /*p1后移一个节点*/if(num=p1-num) /*找到了*/ if(p1=head)head=p1-next; /*若p1指向的首节点,把第二个节点地址赋予head*/ else p2-next=p1-next; /*否则将下一个节点地址赋给前一节点地址*/ printf(delete:%dn,num); n=n-1; else printf(%d not beed found!n,num); /*找不到该节点*/return(head);struct student*insert(struct student*head,struct student*stu

8、d)struct student*p0,*p1,*p2;p1=head; /*使p1指向第一个节点*/p0=stud; /*p0指向要插入的节点*/if(head=NULL) /*原来的链表是空表*/ head=p0; p0-next=NULL; /*使p0指向的节点作为头结点*/else while(p0-nump1-num) & (p1-next!=NULL) p2=p1; /*使p2指向刚才p1指向的节点*/ p1=p1-next; /*p1后移一个节点*/ if(p0-numnum) if(head=p1) head=p0; /*插到原来第一个节点之前*/ else p2-next=p

9、0; /*插到p2指向的节点之后*/ p0-next=p1; else p1-next=p0; p0-next=NULL; /*插到最后的节点之后*/ n=n+1; /*节点数加1*/return(head);void main() /*作主调函数*/ struct student *head,stu;long del_num;printf(input records:n); head=creat(); /*建立链表,返回头指针*/print(head); /*输出全部节点*/printf(ninput the deleted number:);scanf(%1d,&del_num); /*输

10、入要删除的学号*/head=del(head,del_num); /*删除后链表的头地址*/print(head); /*输出全部节点*/printf(ninput thr inserted record:); /*输入要插入的节点*/scanf(%d,%d,&stu.num,&stu.score);head=insert(head,&stu); /*插入一个节点,返回头结点地址*/print(head); /*输出全部节点*/四、主要运行界面的介绍:(在vc环境下)1、连接运行后,输入数据(以两组为例),组之间以逗号间隔,最后以数字0结束。如图所示,输入后可显示数据。2、选择输入要删除的数据

11、,即第几组;然后就可显示删除后的记录。3、输入要添加的信息,将新数据列入数据列全部输出,并且新数据将取代之前被删除的数据的位置。五、课程设计中的得意之处:首先能够如所要求的那样完成链表的建立与输出以及链表中结点的删除与插入,再次,在此程序中,在接连着完成删除与插入后,实际的效果还相当于两数据间的替代。六、目前存在的问题: 不能随意选择只进行删除或者是只进行插入,另外每次只能删除或者插入一个数据,而不能完成多个数据同时进行的操作。 七、课程设计存在的目的:开展课程设计,有利于同学们对基础知识的理解,从实践中真实地体验程序设计的“神奇之处”,更好地巩固所学的知识。课程设计还有利于逻辑思维的锻炼,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程都需要有条理地去构思。八、自我感受:短短的一周时间,要完成课程设计的确不容易,毕竟是第一次做的。在编程的整个过程中可以说是困难重重,虽然巩固了不少以前所学过的知识,但更多的是发现了自己的不足之处对以前所学的知识理解的不够深刻,掌握的不够牢固。 通过这次课程设计,我懂得了理论与实际相结合的重要性。只有做到把所学的理论知识与实践相结合起来,才能真正提高自己的实际动手能力和独立思考的能力。 12 / 13文档可自由编辑打印

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号