1、5. 独立完成;6 每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;7课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;8课程设计的成绩由两部分组成:程序检查成绩(40,每个功能占程序分的20%)报告检查成绩(40)平时考核(20%)五、实现思路链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域
2、指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。实际上,链表中的每个结点能够用若干个数据和若干个指针。结点中只有一个指针的链表称为单链表,这是最简单的链表结构。再c+中实现一个单链表结构比较简单。例如,可定义单链表结构的最简单形式如下 class linkpublic: elemtype data; link *next;这里用到了结构体类型。其中,*next是指针域,用来指向该结点的下一个结点;Data是一个整
3、形变量,用来存放结点中的数据。当然,Data能够是任何数据类型,包括结构体类型或类类型。在此基础上,我们在定义一个链表类list,其中包含链表结点的插入,删除,输出等功能的成员函数。void print(link*head) ;/链表结点的输出link*Locate(link*head,elemtype x);/链表的的查询void insert(link*head,elemtype x,elemtype y);/链表结点的插入void deletel(link*head,elemtype x);/链表结点的删除void change(link*p,elemtype x,elemtype y)
4、;/链表的修改由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。只能从链表的头指针(即head)开始,用一个指针p先指向第一个结点,然后根据结点p找到下一个结点。以此类推,直至找到所要访问的结点或到最后一个结点(指针为空)为止。流程图:Public: N Yq!=NULLq-data=xdata=yq=q-nextlink*q 主函数流程图 3 4 5 6 7N .六、实现过程#includewindows.hstdlib.h#define elemtype intclass linkclass
5、linklistprotected: link*head; link*rcreat() link*s,*p,*r; elemtype i; couti; p=r=new link; p-next=NULL; while(i) s=new link; s-data=i; r-next=s; r=s; cin r- return p; void print(link*head) link*p; p=head-next; while(p-next!=NULL)p-data p=p- coutdata;endl; link*Locate(link*head,int x) p=head; int j=0
6、; while(p!=NULL)&(jj+; void deletel(link*head,elemtype x) link*p,*q; q=head;(p-data!=x) q=p; if(p=NULL)coutnext=p- delete(p); void insert(link*head,int x,elemtype y) link*p,*s; s=new link; s-data=y; if(head-next=NULL) head- s- p=Locate(head,x); if(p=NULL)插入位置非法void change(link*p,elemtype x,elemtype
7、y) link*q; q=p- while(q! if(q-data=x)q- q=q-int count(link*h)int n=0; p=h- while(p! n+;p=p- return n;void main() int n,act; char m; elemtype x,y; linklist a; p=a.rcreat(); a.print(p);loop1:coutm; if(m=e) /根据提示选择操作 act=1;f) act=2;g act=3;h act=4;i act=5;q act=6;c act=7; switch(act) case 1:请输入要查找的元素值x
8、; q=a.Locate(p,x); if(q=NULL)coutx不在表中。找不到! else cout a.change(p,x,y); case 5:n=a.count(p);链表中结点个数为:n case 6:system(CLS); /清屏goto loop2; case 7:loop2:七、实验总结(分析程序的得与失)1、经过运行本程序能够进行链表的创立、插入、删除、修改、统计等功能,已具备链表试验的功能,基本达到了题目的要求。2、在编写程序的过程中,对字符的判断做标记,用switch语句选择运用,使结构更加清晰,能够用goto语句进行循环。使程序的可执行性更强。3、本程序还是有一
9、定缺陷,比如运行界面不够美观、但基本达到了人机交互的功能达到要求4、对本程序自我感觉人机交互做的比较好,能够做到根据选择进行操作,主要依靠循环进行实现,同时我也加入了清屏功能,使操作更加人性化。5、本程序的但还是比较单一,功能不是很完善,能够对界面进行设计,是其更加美观。八、心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。经过本次为期一周的课程设计课,我有很多感触,从我拿到题目开始到完全做出程序,我经历了一个波折的一周,可是这周我受益匪浅,明白把理论用到实践中的不容易。这是第二次做C的课程设计,比第一次稍微好一点,遇到问题都自己花时间去查找资料,知道从什么地方入手,但在实验中发现自己有很多的不足,对课本理解的不够深刻,对一些课外的知识要多接触,与拓展。虽然有太多的困难,可是在艾老师的指导下课程设计还是顺利的完成了。在整个课程设计的过程中老师非常耐心的给我们辅导,扮演着很重要的角色,特别是教我一些课外的知识。在此非常感谢我的指导老师。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1