C++用链表存放数据并排序
需求分析: 本程序主要解决的是: 按下述方法设计一个排序程序:使用由结构形成的链表来存放数据;总保障,在把第i个数据插入到链表以前,链表中当前已有的i-1个数据已经是有序的(i=1,2,…,即是说,每次总是在原有有序链表的适当位置插入新数据,而保障插入后的链表仍有序。注意i=1时,链表为“空”显然满足条件)。
3.2概要设计:
本程设计思路:定义如下的数据结构以及指针变量first与last,而后从键盘输入n个数据,依次“插入”到以first指向其首、以last指向其末的有序链表之中,最终实现n个int型数据的从小到大排序,并输出排序结果。
struct item { //使用item结构来形成链表项
int dat; //放欲排序的数据原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/
item* next; //指向其后项,“串联”成为链表
};
item* first=NULL, *last=NULL; // first指向链表首项,last指向链表末项
//赋予初值NULL意味着起始时链表为“空”。
数据的输入以‘0’结束。
程序流程图(如下图):
输入函数input(int n)
输出函数output()
3.3 详细设计与编码:
见上传程序。
3.4 调试分析:
在调试过程中程序遇到的问题如下:开始设计时由于对链表操作知不是很清晰,所以对于指针的传递方面存在较大的问题,同时在排序时对选择语句的变化方面也有不少问题。总的来说问题集中在链表知识和排序算法上,解决的思路主要是通过仔细阅读《数据结构》中的链表部分,并和同学积极交流才解决了问题。
程序执行的结果:
3.5 用户使用说明:
用户根据程序的提示输入排序数据的个数和数据的值,此项比较简单。但在阅读程序时需注意链表指针的变化及插入排序时条件的变化。
3.6 设计心得:
链表知识虽然在面向对象的语言中用到的比较少,但在一些底层工作和面向过程的工作中还是比较实用的。通过本次实验,我对于以前所学的数据结构知识及链表知识又有了一次比较清晰的认识,对于链表中指针的应用和结构体的应用有了充分了解,感觉到对于链表操作要特别仔细,要对每一步操作追踪指针的变化,本次实验主要的收获是对链表知识有了重新的认识。1832