#〈数据结构〉上机实验指导

#〈数据结构〉上机实验指导
#〈数据结构〉上机实验指导

数据结构实验指导书

淮阴工学院计算机系

二OO五年九月

目录

实验一线性表及其使用 (2)

实验二栈和队列及其使用 (5)

实验三二叉树及其使用 (7)

实验四图及其使用 (9)

实验五查找 (11)

实验六排序 (13)

实验一线性表及其使用

实验目的

1.加深对线性表的结构特性的理解;

2.熟练掌握线性表的链式存储结构的描述方法及基本操作;

3.掌握线性表的链式存储结构的使用方法;

4.从时间和空间的角度对操作算法进行分析。

5.培养程序的设计能力和调试能力。

实验学时:建议2~4学时

实验内容

内容1:制作体育彩票(10选7)的选号器。

1

【说明】

1)体育彩票(10选7)的7个号可以重复;

2)建议用首尾相连的链式结构,这样可以更逼真地模拟“摇奖”过程;而每个号的“摇动”次数可用随机数来确定。

3)怎样产生随机数?可以利用C++语言中的种子函数srand( )和伪随机函数rand( )来实现。(include

a)首先,给srand(m )提供一个“种子”m,它的取值范围是从0~65535。

b)然后,调用rand( ),是伪随机数,它会根据提供给srand( )的“种子”

值返回一个随机数(在0~32767之间)。

c)根据需要多次调用rand( ),从而不断地得到新的随机数。

d)无论何时,你都可以给srand( )提供一个新的“种子”,从而进一步“随

机化”rand( )的输出结果。

例如,取m=17,则执行了srand(17)之后,再执行rand( )函数,将得到输出值94;第二次调用rand( ),会得到26,……反复调用rand( )就能产生一系列的随机数。

注意:若m不变,则rand( )的输出系列也不变,总是94,26,602,…等等。所以,建议摇号的“种子”选当前日期或时间,以保证每天的摇号值都不相同。【选做内容】实现摇奖和对奖操作。

内容2:约瑟夫(Joseph)环问题

【问题描述】

约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,从1起报到k则出圈,下一个人再从1报起,如此下去直到圈中只有一人为止。求最后剩下的人的编号。

【说明】

1)建议用循环链表存储方式。

2)问题改进:在人数n、k及起始报数人确定的情况下,最后剩下的人的编号事前是可以确定的。若每人有一个密码Ki(整数),留作其出圈后的2

报到Ki后出圈。密码Ki可用随机数产生。这样事前无法确定谁是最后一人

编写的代码:

#include

#include

typedef struct Joseph

{

int num;

int key;

struct Joseph *next;

} Joseph1;

Joseph1 *CreatList(int n)

{

Joseph1 *R,*p,*q;

int i,k;

R=p=(Joseph1*)malloc(sizeof(Joseph1));

p->next=NULL;

for(i=0;i

q=(Joseph1*)malloc(sizeof(Joseph1));

p->num=i+1;

scanf("%d",&k);

if(k<=0)

{

printf("输入信息有误!");

exit(0);

}

p->key=k;

p->next=q;

p=q;

}

q->num=n;

scanf("%d",&k);

if(k<=0)

{

printf("输入信息有误!");

exit(0);

}

q->key=k;

3

R=q;

return(R);

}

void DeleList(int n,Joseph1 *P,int m)

{

Joseph1 *q,*t;

q=P;

int i,j;

for(i=1;i

{

for(j=1;j

q=q->next;

t=q->next;

q->next=t->next;

m=t->key;

printf("删除的第%d个数是:",i);

printf("%d\n",t->num);

free(t);

}

printf("删除的最后一个数是:%d\n",q->num);

free(q);

}

void main()

{

int m,n;

Joseph1 *P;

printf("请输入参加的人数: ");

scanf("%d",&n);

if(n<=0)

{

printf("输入信息有误!");

exit(0);

}

printf("请输入初始密码: ");

scanf("%d",&m);

if(m<=0)

{

printf("输入信息有误!");

4

}

printf("请输入每个人的密码: ");

P=CreatList(n);

DeleList(n,P,m);

}

【选做内容】约瑟夫问题的改进算法。

【选做内容】

内容3:多项式的表示和相加

【问题描述】

建立多项式的链式存储表示,并设计算法实现多项式的相加。

【要求】

1)多项式采用链式存储方式。

2)相加后可将原多项式销毁,也可以保留。

【选做内容】多项式的减法、乘法及除法运算。

【问题思考】

建立的链表不带头结点和带头结点,则在操作实现上有何差异?

实验二栈和队列及其使用

实验目的

1. 加深理解栈和队列的特性;

2.能根据实际问题的需要灵活运用栈和队列;

3.了解递归算法的设计;

4.掌握栈和队列的使用方法。

实验学时:建议2~4学时

实验内容

5

内容1:算术表达式求值

【问题描述】

表达式计算是实现程序设计语言的基本问题之一,也是栈的使用的一个典型例子。设计一个程序,演示用算符优先法算术表达式求值的过程。

【基本要求】

以字符序列的形式输入语法正确且不含变量的整数表达式。利用教材中给出的算符优先关系表,实现对算术四则混合运算表达式的求值。

【实现提示】

(1)设置运算符栈和运算数栈算符优先辅助分析算符优先关系。

(2)在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应的运算。参考算法如下:

void del_blank(char *s);//删除串s中所有空格

int prior(char,char );//比较运算符的优先级0—相等,1—大于,-1—小于double value(char operate,double a,double b);//a和b进行operate运算

double calculate(char *s) //对表达式串s进行计算,并返回计算结果

{ double opnd[100],a,b; // opnd为运算数栈

char optr[100],operate; // optr为运算符栈

int top1=0,top2=0;//分别为两栈的栈顶指针

optr[0]='#';

top2++;

s[strlen(s)]='#'; //在表达式尾部加结束标志

while(*s!='#'||optr[top2-1]!='#') //当前字符为'#'且栈顶也是'#',则结束

{ if(*s>='0'&&*s<='9') //当前字符为运算对象则入opnd栈

{ opnd[top1++]=*s++-'0';

continue;

}

6

while(prior(optr[top2-1],*s)==1) //栈顶运算符优先级高则计算

{ operate=optr[top2---1];

b=opnd[top1---1];

a=opnd[top1---1];

opnd[top1++]=value(operate,a,b);//计算,结果入opnd栈}

if(*s==')'&&optr[top2-1]=='(') //左右括号配对

{ top2--;

s++;

continue;

}

if(prior(optr[top2-1],*s)==0)//当前运算符优先级高则入optr栈optr[top2++]=*s++;

}

return opnd[top1-1];

}// calculate

int prior(char t,char c)

{ //计算t和c的优先级

switch(t)

{case '+':

case '-': if(c=='+'||c=='-'||c==')'||c=='#')return 1; //t>c

else return 0; //t

case '*':

case '/': if(c=='(')return 0; //t

else return 1; //t>c

case '(': if(c==')') return -1;//相等

7

else return 0;

case '#': if(c=='#') return -1;//相等

else return 0;

}

return -2; //无此运算符

}// prior

(3)在识别出运算数的同时,实现将数字字符转换成整数形式。

(4)在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容。

(5)算法的原理见教材。

【选做内容】

(1)扩充运算符集。如乘方、赋值等运算。

(2)运算分量可以是变量。

(3)运算分量可以是多位整数或实数类型。

(4)计算器的功能和仿真界面。

内容2:航空客运订票系统

【问题描述】

航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,完成上述功能。

【基本要求】

(1)每条航线信息:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已定票的客户名单(包括姓名、定票量、舱位等级1,2或3)以及等候替补的客户名单。

(2)作为模拟系统,全部数据可以只放在内存中。

(3)系统功能:查询航线、客票预订和办理退票

【实现提示】

8

(1)已定票的客户名单可采用线性表及其链表结构存储,等候替补的客户名单可采用队列。

(2)系统每条航线信息可采用线性表及其顺序结构存储。

(3)每条航线信息结构:包括以上8个成员信息,其中已定票的客户名单成员为已定票的客户名单链表的头指针,等候替补的客户名单成员为分别指向队头和队尾的指针。

实验三二叉树及其使用

实验目的

1. 加深对二叉树的结构特性的理解;

2.熟练掌握二叉树的存储结构,特别是二叉链表结构的特点;

3.熟练掌握二叉树的遍历算法原理及实现;

4.学会编写实现二叉树的各种算法;

5.掌握二叉树的使用方法;

实验学时:建议2~4学时

实验内容

内容1:二叉树及其操作

【问题描述】

建立一棵以二叉链表结构存储的二叉树,并对其进行遍历。求该二叉树中的结点个数等操作。

【基本要求】

(1)建立二叉树的方法可以用教材中的先序方式建立,也可以根据二叉树的先序序列和中序序列来建立。

(2)对二叉树的遍历可采用递归或非递归的算法。

【实现提示】

(1)二叉链表的结点结构描述

9

typedef struct btnode{ // 定义结点类型

ElemType data; //数据域

struct btnode * lchild,* rchild; //左、右指针域/ } *bitree; // btnode

(2)可设计以下功能函数:

bitree createbitree(); //建立二叉链表

void preorder(bitree bt); //先序遍历二叉树

int sum(bitree bt); //求二叉树中的结点个数

算法可用递归或非递归实现。

建立二叉树可用以下两种算法实现:

方案1:btnode * createBT ( ) //前序建树

{ bitree T; char ch;

cin >>ch ;

if(ch==’#’) return NULL; //二叉树为空

T=new BinTNode; //申请根结点

T->data=ch;

T->lchild=createBTpre(); //创建根的左子树

T->rchild=createBTpre(); //创建根的右子树

return T;

}

方案2:btnode* createBT ( char *preorder,char *midorder)

{ //由前序preorder和中序midorder建树,返回根指针

if(strlen (preorder) ==0) return NULL; //空二叉树

T= new Node; //建立根结点

T->data=*preorder;

k=locate(midorder,*preorder); //找根在中序中的位置10

11

lmidorder=fetch(midorder,0,k); //左子树的中序 lpreorder =fetch(preorder,1,k); //左子树的前序 rmidorder=fetch(midorder,k+1); //右子树的中序 rpreorder =fetch(preorder, k+1); //右子树的前序 T->lchild=createBT (lmidorder , lpreorder);//建根的左子树 T->rchild=createBT(rmidorder , rpreorder); //建根的右子树 return T; }

int sum(bitree bt) //求二叉树中的结点个数 { if(!bt) return 0; //二叉树为空

return sum(bt->lchild) + sum(bt->rchild) +1; } 【选做内容】

(1) 对二叉树进行层次遍历算法。 (2) 求二叉树的深度、宽度等操作。

(3) 复制二叉树,交换二叉树中左右子树的问题怎么实现?

内容2:哈夫曼编码/译码器【问题描述】

设字符集为26个英文字母,其出现频度如下表所示。先建哈夫曼树,再利用此树对报文“This program is my favorite”进行编码和译码。

51 48 1 15 63 57 20 32 5 1 频度

z y x w v u t 字符

1 16

1

18

8

23

80

频度

p 21 f q

15 g r 47 h s o n m l k j 字符 57 103 32 22 13 64 186 频度

i e d c b a 空格

字符

【基本要求】

算法具有以下功能:

(1)CreateHuffmanTree:根据给定字符的出现频数,建立其哈夫曼树。

(2)Encoding:对给定的原字符串进行编码。

(4)Decoding:对给定的编码串进行译码(或解码)。

(5)ShowHuffmanTree:显示哈夫曼树

【实现提示】

(1)用户界面可设计成模拟菜单方式。

(2)原字符串及编码串可从键盘输入。

(3)生成Huffman树的步骤如下:

①由给定的n 个权值{w1, w2, …, wn}构成n棵二叉树的集合(即森

林)F = { T1, T2, …, Tn },其中每棵二叉树Ti 中只有一个带权为

wi 的根结点,其左右子树均空。

②在 F 中选取两棵根结点的权值最小的树做为左右子树构造一棵

新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根

结点的权值之和。

③在F 中删去这两棵树,同时将新得到的二叉树加入F中。

④重复②和③, 直到 F 只含一棵树为止。这棵树便是赫夫曼树。【选做内容】

(1)字符的出现频数能否从指定文件中统计而得?

(2)对指定的文件进行编码/解码。

实验四图及其使用

实验目的

1. 加深对图的结构的理解;

2. 熟练掌握图的存储结构,特别是图的邻接表结构;

3. 熟练掌握图的搜索算法原理及其实现;

12

4. 掌握图的常用的使用方法。

实验学时:建议2~4学时

实验内容

内容1:图的搜索问题

【问题描述】

设计一个程序,演示在连通的无向图上访问全部结点的操作。

【基本要求】

(1)以邻接表作为存储结构,并图进行深度优先和广度优先搜索。

(2)以用户指定的结点为起点,分别输出每种搜索方式下的结点访问序列和相应生成树的边集。

【实现提示】

(1)图的每个结点用一个编号表示(如1~n)。通过输入图的全部边来输入一个图,每个边是一个数对。

(2)数据结构描述见教材。

(3)可设计以下三个函数过程:

void createadjlist( &T);//建立图的邻接表

void desttraverse(T);//图的深度优先搜索

void besttraverse(T);//图的广度优先搜索

【选做内容】

借助栈,用非递归算法实现深度优先搜索。

内容2:教学计划编制问题

【问题描述】

教学计划中各课程之间必须满足先修关系。每门课程的先修课程是确定的,可以有任意多门,也可以没有。试在这样的前提下设计一个教学计划编制的程序。

13

【基本要求】

(1)输入数据包括:学期总数、一学期的学分上限、课程号、课程学分和直接先修课程的课程号。

(2)编排策略:使每学期的总学分数尽量均匀。

【实现提示】

可设学期总数不超过12,课程总数不超过100。

【选做内容】

产生多种不同的方案,并使方案之间的差异尽可能大。

实验五查找

实验目的

1.熟练掌握顺序表和有序表的查找方法及算法实现。

2.熟悉常用查找算法的编写。

3.理解静态查找和折半查找的关系。

4.熟练掌握二叉排序树的构造和查找方法。

5.通过上机操作,理解如何科学地组织信息存储,并选择高效的查找算法。实验学时:建议2学时

实验内容

内容1:基本查找算法

【问题描述】

设计一个程序,演示折半查找和二叉排序树查找过程。

【基本要求】

(1)建立一棵二叉排序树,采用二叉链表存储结构,并进行查找。

(2)给出一组有序数,对其进行折半查找。

【实现提示】

(1)可设计以下三个功能函数:

14

status insertbst(bitree &bt,elemtype e);

//当二叉排序树中不存在关键字等于e.key的数据元素时,插入e 并返回true searchebst(bitree bt,keytype key);

//在根指针bt所指二叉树中递归地查找关键字等于key的数据元素,若查找成功,则返回指向该数据元素结点的指针,否则返回空指针。

int Search_Bin(SSTable ST,keytype key);

//折半查找算法

(2)可设计递归算法。

【选做内容】

设计非递归算法。

内容2:哈希表设计

【问题描述】

针对某集体中的“人名”设计一个哈希表,完成相应的建表和查表程序。【基本要求】

(1)人名用汉语拼音,待填入哈希表的人名共30个。

(2)哈希函数用除留余数法构造,用线性探测再散列法处理冲突。

【实现提示】

(1)数据结构设计

人名用指向字符的指针表示,因而哈希表可设计成线性结构(即指针组)。

(2)设计以下的功能函数:

status create_hash(H);// 哈希表的建表操作

int search_hash (H ,name);//哈希表的查表操作

【选做内容】

(1)用链地址法处理冲突。

15

(2)通过分析给定人名的特点,设计出具有不(或较少)冲突的哈希函数。

实验六排序

实验目的

1.深刻理解排序的定义和各种排序方法的特点;

2.了解各种方法的排序过程及其依据的原则;

3.熟练掌握各种排序方法的时间复杂度的分析方法;

4.了解排序的过程及适用场合;

5.了解排序效果和采用算法的关系;

6.通过上机,加深对排序算法的理解.

实验学时:建议2学时

实验内容:内部排序算法比较

【问题描述】

设计一个程序,通过随机数据比较常用排序算法的关键字比较次数和关键字移动次数。

【基本要求】

(1)对以下排序算法进行比较:起泡排序、简单选择排序、直接插入排序、快速排序。

(2)用随机数进行排序;至少用5组不同数据进行比较。

(3)最后进行简单分析。

【实现提示】

在算法的适当位置插入对关键字比较次数和关键字移动次数的统计操作。【选做内容】

对不同表长作试验,观察两指标的变化情况。

16

数据结构上机实验答案

《数据结构实验指导书》答案 实验一: 1、请编写函数int fun(int *a, int *b),函数的功能是判断两个指针a和b所指存储单 元的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不为0。在主函数中输入2个整数、调用函数fun、输出结果。 #include int fun(int *a, int *b) { if (*a*(*b)>0) return(1); else return(0); } main() { int x,y; scanf("%d%d",&x,&y); if (fun(&x,&y)) printf("yes\n"); else printf("no"); } 2、计算1+2+3+……+100,要求用指针进行设计。即设计函数int fun(int *n)实现求 1+2+3+……+*n,在主函数中输入、调用、输出结果。 #include int fun(int *n) { int i,sum=0; for (i=1;i<=*n;i++) sum+=i; return(sum); } main() { int x,sum; scanf("%d",&x); printf("the sum is %d\n",fun(&x)); } 3、函数的功能是求数组a中最大数的位置(位序号)。在主函数中输入10个整数、调用函

数fun、输出结果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i*max) max=a+i; return(max-a); } main() {int a[N],maxi; input(a,N); maxi=fun(a,N); printf("\n the max position is %d\n",maxi); } 4、请编写函数fun(int *a,int n, int *odd, int *even),函数的功能是分别求出数组a 中所有奇数之和和所有偶数之和。形参n给出数组中数据的个数;利用指针odd和even分别返回奇数之和和偶数之和。在主函数中输入10个整数、调用函数fun、输出结果。 #define N 10 #include void input(int *a,int n) { int i; for (i=0;i

数据结构课程实验指导书

数据结构实验指导书 一、实验目的 《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: 1)理论艰深,方法灵活,给学习带来困难; 2)内容丰富,涉及的知识较多,学习有一定的难度; 3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度; 根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。 课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: (1)加深对课堂讲授内容的理解 实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变" 活" ,起到深化理解和灵活掌握教学内容的目的。 不少学生在解答习题尤其是算法设计时,觉得无从下手。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出

现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 (2) 培养学生软件设计的综合能力 平时的练习较偏重于如何编写功能单一的" 小" 算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。 通过实验使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 (3) 熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓" 环境" 就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行 程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。 二、实验要求 常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目: 1) 问题分析和任务定义 在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的

数据结构实验指导书(2016.03.11)

《数据结构》实验指导书 郑州轻工业学院 2016.02.20

目录 前言 (3) 实验01 顺序表的基本操作 (7) 实验02 单链表的基本操作 (19) 实验03 栈的基本操作 (32) 实验04 队列的基本操作 (35) 实验05 二叉树的基本操作 (38) 实验06 哈夫曼编码 (40) 实验07 图的两种存储和遍历 (42) 实验08 最小生成树、拓扑排序和最短路径 (46) 实验09 二叉排序树的基本操作 (48) 实验10 哈希表的生成 (50) 实验11 常用的内部排序算法 (52) 附:实验报告模板 .......... 错误!未定义书签。

前言 《数据结构》是计算机相关专业的一门核心基础课程,是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础,也是很多高校考研专业课之一。它主要介绍线性结构、树型结构、图状结构三种逻辑结构的特点和在计算机内的存储方法,并在此基础上介绍一些典型算法及其时、空效率分析。这门课程的主要任务是研究数据的逻辑关系以及这种逻辑关系在计算机中的表示、存储和运算,培养学生能够设计有效表达和简化算法的数据结构,从而提高其程序设计能力。通过学习,要求学生能够掌握各种数据结构的特点、存储表示和典型算法的设计思想及程序实现,能够根据实际问题选取合适的数据表达和存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。另外本课程的学习过程也是进行复杂程序设计的训练过程,通过算法设计和上机实践的训练,能够培养学生的数据抽象能力和程序设计能力。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写实验指导书。 一、实验目的 本课程实验主要是为了原理和应用的结合,通过实验一方面使学生更好的理解数据结构的概念

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

实验指导-数据结构B教案资料

实验指导-数据结构B

附录综合实验 1、实验目的 本课程的目标之一是使得学生学会如何从问题出发,分析数据,构造求解问题的数据结构和算法,培养学生进行较复杂程序设计的能力。本课程实践性较强,为实现课程目标,要求学生完成一定数量的上机实验。从而一方面使得学生加深对课内所学的各种数据的逻辑结构、存储表示和运算的方法等基本内容的理解,学习如何运用所学的数据结构和算法知识解决应用问题的方法;另一方面,在程序设计方法、C语言编程环境以及程序的调试和测试等方面得到必要的训练。 2、实验基本要求: 1)学习使用自顶向下的分析方法,分析问题空间中存在哪些模块,明确这些模块之间的关系。 2)使用结构化的系统设计方法,将系统中存在的各个模块合理组织成层次结构,并明确定义各个结构体。确定模块的主要数据结构和接口。 3)熟练使用C语言环境来实现或重用模块,从而实现系统的层次结构。模块的实现包括结构体的定义和函数的实现。 4)学会利用数据结构所学知识设计结构清晰的算法和程序,并会分析所设计的算法的时间和空间复杂度。 5)所有的算法和实现均使用C语言进行描述,实验结束写出实验报告。

3、实验项目与内容: 1、线性表的基本运算及多项式的算术运算 内容:实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。 要求:能够正确演示线性表的查找、插入、删除运算。实现多项式的加法和乘法运算操作。 2、二叉树的基本操作及哈夫曼编码译码系统的实现 内容:创建一棵二叉树,实现先序、中序和后序遍历一棵二叉树,计算二叉树结点个数等操作。哈夫曼编码/译码系统。 要求:能成功演示二叉树的有关运算,实现哈夫曼编码/译码的功能,运算完毕后能成功释放二叉树所有结点占用的系统内存。 3、图的基本运算及智能交通中的最佳路径选择问题 内容:在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法,实现图的深度和宽度优先遍历算法,解决智能交通中的路径选择问题。设有n 个地点,编号为0~n-1,m条路径的起点、终点和代价由用户输入提供,寻找最佳路径方案(例如花费时间最少、路径长度最短、交通费用最小等,任选其一即可)。 要求:设计主函数,测试上述运算。 4、各种内排序算法的实现及性能比较 内容:验证教材的各种内排序算法。分析各种排序算法的时间复杂度。 要求:使用随机数产生器产生较大规模数据集合,运行上述各种排序算法,使用系统时钟测量各算法所需的实际时间,并进行比较。

数据结构实验指导书

《数据结构》实验指导书 实验一顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 1、编写程序实现在线性表中找出最大的和最小的数据元素,并符合下列要求: (1)设数据元素为整数,实现线性表的顺序存储表示。 (2)从键盘输入10个数据元素,利用顺序表的基本操作建立该表。 (3)利用顺序表的基本操作,找出表中最大的和最小的数据元素(用于比较的字段为整数)。 2、编写一个程序实现在学生成绩中找出最高分和最低分,并符合下列要求: (1)数据元素为学生成绩(含姓名、成绩等字段)。 (2)要求尽可能少地修改第一题的程序来得到此题的新程序,即要符合第一题的所有要求。(这里用于比较的字段为分数) 实验二链表 实验目的: 熟悉链表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。

实验内容: 1、编写一个程序建立存放学生成绩的有序链表并实现相关操作,要求如下: (1)设学生成绩表中的数据元素由学生姓名和学生成绩字段组成,实现这样的线性表的链式存储表示。 (2)键盘输入10个(或若干个,特殊数据来标记输入数据的结束)数据元素,利用链表的基本操作建立学生成绩单链表,要求该表为有序表 并带有头结点。(用于比较的字段为分数)。 (3)输入关键字值x,打印出表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (4)输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5)输入关键字值x,并插入到表中,使所在的链表仍为有序表。(用于比较的字段为分数)。 实验三栈的应用 实验目的: 熟悉栈的逻辑特性、存储表示方法和栈的基本操作。 实验要求: 了解并熟悉栈的逻辑特性、顺序和链式存储表示方法和栈的基本操作的实现和应用。 实验内容: (1)判断一个表达式中的括号(仅有一种括号,小、中或大括号) 是否配对。编写并实现它的算法。 (2)用不同的存储方法,求解上面的问题。 (3)* 若表达式中既有小括号,又有大括号(或中括号),且允许 互相嵌套,但不能交叉,写出判断这样的表达式是否合法的算 法。如 2+3*(4-{5+2}*3)为合法;2+3*(4-{5+2 * 3} 、 2+3*(4-[5+2 * 3)为不合法。

计10--数据结构专题实验rev2

上机实验要求及规范 《数据结构》课程具有比较强的理论性,同时也具有较强的可应用性和实践性,因此上机实验是一个重要的教学环节。一般情况下学生能够重视实验环节,对于编写程序上机练习具有一定的积极性,但是容易忽略实验的总结,忽略实验报告的撰写。对于一名大学生必须严格训练分析总结能力、书面表达能力。需要逐步培养书写科学实验报告以及科技论文的能力。拿到一个题目,一般不要急于编程,而是应该按照面向过程的程序设计思路(关于面向对象的训练将在其它后继课程中进行),首先理解问题,明确给定的条件和要求解决的问题,然后按照自顶向下,逐步求精,分而治之的策略,逐一地解决子问题。具体步骤如下: 1.问题分析与系统结构设计 充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?),然后设计有关操作的函数。在每个函数模块中,要综合考虑系统功能,使系统结构清晰、合理、简单和易于调试。最后写出每个模块的算法头和规格说明,列出模块之间的调用关系(可以用图表示),便完成了系统结构设计。 2.详细设计和编码 详细设计是对函数(模块)的进一步求精,用伪高级语言(如类C语言)或自然语言写出算法框架,这时不必确定很多结构和变量。 编码,即程序设计,是对详细设计结果的进一步求精,即用某种高级语言(如C/C++语言)表达出来。尽量多设一些注释语句,清晰易懂。尽量临时增加一些输出语句,便于差错矫正,在程序成功后再删去它们。 3.上机准备 熟悉高级语言用法,如C语言。熟悉机器(即操作系统),基本的常用命令。静态检查主要有两条路径,一是用一组测试数据手工执行程序(或分模块进行);二是通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,在这个过程中再加入一些注释和断言。如果程序中逻辑概念清楚,后者将比前者有效。 4.上机调试程序 调试最好分块进行,自底向上,即先调试底层函数,必要时可以另写一个调用驱动程序,表面上的麻烦工作可以大大降低调试时所面临的复杂性,提高工作效率。 5.整理实验报告 在上机实验开始之前要充分准备实验数据,在上机实践过程中要及时记录实验数据,在上机实践完成之后必须及时总结分析,写出实验报告。

数据结构(第4版)习题及实验参考答案数据结构复习资料完整版(c语言版)

数据结构基础及深入及考试 复习资料 习题及实验参考答案见附录 结论 1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列 3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。 4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。 5、在数据结构中,从逻辑上可以把数据结构分成( C ) A、动态结构和表态结构 B、紧凑结构和非紧凑结构 C、线性结构和非线性结构 D、内部结构和外部结构 6、算法的时间复杂度取决于( A ) A、问题的规模 B、待处理数据的初态 C、问题的规模和待处理数据的初态 线性表 1、线性表的存储结构包括顺序存储结构和链式存储结构两种。 2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为( E ),删除一个元素需要移动的元素的个数为( A )。 A、(n-1)/2 B、n C、n+1 D、n-1 E、n/2 F、(n+1)/2 G、(n-2)/2 3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B ) A、正确的 B、错误的 C、不一定,与具体的结构有关 4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D ) A、必须是连续的 B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以 5、带头结点的单链表为空的判定条件是( B ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 6、不带头结点的单链表head为空的判定条件是( A ) A、head==NULL B、head->next==NULL C、head->next=head D、head!=NULL 7、非空的循环单链表head的尾结点P满足( C ) A、p->next==NULL B、p==NULL C、p->next==head D、p==head 8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B ) A、O(1) B、O(n) C、O(n2) D、O(nlog2n) 9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )

《数据结构》实验指导

《数据结构》实验指导 (计算机信息大类适用) 实验报告至少包含以下内容: 实验名称 实验目的与要求: 实验内容与步骤(需要你进行细化): 实验结果(若顺利完成,可简单说明;若实验过程中遇到问题,也请在此说明) 收获与体会(根据个人的实际情况进行说明,不得空缺) 实验1 大整数加法(8课时) 目的与要求: 1、线性表的链式存储结构及其基本运算、实现方法和技术的训练。 2、单链表的简单应用训练。 3、熟悉标准模版库STL中的链表相关的知识。 内容与步骤: 1、编程实现单链表的基本操作。 2、利用单链表存储大整数(大整数的位数不限)。 3、利用单链表实现两个大整数的相加运算。 4、进行测试,完成HLOJ(https://www.360docs.net/doc/435976887.html,) 9515 02-线性表大整数A+B。 5、用STL之list完成上面的任务。 6、尝试完成HLOJ 9516 02-线性表大菲波数。 实验2 栈序列匹配(8课时) 目的与要求 1、栈的顺序存储结构及其基本运算、实现方法和技术的训练。 2、栈的简单应用训练。 3、熟悉标准模版库STL中的栈相关的知识。 内容与步骤: 1、编程实现顺序栈及其基本操作。 2、对于给出的入栈序列和出栈序列,判断2个序列是否相容。即:能否利用栈 将入栈序列转换为出栈序列。 3、进行测试,完成HLOJ 9525 03-栈与队列栈序列匹配。 4、用STL之stack完成上面的任务。 5、尝试完成HLOJ 9522 03-栈与队列胡同。

实验3 二叉排序树(8课时) 目的与要求 1、二叉树的链式存储结构及其基本运算、实现方法和技术的训练。 2、二叉树的遍历方法的训练。 3、二叉树的简单应用。 内容与步骤: 1、编程实现采用链式存储结构的二叉排序树。 2、实现插入节点的操作。 3、实现查找节点的操作(若查找失败,则将新节点插入二叉排序树)。 4、利用遍历算法对该二叉排序树中结点的关键字按递增和递减顺序输出,完成 HLOJ 9576 07-查找二叉排序树。 5、尝试利用二叉排序树完成HLOJ 9580 07-查找Let the Balloon Rise。 实验4 最小生成树(8课时) 目的与要求 1、图的邻接矩阵存储结构及其相关运算的训练。 2、掌握最小生成树的概念。 3、利用Prim算法求解最小生成树。 实验背景: 给定一个地区的n个城市间的距离网,用Prim算法建立最小生成树,并计算得到的最小生成树的代价。要求显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。 内容与步骤: 1、建立采用邻接矩阵的图。 2、编程实现Prim算法,求解最小生成树的代价。 3、尝试利用Prim算法完成:HLOJ 9561 06-图最小生成树。

2017数据结构实验指导书

《数据结构》实验指导书 贵州大学 电子信息学院 通信工程

目录 实验一顺序表的操作 (3) 实验二链表操作 (8) 实验三集合、稀疏矩阵和广义表 (19) 实验四栈和队列 (42) 实验五二叉树操作、图形或网状结构 (55) 实验六查找、排序 (88) 贵州大学实验报告 (109)

实验一顺序表的操作 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的和要求 1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。 2、以线性表的各种操作(建立、插入、删除等)的实现为重点。 3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。 二、实验内容及步骤要求 1、定义顺序表类型,输入一组整型数据,建立顺序表。 typedef int ElemType; //定义顺序表 struct List{ ElemType *list; int Size; int MaxSize; }; 2、实现该线性表的删除。 3、实现该线性表的插入。 4、实现线性表中数据的显示。 5、实现线性表数据的定位和查找。 6、编写一个主函数,调试上述算法。 7、完成实验报告。 三、实验原理、方法和手段 1、根据实验内容编程,上机调试、得出正确的运行程序。 2、编译运行程序,观察运行情况和输出结果。 四、实验条件 运行Visual c++的微机一台 五、实验结果与分析 对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。 六、实验总结 记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】 #include #include using namespace std; typedef int ElemType; struct List { ElemType *list; int Size; int MaxSize; }; //初始化线性表 bool InitList(List &L) { L.MaxSize=20; L.list=new ElemType[L.MaxSize]; for(int i=0;i<20&&L.list==NULL;i++) { L.list=new ElemType[L.MaxSize]; } if(L.list==NULL) { cout<<"无法分配内存空间,退出程序"<L.Size+1||pos<1) { cout<<"位置无效"<

经典数据结构上机题_答案解析

数据结构上机实验题目 实验一线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 实验容 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6.输入整型元素序列利用有序表插入算法建立一个有序表。 7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺序结构实现循环队列的入队、出队操作。 8.编写一个主函数,调试上述算法。 #include #include

#define OVERFLOW 0 #define MAXSIZE 100 typedef int ElemType; typedef struct list {ElemType elem[MAXSIZE]; int length; }Sqlist; void Creatlist(Sqlist &L) {int i; printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。 scanf("%d",&L.length); for(i=0;i

《数据结构与算法》上机实验要求

《数据结构与算法》课程实验内容与要求 一、课程简介 本课程着重讲述①线性结构、树型结构、图等典型数据结构的逻辑特点、存储结构及其相应的基本算法。②各种查找算法③典型内部排序算法。 二、实验的作用、地位和目的 数据结构是一门技术基础课,通过实验深刻理解各种逻辑结构、存储结构的特性,培养为实际问题分析其数据对象、基本操作,选择逻辑结构、存储结构灵活应用基本算法,设计出具有专业水准的应用程序的能力。 三、实验方式与要求 ①首先要求学生在课下完成问题分析、算法设计,基本完成程序设计。 ②实验时,每位学生使用一台微机,独立调试,完成程序。 ③程序调试好后,由指导教师检测运行结果,并要求学生回答相关的问题。教师评出检查成绩。 ④学生记录程序的输入数据,运行结果及源程序。 ⑤在一周内完成实验报告。 四、考核方式与实验报告要求 实验成绩由指导教师根据学生的实验完成情况、源程序质量、回答问题情况、实验报告质量、实验纪律等方面给分。 学生在实验后的一周内提交实验报告。实验报告按照首页附件中实验报告模版书写。实验报告中应包括如下内容: ?实验内容按任课教师下达的实验任务填写(具体实验题目和要求); ?实验过程与实验结果应包括如下主要内容: 算法设计思路简介 算法描述:可以用自然语言、伪代码或流程图等方式 算法的实现和测试结果:包括算法运行时的输入、输出,实验中出现的问题及解决办法等 ?源程序清单与实验结果或其它说明可打印,并装订在实验报告首页之后。 ?实验报告雷同者,本次实验成绩为0分或雷同实验报告平分得分

五、实验的软硬件环境 硬件环境:PⅡ以上微型计算机 软件环境:Windows98/2000, VC++6.0或turbo C 六、实验内容安排 实验一线性表应用 实验时间:2016年3月14日1-4节(地点:7-215) 实验目的:理解线性表的逻辑特点;掌握顺序表、链表存储结构,以及线性表的基本操作,如插入、删除、查找,以及线性表合并等操作在顺序存储结构和链式存储结构上的实现算法,并能够在实际问题背景下的灵活运用线性表来解决问题,实现相应算法。 具体实验题目与要求:(任课教师根据实验大纲自己指定) 每位同学可从下面题目中选择1-2题实现: 1.一元稀疏多项式简单的计算器 1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器 2)要求: (1)采用单链表存储结构一元稀疏多项式 (2)输入并建立多项式 (3)输出多项式 (4)实现多项式加、减运算 2.单链表基本操作练习 1)问题描述:在主程序中提供下列菜单: 1…建立链表 2…连接链表 3…输出链表 0…结束 2)实验要求:算法中包含下列过程,分别完成相应的功能: CreateLinklist(): 从键盘输入数据,创建单链表 ContLinklist():将前面建立的两个单链表首尾相连 OutputLinklist():输出显示单链表 3.约瑟夫环问题 1)问题描述:有编号为1, 2…n 的n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数m,从第一个人按顺时针方向自1开始报数,报到m者出列,不再参加报数,这时将出列者的密码作为m,从出列者顺时针方向的下一人开始重新自1开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。 2)要求: 采用顺序和链式两种存储结构实现 实验报告格式及要求:按附件中实验报告模版书写。(具体要求见四)

《数据结构》实验指导书

《数据结构》实验指导书 实验类别:课内实验实验课程名称:数据结构 实验室名称:软件工程实验室实验课程编号:N02070601 总学时:64 学分: 4 适用专业:计算机科学与技术、网络工程、物联网工程、数字媒体专业 先修课程:计算机科学导论、离散数学 实验在教学培养计划中地位、作用: 数据结构是计算机软件相关专业的主干课程,也是计算机软硬件专业的重要基础课程。数据结构课程实验的目的是通过实验掌握数据结构的基本理论和算法,并运用它们来解决实际问题。数据结构课程实验是提高学生动手能力的重要的实践教学环节,对于培养学生的基本素质以及掌握程序设计的基本技能并养成良好的程序设计习惯方面发挥重要的作用。 实验一线性表的应用(2学时) 1、实验目的 通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。 2、实验内容 建立某班学生的通讯录,要求用链表存储。 具体功能包括: (1)可以实现插入一个同学的通讯录记录; (2)能够删除某位同学的通讯录; (3)对通讯录打印输出。 3、实验要求 (1)定义通讯录内容的结构体; (2)建立存储通讯录的链表结构并初始化; (3)建立主函数: 1)建立录入函数(返回主界面) 2)建立插入函数(返回主界面) 3)建立删除函数(返回主界面) 4)建立输出和打印函数(返回主界面) I)通过循环对所有成员记录输出 II)输出指定姓名的某个同学的通讯录记录 5)退出 实验二树的应用(2学时) 1、实验目的 通过本实验掌握二叉排序树的建立和排序算法,了解二叉排序树在实际中的应用并熟练运用二叉排序树解决实际问题。 2、实验内容 建立一个由多种化妆品品牌价格组成的二叉排序树,并按照价格从低到高的顺序 打印输出。 3、实验要求 (1)创建化妆品信息的结构体; (2)定义二叉排序树链表的结点结构; (3)依次输入各类化妆品品牌的价格并按二叉排序树的要求创建一个二叉排序树链表;(4)对二叉排序树进行中序遍历输出,打印按价格从低到高顺序排列的化妆品品牌信息。 实验三图的应用(2学时)

数据结构上机实验报告

数据结构上机实验报告 学院:电子工程学院 专业:信息对抗技术 姓名: 学号: 教师:饶鲜 日期:

目录 实验一线性表 ........................................................................................................ - 2 - 一、实验目的.................................................................................................... - 2 - 二、实验代码.................................................................................................... - 2 - 三、实验结果.................................................................................................... - 8 - 四、个人思路.................................................................................................... - 9 - 实验二栈和队列 .................................................................................................... - 9 - 一、实验目的.................................................................................................... - 9 - 二、实验代码.................................................................................................. - 10 - 三、实验结果.................................................................................................. - 15 - 四、个人思路.................................................................................................. - 16 - 实验三数组 .......................................................................................................... - 16 - 一、实验目的.................................................................................................. - 16 - 二、实验代码.................................................................................................. - 16 - 三、实验结果.................................................................................................. - 18 - 四、个人思路.................................................................................................. - 18 - 实验四树 .............................................................................................................. - 18 - 一、实验目的.................................................................................................. - 18 - 二、实验代码.................................................................................................. - 19 - 三、实验结果.................................................................................................. - 24 - 四、个人思路.................................................................................................. - 25 -

数据结构实验题参考答案

【实验题】 1.狐狸逮兔子 围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里? (提示:这实际上是一个反复查找线性表的过程。) 【数据描述】 定义一个顺序表,用具有10个元素顺序表来表示这10个洞。每个元素分别表示围着山顶的一个洞,下标为洞的编号。 #define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量 typedef struct { ElemType *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) }SqList; 【算法描述】 status InitList_Sq(SqList &L) { //构造一个线性表L L.elem=(ElemType )malloc(LIST_INIT_SIZE*sizeof(ElemType)); If(!L.elem) return OVERFLOW; //存储分配失败 L.length=0; //空表长度为0 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } //InitList_Sq status Rabbit(SqList &L) { //构造狐狸逮兔子函数 int current=0; //定义一个当前洞口号的记数器,初始位置为第一个洞口 for(i=0;i #include #define OK 1 #define OVERFLOW -2 typedef int status; typedef int ElemType; #define LIST_INIT_SIZE 10 /*线性表存储空间的初始分配量*/

相关文档
最新文档