数据结构课程设计报告--链表.doc_第1页
数据结构课程设计报告--链表.doc_第2页
数据结构课程设计报告--链表.doc_第3页
数据结构课程设计报告--链表.doc_第4页
数据结构课程设计报告--链表.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级语言程序设计课程设计报告 班级: 姓名: 学号: 设计时间: 一、应用程序的名称:链表二、应用程序的主题与设计目的:实现一个链表的建立、输出,并且完成节点的插入、删除操作。三、应用程序简介:1、基本结构 A、功能模块图链表的基本操作链表的建立节点的删除链表的输出节点的插入节点的插入链表的建立节点的删除链表的输出B、各模块流程图Head=NULL,n=0开始(1) 链表的建立: 开辟一个新节点,使p1、P2指向它2读入一个学生数据给p1所指的结点p1num=0?Y1Head=NULL,n=01P1num=0?NHead=p1p2next=NULL341Head=NULLP=headP2next=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后移一个位置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插到表中间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(%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(nNow,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; 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*stud)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=p0; /*插到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); /*输入要删除的学号*/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、选择输入要删除的数据,即第几组;然后就可显示删除后的记录。3、输入要添加的信息,将新数据列入数据列全部输出,并且新数据将取代之前被删除的数据的位置。五、课程设计中的得意之处:首先能够如所要求的那样完成链表的建立与输出以及链表中结点的删除与插入,再次,在此程序中,在接连着完成删除与插入后,实际的效果还相当于两数据间的替代。六、目前存在的问题: 不能随意选择只进行删除或者是只进行插入,另外每次只能删除或者插入一个数据,而不能完成多个数据同时进行的操作。 七、课程设计存在的目的:开展课程设计,有利于同学们对基础知识的理解,从实践中真实地体验程序设计的“神奇之处”,更好地巩固所学的知识。课程设计还有利于逻辑思维的锻炼,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程都需要有条理地去构思。八、自我感受:短短

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论