链式简单选择排序课程设计Word文档格式.docx
《链式简单选择排序课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《链式简单选择排序课程设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![链式简单选择排序课程设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/17/504c4792-8fe2-4f1a-b545-7811beb34b06/504c4792-8fe2-4f1a-b545-7811beb34b061.gif)
Structlink_node//链表节点类的定义
{
intdata;
//指针域
link_node*next;
//值域,不是float*next;
关于链表中的
//指针指向问题
link_node(link_node*ptr=NULL){next=ptr;
};
//初始化指针成员的构造函数
link_node(constint&
item,link_node*ptr=NULL)
{//初始化指针成员和数据的构造函数
data=item;
next=ptr;
};
//结构体定义“;
”结束
其中,值域data以整型存储了所要排序的关键字值,而指针域next以指针型存储了指向下一个结点的地址。
其中两个构造函数分别用于初始化数据和指针成员。
Link_node是定义的一个全局结构体变量,可以在下面的任何函数中调用。
3.2主要算法设计
本程序中主要用到5个函数,分别是构造函数list()、输入结点数据input(int)、输出数据函数output()、从小到大排列函数SelectSort1()、从大到小排列函数voidSelectSort2()。
构造函数:
list(){first=newlink_node;
//创建附加头结点,first指向该结点
输入节点数据函数:
利用后插法建立链表,算法如下
voidlist:
:
input(intendTag)
//其中DendTag为约定的输入序列结束标括志;
利用后插法建立单链表
link_node*newnode,*last;
intval;
make_empty();
//清空链表
cin>
>
val;
last=first;
while(val!
=endTag)//last指向表尾
{
newnode=newlink_node(val);
if(newnode==NULL)
cerr<
<
"
存储分配失误"
endl;
exit
(1);
}//动态分配失败
last->
next=newnode;
last=newnode;
//last永远指向表尾
//插入到表末端
}
next=NULL;
//可有可无,表收尾
}
函数SelectSort1()和SelectSort2()的基本实现思想是一样的,只是一些细节有所不同。
两者构成了本程序的主体部分,链式简单选择排序的基本思想是:
每一趟排序(例如第i趟,i=0,1,2,…,n-2)在后面n-i个待排序的节点数据中找出最小的元素,作为有序元素排列的第i个元素。
待到第n-2趟做完,待排序元素只剩一个了,就不用再选了。
SelectSort1()//实现从小到大排序,其实现代码见附表实验代码。
SelectSort2()//实现从大到小排序,其实现代码见附表实验代码。
这样,主要算法中的函数,只需在主函数中调用即可实现。
3.3测试用例设计
任意输入几个数据,以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调试报告
本实验需要采用支持标准MicrosoftVisualC++2010Express编译器,并采用最基础的Win32控制台程序。
在调试程序时,出现错误提示如下:
(1)
1>
------已启动生成:
项目:
链式简单选择排序--初级版,配置:
DebugWin32------
链排序.cpp
c:
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(11):
errorC2236:
意外的“class”“list”,是否忘记了“;
”?
errorC2143:
语法错误:
缺少“;
”(在“{”的前面)
errorC2447:
“{”:
缺少函数括题(是否是老式的形式表?
)
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(24):
errorC2653:
“list”:
不是类或命名空间名称
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(46):
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(55):
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(59):
errorC2065:
“first”:
未声明的标识符
errorC2227:
“->
next”的左边必须指向类结构/联合/泛型类型
类型是“unknown-type”
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(79):
“list”:
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(83):
“first”:
未声明的标识符
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(101):
\users\administrator\documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(104):
“->
类型是“unknown-type”
\users\administrator\d链排序.cpp(104):
fatalerrorC1903:
无法从以前的错误中恢复;
正在停止编译
==========生成:
成功0个,失败1个,最新0个,跳过0个==========
==========生成:
成功0个,失败1个,最新0个,跳过0个documents\visualstudio2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\==========
原因分析:
(1)结构体定义结束之后应用“;
”结束。
(2)两节点数据作比较时不应该是if(current2<
=current3)if(current2->
data>
=current3->
data)或者if(current2->
data<
data)。
因为结点包含两个数据。
5经验和体会
本实验课题的设计中涉及到了数据结构中单链表链表和选择排序两个知识点,通过本次课程设计,我对链表的一些操作:
如带附加头结点的链表的创建,链表数据的输入,节点数据的输出以及简单选择排序有了深刻的理解,通过自己动手写代码,同时加深了对选择排序执行过程的了解。
同时也锻炼了自己的动手写代码的能力。
在实验中遇到了平时只看书认识不到的各种语法错误和编译错误,之前对链表有一些错误的认识,通过不断地调试,对之前的错误观点进行了纠正。
编写程序的能力是逐步锻炼出来的,除了对知识的熟悉程度,还要用耐心去处理程序编写过程中的各种小错大错,这是对一个将要从事计算机编程行业的人的基本要求。
当遇到各种编译或语法错误时,我们必须静下心来,仔细思考问题,理清编程时的思路,确保思路正确,然后反复的调试,直至写出正确的,健壮的计算机程序。
如果自己实在找不出错误原因,我们仍可以找同学一起讨论。
总之,通过课程设计,我认识到我们在平常上课时就应该去了解每种算法解决的问题,去认真学习并尝试编写经典算法,去认真听老师讲的每一个程序,从老师那里去了解他们比较成熟的编程思想,并学以致用。
同时我了解到在平时学习中就应该经常锻炼自己的动手能力,并巩固我们课堂上学习的基础知识,这样才能让自己的计算机编程能力进步的更快。
6附录
6.1源程序清单
#inclu