数据结构课程设计报告

发布 2022-10-05 19:29:28 阅读 7164

数据结构课题实验报告。

课程题目:编程实现希尔、快速、堆、归并四种排序算法,并计算每种算法的比较、移动次数。要求待排序数据从磁盘文件读入,实施排序后将数据写入另一文件。

实现语言:采用 c作为实现语言。

问题分析和任务定义:

实现此程序可以采用模块化程序设计的方法,用自上而下,分而治之的方法解决一个大问题,并且采用函数嵌套调用,此题可以分为3个部分。

第一部分:编写程序creat实现将待排数据从磁盘文件中读入,程序中是采用线性表的方式读入数据,实现排序后,编写子程序write将排好序的数据写入指定文件,编写print函数将排序个数,交换次数,比较次数依次输出。

第二部分:分别编写shellsort,quicksort,heapsort,mergingsort,实现排序功能。

第三部分:编写菜单和主函数,使用switch 语句,调用各个排序子函数,实现排序功能。自定义数据结构。

template

class sort

排序类,其成员包括:

static void shellsort( sortlistshell排序。

static void quicksort( sortlist快速排序。

static void heapsort ( sortlist堆排序。

static void mergesort( sortlist归并排序。

long comparetimes获取本次排序比较次数。

long shifttimes获取本次排序移动次数。

源**:#include""

#include""

#include""

#include""

#define maxsize 10000000

#define n 20

#define eq(a,b) (a)==b))

#define lt(a,b) (a)<(b))

#define lq(a,b) (a)<=b))

#define len sizeof(sqlist)

#define maxr 10

#define maxnum 100000000

typedef struct nodenode;

typedef struct

for(i=1;i

fclose(fp);

return(l);

void write(qsqlist l)//将序列输出到指定的文件中。

long i;

file *fp;

char filename[n];

printf("\t请输入存储文件名:")

scanf("%s",filename);/输入将要储存的文件名。

fp=fopen(filename,"w");

for(i=1;i<=l->length;i++)将链表中数据逐一写入文件中。

fclose(fp);

void print(qsqlist l)//打印数据个数以及排序过程中的比较次数和移动次数。

printf("\t数据个数:%ld",l->length);

printf("\t比较次数:%ld",comparetimes);

printf("\t移动次数:%ld",shifttimes);

struct node min1(struct node a,struct node b)//比较两接点关键字的大小。

struct node temp;

if(>

temp=b;

elsetemp=a;

comparetimes++;

return(temp);

qsqlist shellinsert(qsqlist l,int dk)//对顺序表以dk为增量作直接插入排序。

int i,j;

for(i=dk+1;i<=l->length;i++)

comparetimes++;

return(l);

qsqlist shellsort(qsqlist l)//希尔排序。

int i,t=0;

int k;

for(t=0;lq(pow(2,t),(l->length+1));t++)

t=t-1;

for(i=1;i<=t;++i)

print(l);

write(l);

return(l);

/quicksort,选取第一个数做为枢轴,使枢轴左边的数都比枢轴小,右边的数都比枢轴大,把数据一分为二。

long quicksort(qsqlist l,long low,long high)//交换顺序表l中子表l->r[low..high]的记录,使枢轴记录到位,并返回其所在位置。

int pivotkey;

l->r[0]=l->r[low];

pivotkey=l->r[low].key;//用序列的第一个记录作枢轴记录。

while(low

comparetimes++;

l->r[0]=l->r[low];

shifttimes++;

l->r[low]=l->r[high];/将high赋值给low

shifttimes++;

l->r[high]=l->r[0];

shifttimes++;

while(lowr[low].key<=pivotkey)//将比枢轴记录大的记录交换到高端。

comparetimes++;

l->r[0]=l->r[low];

shifttimes++;

l->r[high]=l->r[low];

shifttimes++;

l->r[high]=l->r[0];

shifttimes++;

return(low);/返回枢轴所在位置。

qsqlist quick2(qsqlist l,long low,long high)//对顺序表l中的子序列作快速排序。

long pivot;

if(low

return(l);

qsqlist quicksort(qsqlist l)//对顺序表作快速排序。

long low,high;

low=1;//将第一个数据所在位置定义为低位。

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...