《数据结构实验报告实验5》由会员分享,可在线阅读,更多相关《数据结构实验报告实验5(7页珍藏版)》请在金锄头文库上搜索。
1、本科实验报告本科实验报告课程名称: 数据结构 实验项目: 排序 实验地点: 迎西校区逸夫楼 302 专业班级:软件 1109 学号: 2011004872 学生姓名: 栗永春 指导教师: 牛之贤 年 月 日排序排序一、实验目的和要求一、实验目的和要求目的与要求二、实验内容和原理二、实验内容和原理简述题目要解决的问题是什么,并说明输入和输出数据的形式。 简述存储结构和算法的基本思想。三、主要仪器设备三、主要仪器设备使用的计算机:硬件配置、软件环境四、操作方法与实验步骤四、操作方法与实验步骤列出调试通过的源程序。 习题 1: /* * 1设计一个用链表表示的直接选择排序算法,并用程序实现。 * *
2、 算法说明:已知待排序初始序列用单链表存贮,头指针 head 指向第一个结点 * * ,从这个待排序列中找出最小结点,插入 head 之后,用 r 来指示。r 以前为已 * * 排序序列,r 以后为未排序序列。再从未排序序列中找出最小结点插入 r 的后 * * 面,让 r 指向这个结点。反复执行这个过程,直到排好序。 * */#include #include /结点 typedef struct no int x; struct no *next; Node, *Node_;/函数声明 Node_ Structure();/构建序列链表 void Show(Node_ head);/打印链表
3、 void Sort(Node_ head);/排序算法 void Myfree(Node_ head);/空间释放算法void main() Node head; head.next = Structure(); if(head.next = NULL) printf(“构建序列表失败!n“); return ; Show(head.next); Sort( Show(head.next); Myfree(head.next); /用于构造一个序列链表,返回其第一个元素的指针 Node_ Structure() int x; scanf(“%d“, if(x!=0) Node_ q=(Nod
4、e_)malloc(sizeof(Node); q-x = x; q-next = Structure(); return q; return NULL; /释放申请的空间 void Myfree(Node_ head) Node_ p; while(head != NULL) p = head; head = head-next; free(p); /打印序列链表中的数据 void Show(Node_ head) while(head != NULL) printf(“%4d“, head-x); head = head-next; printf(“n“); /排序算法 void Sort
5、(Node_ head) Node_ r=head, p; Node_ ident;/用来记录中间量 Node_ identl;/用来记录中间量的前一个结点while(r-next != NULL) ident = r-next; identl = r; for(p=ident; p-next!=NULL; p=p-next) if(p-next-x) x) identl = p; ident = p-next; identl-next = ident-next; ident-next = r-next; r-next = ident; r = r-next; 习题 2: /* *2对 N 个
6、关键字取整数的记录进行整序,以使所有关键字为非负数的记录排在 * * 关键字为负数的记录之前,要求使用最少的附加空间,且算法的时间复杂度 * * 为 O(N)。 * */#include #define MAX 100void main() int aMAX; int i, j, n; printf(“请输入记录的总个数。n“); scanf(“%d“, printf(“请输入各记录(仅输入关键字)n“); for(i=1; i =0) -j; ai = aj; while(ij aj = ai; ai = a0;for(i=1; i=n; i+)/打印输出 printf(“%4d“, ai); printf(“n“); 五、实验数据记录和处理五、实验数据记录和处理列出上面程序对应的运行结果。六、实验结果与分析六、实验结果与分析分析程序的优缺点、时空性能七、讨论、心得七、讨论、心得改进思想,写出心得体会注:填写内容用 5 号,宋体,单倍行距