数据结构与算法说明书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构与算法课程设计

题目:求素数问题

猴子吃桃问题

跳马问题

排序重构问题。

目录

目录 (2)

摘要 (4)

一.求素数问题 (5)

1.数据结构设计 (5)

2.算法设计 (5)

3.调试分析 (6)

4.测试结果 (6)

5.源程序(带注释) (6)

二.构造可以使N个城市连接的最小生成树 (8)

1.数据结构设计 (9)

2.算法设计 (9)

3.调试分析 (10)

4.测试结果 (11)

5.源程序(带注释) (12)

三.猴子吃桃问题 (19)

.数据结构设计 (19)

2.算法设计 (19)

3.调试分析 (21)

4.测试结果 (21)

5.源程序(带注释) (22)

4.排序重构问题 (24)

1.数据结构设计 (24)

2.算法设计 (24)

3、流程图如下: (25)

4、调试分析 (25)

5、测试结果 (25)

6、源程序(带注释) (26)

总结 (30)

参考文献 (31)

致谢 (31)

摘要

此报告是关于四个问题的设计:求素数问题、猴子吃桃子问题、跳马问题、哈夫曼的编/译码系统。

1.求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有

小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。(1)

2.猴子吃桃子问题。有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且

再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1)采用数组数据结构实现上述求解;2)采用链式数据结构实现上述求解;3)采用递归实现上述求解。(2)

3.跳马问题。要求在64个国际象棋格子,任意位置放一个马,如何不重复地把格

子走完。(3)

4.排序重构问题。令A为一个由N个已特殊排序数组成的数列:A

1,A

2

,…,A

N

其中A

1=0。令B为N(N-1)/2个数(定义为D

ij

=A

i

-A

j

(i>j))组成的数列。例如,

A=0,1,5,8,那么D=1,3,4,5,7,8。请完成:

a)编写程序,根据A构造D;

编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。。

1)编译的语言:C语言

2)编译环境:Visual C++ 6.0

关键词:递归,链表,栈和队列,猴子吃桃,跳马,排序重构 C语言数据结构顺序表链表数组

一.求素数问题

埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。

从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。(1)

1.数据结构设计

定义一个线性表顺序存储结构,用来求所有小于N的素数

typedef int DataType;//数据类型

typedef struct{

DataType data[maxsize]; 定义一个一维数组

int length;//线性表中实际元素的个数

}Seqlist;

2.算法设计

用一个循环结构判断是否为素数,如果是素数则返回1,负责返回0。

int sushu(DataType &i)

{

int m;

if(i==1)

return 0;//不是素数

for(m=2;m

{

if(i%m==0)

return 0;//不是素数

}

return 1;//判断为素数,返回为1

}

3.调试分析

断一个数是否为素数的问题,例如数字I,求解其2-i-1 求余数,若为0,则不是素数,相反为素数。

时间复杂度的分析:算法的时间复杂度O(L.length-1)+O(m)。

4.测试结果

图1 数问题截图

程序运行结果如图所示,当输入素数5时,显示出1-5之间的素数2,3,5.

5.源程序(带注释)

#include

#include

#define maxsize 200

#define FALSE 0

typedef int DataType;

typedef struct{

DataType data[maxsize];

int length;

}Seqlist;//结点结构

int sushu(DataType i) {

int m;

if(i==1)

return 0;

for(m=2;m

if(i%m==0)

return 0;

}

return 1;

}

int m; int j;int i= 0; int k=0;

int main() {

Seqlist L;

L.length=maxsize;

for(j=2;j<=L.length;j++) {

L.data[j-1]=j;

printf("%d\t",L.data[j-1]);

}

printf("\n");

相关文档
最新文档