数据结构课程设计报告

发布 2022-10-05 19:07:28 阅读 2958

一、课程设计概述:

本次数据结构课程设计共完成两个题:快速排序、josephu 问题。

使用语言:c

编译环境:visual c++ 6.0

二、课程设计题目一。

实验内容]快速排序。

问题描述]输入有限个数据,按照从小到大的顺序进行快速排序。

需求分析]要求及提示:

1、 对用上述算法进行快速排序,写出运行结果。

2、 写出用上述算法进行的第一趟快速排序后的结果。

3. 界面美观。

详细设计]程序清单:

#include<>

#define max 100

int r[max];

void quicksortl(int r[ ]int s,int t)

while((r[0]>=r[i])&i i++;if(i

r[i]=r[0];

if(s quicksortl(r,s,i-1);

if(t>i+1)

quicksortl(r,i+1,t);

void main( )

int i,n;

printf("请输入待排序元素的个数(少于100个):

scanf("%d",&n);

if(n>=100)

quicksortl(r,1,n);

printf("排序结束后为:")

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

printf("%1d ",r[i]);

调试分析]本程序主要的操作对象是记录数据,然后对数据进行排序处理,最后输出处理后的数。

据。怎么进行排序是一个重点也是难点,是此程序出现问题的主要原因之一:

问题一:现象:当输入的数据个数大于规定的最大数时,程序仍在继续运行。

原因:该程序中缺少一个排错片段。导致输入数据个数大于定义最大值时,不会产生中断,继续向下面的排序函数运行。

解决方法是对数据输出时,添加一个if语句,当输出的数据大于100时,提醒用户重新输入正确数据。

问题二:现象:排序时只进行第一次排序,余下的数未参与到排序中,直接输出到排序后的队列。

原因:在编写主要函数排序函数时,未采用循环语句或有非法终止的条件。导致进行第一次排序后,条过了后面的数据,直接进行了输出函数。

解决方法是将该函数分成两种情况来分析,即r【0】与r【j】的关系。

运行结果及分析]

1. 对用上述算法进行快速排序,写出运行结果。

运行结果如下:

2. 写出用上述算法进行的第一趟快速排序后的结果。

运行结果如下

3. 若出现输出大于100,则输出如下:

参考文献】1].《c程序设计》第二版,谭浩强著。北京:清华大学出版社,2024年。

2].《数据结构》 严蔚敏、吴伟民。北京:清华大学出版社,2024年。

课程设计题目二:

实验内容】=

josephu 问题。

问题描述=】

编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。

试设计一个程序求出出列顺序。

实现提示】用一个不带头结点的循环链表来处理josephu 问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

测试数据】m的初值为20;n=7,7各人的密码依次为:3,1,7,2,4,8,4。

详细设计]程序清单:

#include<>

#include <>

struct mannode

int number;

struct mannode *next

int password;

void main()

int m;

int numman;

struct mannode *head;

void deletenode(int mannumber,int number,struct mannode *head);

struct mannode *createlist(int numofman);

printf("请输入参加的人数 n

scanf("%d",&numman);

head=createlist(numman);

printf("请输入刚开始报数上限数 m

scanf("%d",&m);

deletenode(numman,m,head);

getchar();

free(head);

struct mannode *createlist (int numofman)

struct mannode *head,*mannodeptr1,*mannodeptr2;

head=null;

int num=1;

mannodeptr2=(struct mannode *)malloc(sizeof(struct mannode

printf("请输入用户所持有的密码。

scanf("%d",&mannodeptr2->password);

mannodeptr2->number=num;

head=mannodeptr2;

while(num!=numofman)

nummannodeptr1=(struct mannode *)malloc(sizeof(struct mannode

printf("请输入用户所持有的密码。

scanf("%d",&mannodeptr1->password

mannodeptr1->number =num

mannodeptr2->next =mannodeptr1

mannodeptr2=mannodeptr1;

mannodeptr2->next =head;

printf("输入结束!");

return head;

void deletenode(int mannumber,int number,struct mannode *head)

int num=1;

struct mannode *mannodeptr1;

struct mannode *mannodeptr2;

mannodeptr1=mannodeptr2=head;

while(mannumber>0)

while(num!=number

mannodeptr2=mannodeptr1

mannodeptr1=mannodeptr1->next

number

number=mannodeptr1->password;

printf("出列人的编号:%d",mannodeptr1->number) ;

mannodeptr2->next =mannodeptr1->next

mannodeptr1=mannodeptr1->next ;

mannumber--;

printf("运行结束!!!n");

调试分析]本程序用一个不带头结点的循环链表来处理该问题,先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

运行结果及分析]

m的初值为20;n=7,7各人的密码依次为:3,1,7,2,4,8,4 时,运行结果如下:

数据结构课程设计报告

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

数据结构课程设计报告

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

数据结构课程设计报告

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