当前位置:文档之家› 数据结构1

数据结构1

数据结构1
数据结构1

课程设计报告

课程名称数据结构课程设计

课题名称教学计划编制问题

专业应用物理

班级1201

学号201210040128

姓名张大帅

指导教师刘长松黄哲

2014年12月13日

湖南工程学院

课程设计任务书

课程名称数据结构课程设计课题教学计划编制问题

专业班级应用物理1201

学生姓名张大帅

学号201210040128

指导老师刘长松黄哲

审批

任务书下达日期:2014 年12 月13 日任务完成日期:2014 年12 月20 日

一、设计内容与设计要求

1.设计内容:

1)问题描述

大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。

2)基本要求

a.输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

b.允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

3)测试数据

学期总数:6;

学分上限:10;

该专业共开设课数:12

课程号:从C01到C12;

学分顺序:2,3,4,3,2,3,4,4,7,5,2,3。

先修关系如下图:

4)实现提示

可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在 1 9 4

2

12 10

11 3 6

5

7

8

该专业开设的课程序列中,则作为错误处理。应建立内部课程号与课程号之间的

对应关系。

2.设计要求:

●课程设计报告规范

1)需求分析

a.程序的功能。

b.输入输出的要求。

2)概要设计

a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块

的功能。

b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的

结构,它们之间有什么关系等。

3)详细设计

a.采用C语言定义相关的数据类型。

b.写出各模块的类C码算法。

c.画出各函数的调用关系图、主要函数的流程图。

4)调试分析以及设计体会

a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和

含有错误的输入及输出结果。

b.程序调试中遇到的问题以及解决问题的方法。

c.课程设计过程经验教训、心得体会。

5)使用说明

用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。

6)书写格式

见附带说明。

7)附录

a.参考书目

b.源程序清单(带注释)

●考核方式

指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:

①平时出勤(占10%)

②系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)

③程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)

④设计报告(占30%)

注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。

⑤独立完成情况(占10%)。

课程验收要求

①运行所设计的系统。

②回答有关问题。

③提交课程设计报告。

④提交电子文档(源程序、设计报告文档)。

⑤依内容的创新程度,完善程序情况及对程序讲解情况打分。

二、进度安排

16周:星期一下午14:00-18:00

16周:星期二下午14:00-18:00

16周:星期三下午14:00-18:00

附:

课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。

正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。

正文总字数要求在5000字以上(不含程序原代码)。

目录

1、需求分析 (1)

1.1程序的功能: (1)

1.2输入输出的要求: (1)

2、概要设计 (1)

2.1程序模块功能图 (1)

2.2数据结构 (2)

3、详细设计 (3)

3.1采用C语言定义相关的数据类型 (3)

3.2各模块的类C码算法 (3)

3.3各函数的调用关系图、主要函数的流程图 (9)

4、调试分析以及设计体会 (11)

4.1测试数据: (11)

4.2程序调试中遇到的问题以及解决问题的方法: (12)

4.3课程设计过程经验教训、心得体会: (12)

5、使用说明 (13)

6.参考书目 (19)

7、附录 (20)

7.1.源程序清单(带注释) (19)

1、需求分析

1.1程序的功能:

编制教学计划。大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。

1.2输入输出的要求:

a.输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

b.允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

c.若根据给定的条件问题无解,则报告适当的信息;否则,将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

2、概要设计

2.1程序模块功能图

图2.1-1 功能模块图

2.2数据结构

int termtime=0; //学期总数

int limitgrade=0; //学分上线

char str[100][4]; //课程号

int score[100]={0}; //课程学分

int totalcourse=0; //课程总数

struct node //课程节点

{

int variable; //标志属不属于同一个学期所修

int previous; //前修课程

int next; //后学课程

struct node * courselink[100]; //后修课程的指针

}* coursenode[100]={NULL}; //课程数目节点

main()

主函数

initialNod e() 初始化课程节点 createNode () 建立课程顺序 sortNode() 课程 inputBasic

Informatio

n()

输入基本信

cls() 清空信息 menu() 主菜单

3、详细设计

3.1采用C语言定义相关的数据类型

FILE *fp //保存到文件

int termtime=0; //学期总数

int limitgrade=0; //学分上线

char str[100][4]; //课程号

int score[100]={0}; //课程学分

int totalcourse=0; //课程总数

struct node //课程节点

{

int variable; //标志属不属于同一个学期所修

int previous; //前修课程

int next; //后学课程

struct node * courselink[100]; //后修课程的指针}* coursenode[100]={NULL}; //课程数目节点

3.2各模块的类C码算法

A. 初始化课程节点

void initialNode() //初始化课程节点

{

int i;

int j;

printf("\n正在初始化。。。。。。。\n");

for(i=0;i<100;i++)

{

后修课程的指针置零;

同学期学习的课程置零;

前修课程置零;

后修课程置零;

for(j=0;j<100;j++)

coursenode[i]->courselink[j]=NULL;

}

printf("\n初始化完毕。。。。。。。\n");

}

B. 建立课程顺序

void createNode() //建立课程顺序

{

int i;

int temp;

int flag;

for(i=0;i

{

printf("\n请输入%d的深入课程数目:",i+1);

scanf("%d",&(coursenode[i]->next));

printf("\n请输入%d的深入课程课程代号分别是什么(用空格分开):",i+1);

for(temp=0;tempnext;temp++)

{

scanf("%d",&flag);

coursenode[i]->courselink[temp]=coursenode[flag-1];

coursenode[flag-1]->previous++;

}

}

printf("\n课程代号\t前修课程数\t深入课程数\n");

for(temp=0;temp

{

printf("%d\t\t%d\t\t%d\n",temp+1,coursenode[temp]->previous,coursenode[temp]->next);

}

}

C.排课程

void sortNode() //排课程

{

int i,j,flag=0,session=1;

FILE *fp;

if((fp=fopen("d:\\course.txt","a"))==NULL) //如果文件已经存在,可以追加学生信息{

if((fp=fopen("d:\\course.txt","w"))==NULL) // 文件不存在时,创建新文件,输入学生信息

{

printf("文件打开失败!\n");

return;

}

}

printf("\n-----------------------------\n");

printf("课程代号\t课程号\t课程学分\n");

fprintf(fp,"课程代号\t课程号\t课程学分\n");

while(1)

{

flag=1;

for(i=0;i

if(课程数目节点为空)

if(同学期学习课程为空)

if(前修课程为0)

{

printf("%d\t\t%s\t%d\n",i+1,str[i],score[i]);

fprintf(fp,"%d\t%s\t%d\n",i+1,str[i],score[i]);

for(j=0;jnext;j++)

{

前修课程数目节点减一;

coursenode[i]->courselink[j]->variable=1;

coursenode[i]->courselink[j]=NULL;

}

coursenode[i]->next=0;

释放数目结点;

flag=0;

}

if(flag!=0)break;

else

{

if(session<=termtime)

{ printf("第%d学期课程结束\n------------------------------------\n",session);

fprintf(fp,"第%d学期课程结束\n------------------------------------\n",session) ;

session++;}

else

{

printf("学习时间不够!!!\n");

exit(0);

}if(session<=termtime);

}

for(i=0;i

if(课程节目数不为O)

coursenode[i]->variable=0;

}

fclose(fp); //关闭文件指针

}

D,输入基本信息

void inputBasicInformation() //输入基本信息

{

int i;

printf("请输入学期总数:");

scanf("%d",&termtime);

if(termtime>=12)

{

printf("\n对不起,学期总数不能超过12\n");

exit(0);

}

printf("\n请输入学分上限:");

scanf("%d",&limitgrade);

printf("\n请输入课程总数:");

scanf("%d",&totalcourse);

for(i=0;i

printf("请输入第%d门课程号(三个字符,回车结束):",i+1);

scanf("%s",&str[i]);

str[i][3]='\0';

printf("请输入第%d门课程学分(回车结束):",i+1);

scanf("%d",&score[i]);

if(学分高于上限)

{

printf("\n对不起,课程学分不能超过学分上限\n");

exit(0);

}

}

printf("\n您所输入的数据如下,请核实:\n");

printf("课程代号\t课程号\t课程学分\n");

for(i=0;i

{

printf("%d\t\t%s\t%d\n",i+1,str[i],score[i]);

}

}

E.清空信息

void cls()

{

int i=0;

学期数置零;

学分上限置零;

for(i=0;i<100;i++)

{

str[i][0]='\0';

score[100]=0;

}

总课程数置零;

printf("\n原来数据已经清空\n");

}

F.菜单

void menu()

{

printf(" ************************* 教学计划编制

************************\n ");

printf("\n 1 输入课程安排基本信息");

printf("\n 2 建立课程顺序");

printf("\n 3 排列课程顺序");

printf("\n 4 原来数据清空");

printf("\n 5 退出");

}

G.主函数

void main()

{

int n;

initialNode();

while(1)

{

menu();

printf("\n 请输入您要选择的操作序号,按回车键确认:");

scanf("%d",&n);

switch(n)

{

case 1: inputBasicInformation();;break;

case 2: createNode();;break;

case 3: sortNode();;break;

case 4: cls();break;

case 5: exit(0);

default: printf("输入错误,请输入列表中存在的序号!\n ");

}

}

}

3.3各函数的调用关系图、主要函数的流程图

图2.3-1 流程图 开始

设辅助数组indegree 记录图的各顶点的入度值,并

将indegree 数组各变量赋初值。

输入图的顶点数、边数

建立一个栈,存储图的

顶点的序号

用邻接表法建图,并计算出

indegree 数组中各变量值

根据indegree 数组将入度

为0的顶点入栈

count 对输出顶点计数

0=>count

栈不空

删除栈顶元素,赋给i count++

将与第i 个顶点链接的各顶点入度减1

输出第i 个顶点值 顶点入度为0 顶点序号入栈

count

输出“拓扑

排序成功” 输出“拓扑排

序不成功” 结束

4、调试分析以及设计体会

4.1测试数据:

学期总数:6;

学分上限:10;

该专业共开设课数:12

课程号:从C01到C12;

学分顺序:2,3,4,3,2,3,4,4,7,5,2,3。

先修关系如下图:

图4.1-1 测试数据先修关系图

正确输入测试数据后,如果系统符合要求,正确排序,则如图4.1-2所示。 1 9 4

2

12 10

11 3 6

5

7

8

图4.1-2 正确的测试结果

4.2程序调试中遇到的问题以及解决问题的方法:

程序十分的复杂,遇到了很多常见的语法错误,及逻辑错误。这需要我们不断的调试分析。符号的格式之类,指针的用法,判断输入输出的条件都是十分容易出错的地方。在逐条排除,向同学老师请教后,程序终于得以完成。

4.3课程设计过程经验教训、心得体会:

经过此次课程设计,我们认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。在实践中,我们总会出现许多错误。这就要求我们以一个脚踏实地的态度来处理问题。我们深刻地认识到自己写程序的不足,使我们学到了好多有用的知识,让我们明白了C语言的语句用法。

上机实践是学生对本门课程所学知识的一种全面、综合的能力训练,是与课堂听讲、自学和练习相辅相成必不可少的一个教学环节,也是对课堂教学效果的一种检验。通常,实习题中的问题比平时的习题复杂得多,也更接近实际。实习题注重原理与应用的结合,目的让学生学会如何把书上学到的知识运用于解决实际问题的过程中去,培养从事软件开发设计工作所必需的基本技能。同时,通过

实践能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的作用。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,可以多人合作,有利于一整套软件工程规范的训练和科学作风的培养。此外,实践环节中有很重要的一点,就是机器是比任何教师都严格的主考官。

经过此次课程设计,我认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。在实践中,我们总会出现许多错误。这就要求我们以一个脚踏实地的态度来处理问题。我深刻地认识到自己写程序的不足,使我们学到了好多有用的知识,让我们明白了C语言的语句用法。

5、使用说明

使用VC++,打开schedule.c文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。显示如图5-1:

图5-1 程序编译正确

要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。如图5-2所示。

数据结构1--3章

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。 2. 算法的时间复杂度取决于() 3.计算机算法指的是(),它必须具备()这三个特性。 4.一个算法应该是()。 5. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是() (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。 A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()? A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串

10.以下那一个术语与数据的存储结构无关?() A.栈 B. 哈希表 C. 线索树 D. 双向链表11.在下面的程序段中,对x的赋值语句的频度为() FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中 n为正整数,则最后一行的语句频度在最坏情况下是() A. O(n) B. O(nlogn) C. O(n3) D. O(n2) 13.以下哪个数据结构不是多型数据类型() A.栈 B.广义表 C.有向图 D.字符串 14.以下数据结构中,()是非线性数据结构 A.树 B.字符串 C.队 D.栈 15. 下列数据中,()是非线性数据结构。 A.栈 B. 队列 C. 完全二叉树 D. 堆 16.连续存储设计时,存储单元的地址()。 A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续17.以下属于逻辑结构的是()。 A.顺序表 B. 哈希表 C.有序表 D. 单链表 二、判断题

数据结构试卷1(含答案)

数据结构试卷 一、单项选择题(本大题 共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1 . 下列选项中与数据存储结构无关的术语是() A.顺序表 B.链表 C. 链队列 D.栈 2 . 将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是() A.n-1 B.n C.2n-1 D.2n 3 . 已知循环队列的存储空间大小为m,队头指针front指向队头元素,队尾指针rear 指向 队尾元素的下一个位置,则向队列中插入新元素时,修改指针的操作是() A.rear=(rear-1)%m; B.front=(front+1)%m; C.front=(front-1)%m; D.rear=(rear+1)%m; 4 . 递归实现或函数调用时,处理参数及返回地址,应采用的数据结构是() A.堆栈 B.多维数组 C. 队列 D. 线性表 5 . 设有两个串p和q,其中q是p的子串,则求q在p中首次出现位置的算法称为()A.求子串 B.串联接 C.串匹配D.求串长 6 . 对于广义表A,若head(A)等于tail(A),则表A为() A.() B.(()) C.((),()) D.((),(), ()) 7.若一棵具有n(n>0)个结点的二叉树的先序序列与后序序列正好相反,则该二叉树一 定是() A.结点均无左孩子的二叉树 B.结点均无右孩子的二叉树 C.高度为n的二叉树 D.存在度为2的结点的二叉树 8.若一棵二叉树中度 为l的结点个数是3,度为2 的结点个数是4,则该二叉树叶子结点的个数是() A.4 B.5 C.7 D.8 9. 某算法有3 个程序段,第一程序段的执行次数为错误!未找到引用源。,第二个程序段执 行次数为4n,第三个程序段的执行次数 为0.06错误!未找到引用源。,则该算法的时间复 杂度为()。 A.O(n)B .O(错误!未找到引用源。) C .O(错误!未找到引用源。)D.O (错误!未找到引用源。) 10.已知有向图G=(V,E),其中V={V1,V2,V3,V4},E={},图G的拓扑序列是() A.V1,V2,V3,V4 B.V1,V3,V2,V4 C.V1,V3,V4,V2 D.V1,V2,V4,V3 11.平均时间复杂度为O(nlogn)的稳定排序算法是() A.快速排序 B.堆排序 C.归并排序 D.冒泡排序 12.已知关键字序列为(51,22,83,46,75,18,68,30),对其进行快速排序,第一趟划分完成后的关键字序列是() A.(18,22,30,46,51,68,75,83) B.(30,18,22,46,51,75,83,68)

数据结构课程设计报告(完整版)[1]

第二题:电梯模拟 1、需求分析: 模拟某校九层教学楼的电梯系统。该楼有一个自动电梯,能在每层停留。九个楼层由下至上依次称为地下层、第一层、第二层、……第八层,其中第一层是大楼的进出层,即是电梯的“本垒层”,电梯“空闲”时,将来到该层候命。 乘客可随机地进出于任何层。对每个人来说,他有一个能容忍的最长等待时间,一旦等候电梯时间过长,他将放弃。 模拟时钟从0开始,时间单位为0.1秒。人和电梯的各种动作均要消耗一定的时间单位(简记为t),比如:有人进出时,电梯每隔40t测试一次,若无人进出,则关门;关门和开门各需要20t;每个人进出电梯均需要25t;如果电梯在某层静止时间超过300t,则驶回1层侯命。 而题目的最终要求输出时: 按时序显示系统状态的变化过程,即发生的全部人和电梯的动作序列。 2、设计 2.1设计思想: (1)数据结构设计 本题中的电梯的变化,是一个动态变化的过程,要在动态过程中实现 正常跳转,首先要确定各种跳转的状态,因而这里我使用枚举类型来 表示电梯的各种状态的: enum {up,down,stop,home}State(home); 同时初始化最初状态为电梯在本垒层。而在电梯的运行过程中对于乘 客来说,显然有一个进入电梯与出电梯的队列,因而在这里我是用的 链表来实现这个过程的,同时用结构体来保存该乘客的信息: typedef struct passage { int now;//乘客当前所在的位置 int dis;//乘客的目地地 int wait;//最长的等待的时间 int waitnow;//已经等待的时间 struct passage *next; }Passage; 虽然电梯中的状态是由枚举类型来实现的,但是在整个程序的运行过 程中,我还是为电梯设置了一个结构体类型,以便保存更多的信息: typedef struct lift { int count_C;//计数电梯已到达的层数 int count_A;//系统的总时间计数器记得必须初始化为0 int flag_in[High];//九个楼层有无请求的标志哪个楼层如果有请 求该标志置1 int num;//等待队列中的人数记得要进行初始化为0 int people;//电梯中人数

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构--图重点

一、定义与术语 图:无序数据结构 基本构成:1.边集(Edge ):a. 有向图,有向边,弧,弧头,弧尾,权值 b. 无向图,无向边(v, w),权值 2.顶点集(Vertices ):a. 无向图:度(TD(v)) b. 有向图:出度(ID(v)),入度(OD(v)),度(TD(v) = ID(v) + OD(v)) 无向完全图:n 个顶点,(1)2 n n -条边 有向完全图:n 个顶点,(1)n n -条边 网:带权图 连通分量:无向图中的极大连通子图(多个),无向完全图的连通分量就是本身(一个) 强连通分量:有向图中的极大连通子图,其中i v 到j v 以及j v 到i v 都有路径 生成树:图的极小连通子图,含有图的全部n 个顶点,只有n-1条边,少一条则不能连通, 多一条则形成回路 生成森林:不完全图中的各个连通分量的生成树,构成图的生成森林 二、存储结构 顶点:可采用链表或数组存储顶点列表,一般采用链表存储 边:1. 邻接矩阵(数组) a. 无向图:对称阵,可采用矩阵压缩存储方式。A[i][j] = 0表示i v 和j v 没有连接; A[i][j] = 1表示i v 和j v 有边连接;第i 行的和表示顶点i v 的度 b. 有向图:不对称阵。,[][]i j A i j w =表示顶点i v 到j v 的有向弧的权值;[][]A i j =∞ 表示表示顶点i v 到j v 没有弧连接或者i = j 2. 邻接表(链表,有向无向都可用) 边结点:adjvex (邻接点),nextarc (下一条边),info (权值) 顶点结点:data (顶点数据),firstarc (第一条边) 3. 十字链表(Othogonal List ) 弧结点:tailvex (弧尾结点),headvex (弧头结点),tlink (弧尾相同的下一条弧),hlink (弧头相同的下一条弧),info (权值) 顶点结点:data (顶点数据),firstin (第一条入弧),firstout (第一条出弧) 三、图的遍历(每个顶点只被访问一次) 1. 深度优先遍历(类似树的先根遍历) 基本思想:假设初始状态是图中所有顶点未曾被访问,则深度优先搜索可从图中某个顶 点v 出发,访问此结点,然后依次从v 的未被访问的邻接点出发深度优先遍 历图,直至图中所有和v 有路径相通的顶点都被访问到;若此时图中尚有顶 点未被访问(非连通图),则另选图中一个未曾被访问的顶点作起始点,重 复上述过程,直至图中所有顶点都被访问到为止。

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构-图习题

第8章 图 8-1 画出1个顶点、2个顶点、3个顶点、4个顶点和5个顶点的无向完全图。试证明在n 个顶点的无向完全图中,边的条数为n(n-1)/2。 【解答】 【证明】 在有n 个顶点的无向完全图中,每一个顶点都有一条边与其它某一顶点相连,所以每一个顶点有 n-1条边与其他n-1个顶点相连,总计n 个顶点有n(n-1)条边。但在无向图中,顶点i 到顶点j 与顶点j 到顶点i 是同一条边,所以总共有n(n-1)/2条边。 8-2 右边的有向图是强连通的吗?请列出所有的简单路径。 【解答】 点,它不是强连通的有向图。各个顶点自成强连通分量。 所谓简单路径是指该路径上没有重复的顶点。 从顶点A 出发,到其他的各个顶点的简单路径有A →B ,A →D →B ,A →B →C ,A →D →B →C ,A →D ,A →B →E ,A →D →E ,A →D →B →E ,A →B →C →F →E ,A →D →B →C →F →E ,A →B →C →F ,A 1个顶点的 无向完全图 2个顶点的 无向完全图 3个顶点的 无向完全图 4个顶点的 无向完全图 5个顶点的 无向完全图 A D

????????? ?????? ?????=01 00000001001010000 010*********Edge →D →B →C →F 。 从顶点B 出发,到其他各个顶点的简单路径有B →C ,B →C →F ,B →E ,B →C →F →E 。 从顶点C 出发,到其他各个顶点的简单路径有C →F ,C →F →E 。 从顶点D 出发,到其他各个顶点的简单路径有D →B ,D →B →C ,D →B →C →F ,D →E ,D →B →E ,D →B →C →F →E 。 从顶点E 出发,到其他各个顶点的简单路径无。 从顶点F 出发,到其他各个顶点的简单路径有F →E 。 8-3 给出右图的邻接矩阵、邻接表和邻接多重表表示。 【解答】 (1) 邻接矩阵 A D

数据结构(1)

一.填空题 1. _集合__、线性结构、__树形结构____ 、图形结构 2.p->next!=NULL 3.时间复杂度和空间复杂度 4.随机存取 5..队尾 6. n-1 二、单选题、 1-5DAACC 6-10DBDDB 11-15DCABD 三,简答题 1、

2、数据是对客观事物的描述形式和编码形式的统称,是算法和程序的处理对象和计算结构。数据元素又称数据结点,简称结点,通常一个数据结点由用来描述一个独立事的名称、数量、特性、性质的一组相关信息。多数情况下,一个结点包含有多个数据项,每个数据项是结点的一个域,能够用来唯一标识结点的域称为关键字域。 算法:有穷规则的集合,而规则规定了解决某一特定问题的运算序列。 有穷性:必须在执行有穷步后终止。 确定性:每一步必须具有确定的定义,不能含糊不清,不带二义性。 可行性:所有运算都可以精确地实现。 输出数据:必须有输出数据,包括输出某种动作或控制信号。 输入数据:作为执行前的初始量。不是必须。 算法有两种表现形式:描述形式和程序形式。 计算时间复杂的的方法: ?支配性语句度量法:在一段程序中,往往有一条语句执行次数最多,话费时间也就是最多,其他语句执行次数的和将不超过这套语句执行次数的常数倍,那么就称这条语句在话费时间上是起支配性作用的典型语句,于是可选这条语句的执行次数作为度量这段程序花费时间的阶。 ? 四、应用题

1、 2、、对给定的n个权值bai{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,...,Tn},其中du每棵二叉树Ti中只有一个权值zhi为Wi的根结点, 它的左右子树均为空。(为方便在计算机上实现算法,一般还要求以Ti的权值Wi的 升序排列。)二、在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。三、从F中删除这 两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。四、重复二和三两步,直到集合F中只有一棵二叉树为止。 树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL WPL=∑Wi*Li (i=1到n) WPL=(2+4)*3+(6+8+10)*2 =66

数据结构期末复习资料[1]

第一章 1、数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。 数据结构(Data Structure):相互之间存在一种或多种特定关系的数据元素的集合。 2、数据结构的形式定义:二元组Data_Structure=(D,S) 其中,D 是数据元素的有限集,S 是D 上关系的有限集。 3、数据元素之间关系的映像:1、顺序映像(顺序存储结构):以相对的存储位置表示后继关系。 2、非顺序映像(链式存储结构):借助指针元素存储地址的指针表示数据元素之间的逻辑关系。 任何一个算法的设计取决于数据(逻辑)结构,其实现取决于物理结构。 4、 算法的定义:对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。 特性:有穷性、确定性、可行性、输入、输出 5、 算法的评价——衡量算法优劣的标准 正确性(correctness):满足具体问题的需求 可读性(readability):易读、易理解 健壮性(robustness):当输入数据非法时,算法能够做出反应或进行处理 效率与低存储量:执行时间短、存储空间小 作业的答案:试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 第二章 1、线性表是一种最简单的线性结构。 线性结构 是一个数据元素的有序(次序)关系 特点:存在唯一的一个“第一个”的数据元素;存在唯一的一个“最后一个”的数据元素;除第一个数据元素外,均有唯一的前驱;除最后一个数据元素外,均有唯一的后继 2、线性表类型的实现——顺序映像 定义:用一组地址连续的存储单元依次存放线性表中的数据元素。 ? 以“存储位置相邻”表示有序对,则有:LOC (ai ) = LOC (ai -1) + l 其中l 是一个数据元素所占存储 量 LOC (ai ) = LOC (a 1) + (i -1)×l ? 特点:1、实现逻辑上相邻—物理地址相邻2、实现随机存取 3、若假定在线性表中任何一个位置上进行插入的概率都是相等的,则移动元素的期望值为: ∑+=+-+=1 1 )1(11n i is i n n E 2 n = 若假定在线性表中任何一个位置上进行删除的概率都是相等的,则移动元素的期望值为: ∑=-=n i dl i n n E 1)(12 1-=n 4、 线性表类型的实现——链式映像 线性链表 特点:用一组地址任意的存储单元存放线性表中的数据元素。 5、在单链表中第 i 个结点之前进行插入的基本操作为:找到线性表中第i-1个结点,然后修改其指向后继的指针。 s = (LinkList) malloc ( sizeof (LNode)); // 生成新结点 s->data = e; s->next = p->next; p->next = s; // 插入 在单链表中删除第 i 个结点的基本操作为:找到线性表中第i-1个结点,修改其指向后继的指针。 q = p->next; p->next = q->next; e = q->data; free(q); 5、 循环链表:最后一个结点的指针域的指针又指回第一个结点的链表。 和单链表的差别仅在于: 判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。 6、 双向链表的操作特点:1、“查询” 和单链表相同;2、“插入” 和“删除”时需要同时修改两个方向上的指针 “插入”:s->next = p->next; p->next = s; s->next->prior = s; s->prior = p;(s 是插入的结点) 删除:p->next = p->next->next; p->next->prior = p;(要删除的是p 的下一个结点) 课后作业 P13: 2.3、2.5 P15: 2.8、2.9(2) 第三章

数据结构实验1报告 G计算机141-韩坚

淮海工学院计算机工程学院实验报告书 课程名:数据结构 题目:线性数据实验 班级:G计算机141 学号:2014150230 姓名:韩坚

一、目的与要求 1)掌握线性表的顺序存储结构和链式存储结构; 2)熟练掌握顺序表和链表基本算法的实现; 3)掌握利用线性表数据结构解决实际问题的方法和基本技巧; 4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果); 5)按时提交实验报告。 实验环境 计算机、C语言程序设计环境 实验学时 2学时,必做实验。 二、实验内容或题目 一、顺序表的基本操作实现实验 要求:数据元素类型ElemType取整型int。按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出): 1)创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在25之内; 2)打印(遍历)该线性表(依次打印出表中元素值); 3)在线性表中查找第i个元素,并返回其值; 4)在线性表中第i个元素之前插入一已知元素; 5)在线性表中删除第i个元素; 6)求线性表中所有元素值(整数)之和; 二、链表(带头结点)基本操作实验 要求:数据元素类型ElemType取字符型char。按照动态单循环链表结构实现如下算法(各算法边界条件适当给出): 1)创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内; 2)打印(遍历)该链表(依次打印出表中元素值); 3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE; 4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE; 5)在链表中按照有序方式插入一已知字符元素; 6)在线性表中删除第i个结点; 7)计算链表的长度。 三、实验步骤与源程序 一、顺序表的源程序 #include "stdafx.h" #include "stdio.h"

数据结构分析报告

银行自动取款系统 一、目的 根据所学知识,编写指定题目的C语言程序,并规范地完成课程设计报告。通过课程设计,加深对《C语言程序设计》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用(时间函数、绘图函数以及文件的读写操作函数等);复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等)。 学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 二需求分析 根据任务书里的“课程设计的基本要求”及给定的“课程设计的主要内容”。编写的银行自动提款模拟系统由使用者担当银行卡使用者自行输入卡号模拟银行卡使用系统进行各项操作,该系统有简便、稳定等特点。 该系统开始时有使用者自行初始化各项数据,包括卡的数量,一天内可操作次数上相及“银行卡”的卡号和余额,使用者可根据不同情况对系统的各项内容进行初始化,方便、快捷。 当使用者输入错误数据及操作次数达到上限时系统会自动退出或者给出相应的恢复提示使用者重新操作,直到输入正确,系统不会出现异常、突然崩溃,稳定。 1、所实现的功能: ①.系统能够让使用者自行输入卡的数量及每天操作次数上限,然后初始化卡的卡号和卡上所拥有的余额; ②.初始化信息后,可以开始使用系统进行存取款,输入卡号,如果卡号为负责退出程序、卡号不存在则提示重新输入直到输入正确为止,如果此卡的操作次数已达上限则同样退出程序; ③.输入正确后可以输入想要存取款数目,当数目为正是存款,负数为取款; ④.正确存取款后,系统会自行输出操作、卡上余额和剩下操作次数到屏幕,然后返回选择菜单,使用者可以再进行选择进行操作。 2、测试预测 ①.进行测试,每个编写的函数逐个进行调试直到都能够正常运行; ②.在进行存取款操作都,所对应卡的操作次数应加一,余额能够进行相应的改变; ③.程序的各项运作结果与预想的与一样。 三概要设计 程序的主要功能函数包括如下几个部分:

数据结构图习题

第七章图:习题 习题 一、选择题 1.设完全无向图的顶点个数为n,则该图有( )条边。 A. n-l B. n(n-l)/2 C.n(n+l)/2 D. n(n-l) 2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。 A.3 B.2 C.1 D.1/2 3.有向图的一个顶点的度为该顶点的( )。 A.入度 B. 出度 C.入度与出度之和 D.(入度+出度)/2 4.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。 A.强连通图 B.连通图 C.非连通图 D.非强连通图 5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。 A.上三角矩阵 B.稀疏矩阵 C.对角矩阵 D.对称矩阵 6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵 A.第i列元素之和 B.第i行元素之和减去第i列元素之和 C.第i行元素之和 D.第i行元素之和加上第i列元素之和 7.对于具有e条边的无向图,它的邻接表中有( )个边结点。 A.e-l B.e C.2(e-l) D. 2e 8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。 A. O(n2) B. O(n*e) C. O(n*logn) D.O(e) 9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( ) A.n B.n+l C.n-l D.n+e 10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。 A.最小 B.任何 C.广度优先 D.深度优先 二、填空题 1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。 2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。 3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。 4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。 5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。 6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。 7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。 8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。

数据结构1

习题练习第一章绪论 1、void maxtrixmult (int n,int a[][100],int b[][100],intc[][100]) { int j,k,r; int x; for(r=0;r<=n;r++) 1) n+2 { for (j=0;j<=n;j++) 2) (n+1)*(n+2) { x=0; 3) (n+1)2 for(k=1;k<=n;k++) 4) (n+1)3 x+=a[r][k]*[k][j]; 5) n* (n+1)2 c[r][j]=x; 6) (n+1)2 } } } 计算时间每条语句的频度和该算法的时间复杂度 2.一个算法应该是( B )。【中山大学 1998 二、1(2分)】 A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 4.从逻辑上可以把数据结构分为( C )两大类。【武汉交通科技大学 1996 一、4(2分)】 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 5.以下与数据的存储结构无关的术语是( D )。【北方交通大学 2000 二、1 (2分)】 A.循环队列 B. 链表 C. 哈希表 D. 栈 6.连续存储设计时,存储单元的地址( A )。【中山大学 1999 一、1(1分)】A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续 7. 数据元素是数据的最小单位。( F ) 【北京邮电大学 1998 一、1(2分)】【青岛大学 2000 一、1 (1分)】 【上海交通大学 1998 一、1】【山东师范大学 2001 一、1 (2分)】 第二章线性表 1.线性表是具有n个( C )的有限序列(n>0)。【清华大学 1998 一、 4(2分)】 A.表元素 B.字符 C.数据元素 D.数据项 E.信 息项

数据结构实验一实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表 L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL;

数据结构无向图

#include #include #define INFINITY 100000 //最大值∞ #define MAX_VERTEX_NUM 20 //最大顶点个数 typedef struct mygraph{ char vexs[MAX_VERTEX_NUM]; //顶点向量 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 int vexnum, arcnum; //图的当前顶点和弧数 }MGraph; typedef struct myedge{ int adjvex; int endvex; int lowcost; } closedge[MAX_VERTEX_NUM]; void CreateUDN(MGraph &G) ; //创建无向网络 int LocateVex(MGraph G, char v); //结点的在顶点向量中的下标 void PrintUDN(MGraph G); //输出存储结构示意图 void MiniSpanTree_PRIM(MGraph G,closedge &minedge);//求最小生成树的算法void PrintMinEdge(MGraph G,closedge minedge); //输出最小生成树的边 int main() { MGraph G;//定义一个图的变量 closedge minedge; CreateUDN(G); printf("该图的邻接矩阵存储示意图如下:\n"); PrintUDN(G); printf("\n"); MiniSpanTree_PRIM(G,minedge); printf("该图生成树的边如下:\n"); PrintMinEdge(G,minedge); printf("\n"); return 0; } void CreateUDN(MGraph &G) { int i,j,k,m; char v1,v2; char ch;

数据结构实验一 实验报告

班级:姓名:学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL;

数据结构--图的应用及其实现

实验六图的应用及其实现 (相关知识点:拓扑排序、关键路径、最小生成树和最短路径) 一、实验目的 1.进一步功固图常用的存储结构。 2.熟练掌握在图的邻接表实现图的基本操作。 3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。 二、实验内容 一>.基础题目:(本类题目属于验证性的,要求学生独立完成) [题目一]:从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。 测试数据:教材图7.28 [题目二]:从键盘上输入AOE网的顶点和有向边的信息,建立其邻接表存储结构,输出其关键路径和关键路径长度。试设计程序实现上述AOE网类型定义和基本操作,完成上述功能。 测试数据:教材图7.29 二>.简单应用题目:(ACM/ICPC训练题,本类题目属于设计性的,要求学生三人为一个团队,分工协作完成)) 【题目三】高速公路 描述 某国共有n个城市(n不超过200),有些城市之间直接有一条高速公路相连,高速公路都是双向的,总共有m条。每条高速公路都有自己的载重限制,即载重最大值。通过车辆的载重不能超过公路的载重限制。如今我们想了解的是,从某一起点城市出发,到达目标城市,车辆最多能带多重的货物。 输入 输入的第一行为两个整数n和m。以下有m行,每行三个整数描述一条公路,分别是首尾相连的城市以及载重限制。然后是一个整数k,即问题个数。接下来k行描述k个问题,每行两个整数表示起点城市和目标城市。问题数不超过一百。 输出

输出包括k行,每行对应一个问题,输出从起点到目标的最大载重量。如果两城市间无路径则输出-1。 样例输入 3 3 1 2 100 2 3 100 1 3 50 2 1 3 2 3 样例输出 100 100 【题目四】最短的旅程 描述 在Byteland有n个城市(编号从1到n),它们之间通过双向的道路相连。Byteland 的国王并不大方,所以,那里只有n -1条道路,但是,它们的连接方式使得从任意城市都可以走到其他的任何城市。 一天,starhder到了编号为k的城市。他计划从城市k开始,游遍城市m1,m2,m3……,mj(不一定要按这个顺序旅游)。每个城市mi都是不同的,并且,也与k不同。Starhder ——就像每一个旅行家一样,携带的钱总是有限的,所以,他要以最短的路程旅行完所有的城市(从城市k开始)。于是,他请你帮助计算一下,旅游完上述的城市最短需要多少路程。 输入

数据结构1

1.1 请说明算法具有哪些特性,各是什么含义? 算法的一般性质包括:(1)通用性对于那些符合输入类型的任意输入数据,都能根据算法进行问题求解,包保证计算结构的正确性.(2)有效性组成算法的每一条指令都必须是能够被人或机器确切执行的.(3)确定性算法每执行一步之后,对于它的下一步,应该有明确的指示.即,保证每一步之后都有关于下一步动作的指令,不能缺乏下一步指令或仅仅含有模糊不清的指令.(4)有穷性算法的执行必须在有限步内结束. 1.2简述下列术语:数据、数据元素、数据对象、数据结构、存储结构、数据类 型和抽象数据类型。 数据:指所有能够输入到计算机中并被计算机程序处理的符号集合。数据元素(data element):数据集合中的一个实体,是计算机程序中加工处理的基本单位。例如:一条学生记录(包括学号、姓名、年龄等)就是一个数据元素数据对象(data object):性质相同的数据元素的集合。是数据的一个子集。数据结构(data structure):相互之间存在一种或多种关系的数据元素的集合。即包括数据元素的集合和数据元素之间的关系的集合。存储结构:数据结构在计算机中的表示(也称映像)叫做物理结构。又称为存储结构。数据类型(data type):是一个“值”的集合和定义在此集合上的“一组操作”的总称。抽象数据类型(abstract data type,简称ADT):是指一个数学模型以及定义在此数学模型上的一组操作。1.3设n为正整数。试确定下列各程序段中前置以记号@的语句频度: (1) x=n; y=0; //n为不小于1的常数 while (x>=(y+1)*(y+1)) { @ y++; } n1/2向下取整 (2) i=1; j=0; while (i+j<=n) { @ if (i>j) j++; else i++; } n 注:@语句指的是if…else语句,语句频度为j++和i++执行的次数之和。 1.4请说明下列算法的时间复杂度。 (1) void sf1 (int n) { int i, x=0; for(i=1; i

相关主题
文本预览
相关文档 最新文档