链式简单选择排序课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
链式简单选择排序课程设计
链式简单选择排序
1 设计题目
链式简单选择排序
2 问题描述
链式简单选择排序即以单链表为存储结构,实现简单选择排序的功能。
显然,实现该程序就是先要建立一个单链表,利用单链表对数据进行存储、操
作。将输入的整型数据以结点的形式存储在这个建立的单链表中。然后对单链
表中的这些结点的值进行简单选择排序。
该问题中,以带有附加头结点的单链表为存储结构,排序分为从大到小
排序和从小到大排序两种方式,我们可以用这两种方法分别实现进行排序,分
别得到结果。
3 设计
3.1 存储结构设计 线性表的链式存储结构的特点是用一组任意的可以是不连续的存储单元
存储线性表的数据元素。它包括两个域:其中存储数据元素信息的称为数据
域;存储直接后继存储位置的域称为指针域。
单链表结构体的定义如下:
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)
1
{ //初始化指针成员和数据的构造函数
data=item;
next=ptr;
};
}; //结构体定义“;”结束
其中,值域data 以整型存储了所要排序的关键字值,而指针域next 以指针
型存储了指向下一个结点的地址。其中两个构造函数分别用于初始化数据和指
针成员。Link_node 是定义的一个全局结构体变量,可以在下面的任何函数中调
用。
3.2 主要算法设计
本程序中主要用到5个函数,分别是构造函数list()、输入结点数据input(int )、
输出数据函数output()、从小到大排列函数SelectSort1()、从大到小排列函数 void
SelectSort2()。
构造函数: list(){first=new link_node;}; //创建附加头结点,first 指向该结点
输入节点数据函数:
利用后插法建立链表,算法如下
void list::input(int endTag)
//其中DendTag 为约定的输入序列
结束标括志;利用后插法建立单链表
{
link_node *newnode,*last;
int val;
make_empty(); //清空链表
cin>>val;
last=first;
while (val!=endTag) //last 指向表尾
{
newnode=new link_node(val);
2 if (newnode==NULL)
{
cerr<<"存储分配失误"< exit(1); } //动态分配失败 last->next=newnode; last=newnode; //last 永远指向表尾 cin>>val; //插入到表末端 } 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 调试报告 3 本实验需要采用支持标准Microsoft Visual C++ 2010 Express 编译器, 并采用最基础的Win32控制台程序。 在调试程序时,出现错误提示如下: (1) 1>------ 已启动生成:项目: 链式简单选择排序--初级版, 配置: Debug Win32 ------ 1> 链排序.cpp 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(11): error C2236: 意外的“class ”“list ”,是否忘记了“;”? 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(11): error C2143: 语法错误: 缺少“;”(在“{”的前面) 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(11): error C2447: “{”: 缺少函数括题(是否是老式的形式表?) 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(24): error C2653: “list ”:不是类或命名空间名称 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(46): error C2653: “list ”:不是类或命名空间名称 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(55): error C2653: “list ”:不是类或命名空间名称 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(59): error C2065: “first ”: 未声明的标识符 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式简单选择排序--初级版\链排序.cpp(59): error C2227: “->next ”的左边必须指向类结构/ 联合/泛型类型 1>类型是“unknown-type ” 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(79): error C2653:“list ”:不是类或命名空间名称 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(83): error C2065:“first ”:未声明的标识符 1>1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链 式简单选择排序--初级版\链排序.cpp(83): error C2227: “->next ”的左边必须指向类结构/联合/泛型 类型 1>类型是“unknown-type ” 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(101): error C2653:“list ”:不是类或命名空间名称 1>c:\users\administrator\documents\visual studio 2010\projects\链式简单选择排序--初级版\链式 简单选择排序--初级版\链排序.cpp(104): error C2227:“->next ”的左边必须指向类结构/联合/泛型类 型 1> 类型是“unknown-type ” 1>c:\users\administrator\d 链排序.cpp(104): fatal error C1903:无法从以前的错误中恢复;正在停 止编译 ==========生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个========== ========== 生成:成功 0 个,失败 1 个,最新 0 个,跳过 0 个documents\visual studio