ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:88.29KB ,
资源ID:28456153      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28456153.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(链式简单选择排序课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

链式简单选择排序课程设计.docx

1、链式简单选择排序课程设计链式简单选择排序课程设计 链式简单选择排序1 设计题目 链式简单选择排序2 问题描述 链式简单选择排序即以单链表为存储结构,实现简单选择排序的功能。显然,实现该程序就是先要建立一个单链表,利用单链表对数据进行存储、操作。将输入的整型数据以结点的形式存储在这个建立的单链表中。然后对单链表中的这些结点的值进行简单选择排序。 该问题中,以带有附加头结点的单链表为存储结构,排序分为从大到小排序和从小到大排序两种方式,我们可以用这两种方法分别实现进行排序,分别得到结果。3 设计3.1 存储结构设计 线性表的链式存储结构的特点是用一组任意的可以是不连续的存储单元存储线性表的数据元素

2、。它包括两个域:其中存储数据元素信息的称为数据域;存储直接后继存储位置的域称为指针域。 单链表结构体的定义如下:Struct link_node /链表节点类的定义 int data; /指针域link_node*next; /值域,不是float *next; 关于链表中的 /指针指向问题 link_node(link_node*ptr=NULL)next=ptr; /初始化指针成员的构造函数 link_node(const int &item,link_node*ptr=NULL) /初始化指针成员和数据的构造函数 data=item; next=ptr; ; ; /结构体定义“;”结束其

3、中,值域data以整型存储了所要排序的关键字值,而指针域next以指针型存储了指向下一个结点的地址。其中两个构造函数分别用于初始化数据和指针成员。Link_node是定义的一个全局结构体变量,可以在下面的任何函数中调用。3.2 主要算法设计 本程序中主要用到5个函数,分别是构造函数list()、输入结点数据input(int)、输出数据函数output()、从小到大排列函数SelectSort1()、从大到小排列函数 void SelectSort2()。构造函数: list()first=new link_node; /创建附加头结点,first指向该结点输入节点数据函数: 利用后插法建立链

4、表,算法如下 void list:input(int endTag) /其中DendTag为约定的输入序列 结束标括志;利用后插法建立单链表 link_node *newnode,*last; int val; make_empty(); /清空链表 cinval; last=first; while (val!=endTag) /last指向表尾 newnode=new link_node(val); if(newnode=NULL) cerr存储分配失误next=newnode; last=newnode; /last永远指向表尾 cinval; /插入到表末端 last-next=NUL

5、L; /可有可无,表收尾函数SelectSort1( )和SelectSort2( )的基本实现思想是一样的,只是一些细节有所不同。两者构成了本程序的主体部分,链式简单选择排序的基本思想是:每一趟排序(例如第i趟,i=0,1,2,n-2)在后面n-i个待排序的节点数据中找出最小的元素,作为有序元素排列的第i个元素。待到第n-2趟做完,待排序元素只剩一个了,就不用再选了。SelectSort1( ) /实现从小到大排序,其实现代码见附表实验代码。SelectSort2( ) /实现从大到小排序,其实现代码见附表实验代码。这样,主要算法中的函数,只需在主函数中调用即可实现。3.3 测试用例设计 任

6、意输入几个数据,以0为终止符,例如输入972845 ,634873,127498, 928134, 518487, 215398,对其进行从大到小的排序,排序后结果应为972845 ,928134,634873,518487,215398,127498。再输入若干整数,例如输入98375 , 69828, 76837, 10738, 63874, 90897,对其进行从大到小的排序,排序后结果应为10738, 63874,69828,76837,90897, 98375 。4 调试报告 本实验需要采用支持标准Microsoft Visual C+ 2010 Express编译器,并采用最基础的

7、Win32控制台程序。 在调试程序时,出现错误提示如下: (1)1- 已启动生成:项目: 链式简单选择排序-初级版, 配置: Debug Win32 -1 链排序.cpp1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(11): error C2236: 意外的“class”“list”,是否忘记了“;”?1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序

8、.cpp(11): error C2143: 语法错误: 缺少“;”(在“”的前面)1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(11): error C2447: “”: 缺少函数括题(是否是老式的形式表?)1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(24): error C2653: “list”:不是类或命名空间名称1c:user

9、sadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(46): error C2653: “list”:不是类或命名空间名称1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(55): error C2653: “list”:不是类或命名空间名称1c:usersadministratordocumentsvisual studio 2010projects链式简单选

10、择排序-初级版链式简单选择排序-初级版链排序.cpp(59): error C2065: “first”: 未声明的标识符1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(59): error C2227: “-next”的左边必须指向类结构/联合/泛型类型1类型是“unknown-type”1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(79

11、): error C2653:“list”:不是类或命名空间名称1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(83): error C2065:“first”:未声明的标识符11c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(83): error C2227: “-next”的左边必须指向类结构/联合/泛型类型1类型是“unknown-typ

12、e”1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(101): error C2653:“list”:不是类或命名空间名称1c:usersadministratordocumentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版链排序.cpp(104): error C2227:“-next”的左边必须指向类结构/联合/泛型类型1 类型是“unknown-type”1c:usersadministratord链排序

13、.cpp(104): fatal error C1903:无法从以前的错误中恢复;正在停止编译=生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个= = 生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个documentsvisual studio 2010projects链式简单选择排序-初级版链式简单选择排序-初级版= 原因分析: (1)结构体定义结束之后应用“;”结束。 (2)两节点数据作比较时不应该是 if(current2data=current3-data)或者if(current2-datadata)。因为结点包含两个数据。5 经验和体会 本实验课题的设计中涉

14、及到了数据结构中单链表链表和选择排序两个知识点,通过本次课程设计,我对链表的一些操作:如带附加头结点的链表的创建,链表数据的输入,节点数据的输出以及简单选择排序有了深刻的理解,通过自己动手写代码,同时加深了对选择排序执行过程的了解。同时也锻炼了自己的动手写代码的能力。 在实验中遇到了平时只看书认识不到的各种语法错误和编译错误,之前对链表有一些错误的认识,通过不断地调试,对之前的错误观点进行了纠正。编写程序的能力是逐步锻炼出来的,除了对知识的熟悉程度,还要用耐心去处理程序编写过程中的各种小错大错,这是对一个将要从事计算机编程行业的人的基本要求。当遇到各种编译或语法错误时,我们必须静下心来,仔细思

15、考问题,理清编程时的思路,确保思路正确,然后反复的调试,直至写出正确的,健壮的计算机程序。如果自己实在找不出错误原因,我们仍可以找同学一起讨论。 总之,通过课程设计,我认识到我们在平常上课时就应该去了解每种算法解决的问题,去认真学习并尝试编写经典算法,去认真听老师讲的每一个程序,从老师那里去了解他们比较成熟的编程思想,并学以致用。同时我了解到在平时学习中就应该经常锻炼自己的动手能力,并巩固我们课堂上学习的基础知识,这样才能让自己的计算机编程能力进步的更快。6 附录6.1 源程序清单#includeusing namespace std;Struct link_node /链表节点类的定义int

16、 data; /值域link_node*next; /指针域 link_node(link_node*ptr=NULL)next=ptr; /初始化指针成员的构造函数link_node(const int &item,link_node*ptr=NULL)data=item; next=ptr; / 初始化指针成员和数据的构造函数; /错误:结构体定义结束需要用“;”结束class listpublic: list()first=new link_node; void input(int); /输入 void output(); /输出 void SelectSort1(); /从小到大排列

17、void SelectSort2(); /从大到小排列 void make_empty(); /错误2:只声明未定义该函数 list() make_empty(); /析构函数 private: link_node *first; void list:input(int endTag) /其中DendTag为约定的输入序列 结束标括志;利用后插法建立单链表 link_node *newnode,*last; int val; make_empty(); /清空链表 cinval; last=first; while (val!=endTag) /last指向表尾 newnode=new lin

18、k_node(val); if(newnode=NULL) cerr存储分配失误next=newnode; last=newnode; /last永远指向表尾 cinval; /插入到表末端 last-next=NULL; /可有可无,表收尾void list:output() link_node*current=first-next ; while (current!=NULL) /输出停止,即无后续结点 coutdatanext; void list:SelectSort1() /从小到大的排序 link_node*current1,*current2,*current3; int tem

19、p; for(current1=first-next;current1-next!=NULL;current1=current1-next) /current1指向本趟查询的首元素 /current2用于查找最小元素 /current3用于指向已经查询过的数据中的最小元素 current3=current1; for(current2=current1-next;current2-next!=NULL;current2=current2-next) if(current2-datadata) current3=current2; if(current2-datadata) current3=c

20、urrent2; /与上面for语句结合找出本趟查询最小的元素 if (current1-next!=current3-next) temp=current1-data; current1-data=current3-data; current3-data=temp; /将本趟查询的最小元素与本趟查找首元素交换位置 void list:SelectSort2() /从大到小排序,原理与从小到大排序相同 link_node*current1,*current2,*current3; int temp; for(current1=first-next;current1-next!=NULL;cur

21、rent1=current1-next) current3=current1; for(current2=current1-next;current2-next!=NULL;current2=current2-next) if(current2-data=current3-data) current3=current2; if(current2-data=current3-data) current3=current2; if (current1-next!=current3-next) temp=current1-data; current1-data=current3-data; curr

22、ent3-data=temp; void list: make_empty() link_node *q; while(first-next!=NULL) q=first-next; first-next=q-next; /从头结点开始删除 delete q; int main() list a; /建立对象 cout向链表括中输入数据(0表示终止字符):n; a.input(0); /0为终止符 cout您输入的数据为a:n; a.output(); coutchoice; if(choice=1) a.SelectSort1(); coutn排序后的数列为(从小到大排序):endl; a.

23、output(); coutn; else if(choice=2) a.SelectSort2(); coutn排序后的数列为(从大到小排序):endl; a.output(); coutn; else cout输入错误; return 0; 6.2运行结果 对于链式简单选择排序,其数据比较次数与待排序序列的初始顺序无关,其比较次数总是O(n*n),但元素移动次数则与待排序元素序列有关,最好情况下数据一次也不用移动,最坏情况下元素每一趟都要进行结点数据交换,总的移动次数为3(n-1)。 运行输出结果:1.从大到小排列 2.从小到大排列 本科生课程设计成绩评定表班级:计算机1002班 姓名:曹天天 学号:0121010340232序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名:2012 年7月5日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1