文档库 最新最全的文档下载
当前位置:文档库 › 实验3 控制结构设计

实验3 控制结构设计

实验3 控制结构设计
实验3 控制结构设计

用 scanf 函数输入 x 的值,求 y 值。

实验3

【实验名称】 3、控制结构设计

【实验设备】 计算机

【参考资料】 C 程序设计题解与上机指导(第三版)

【实验目的】 使学生了解 C 语言表示逻辑量的方法(以 0 代表“假” ,以非0代表

“真”);学会正确使用逻辑运算符和逻辑表达式;熟练掌握 if 语句和 switch 语句;结合程序掌握一些简单的算法;掌握用 while 语句, do-while 语句和 for 语句实现循环的方法;掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等);进一步学习调试程序的技巧。

【实验内容】

1 、对于如下函数:

运行程序,输入 x 的值(分别为0.5、8、15),输出的 y 值。

2 、用switch 语句实现:输入百分制成绩,输出相应的等级。

80——100:A 等;70——79:B 等;60——69:C 等;0——59:D 等。

3 、编写一个菜单显示程序,界面如下:

输入 1,2,3或4 可以进行相应的显示,如输入 1 则屏幕上显示“你选择了 1 ”,输入 2 则显示“你选择了 2 ”等,当输入 0-4 之外的数据时,显示“选择错误!”。

5、用 for 语句求 1 到 100 中是 3 的倍数的数的和。

6、输出 1! +2 ! +3 !+……+ 10! 之和。

7、输出数列

,......

,

,

,

,

,

13

21

8

13

5

8

3

5

2

3

1

2

的前20项之和。

8、输出菱形图案:

*

*** ***** ******* ***** *** *

数据结构实验报告图实验

图实验一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10;

template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif MGraph.cpp

#include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) {

数据结构实验报告[3]

云南大学 数据结构实验报告 第三次实验 学号: 姓名: 一、实验目的 1、复习结构体、指针; 2、掌握链表的创建、遍历等操作; 3、了解函数指针。 二、实验内容 1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用链表存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);输出学生的成绩信息。 三、算法描述 (采用自然语言描述) 首先创建链表存储n个学生的成绩信息,再通过键盘输入学生的信息,创建指针p所指结点存储学生的成绩信息,从键盘读入学生人数,求出学生的总分和加权平均分,输出结果。 四、详细设计 (画出程序流程图)

五、程序代码 (给出必要注释) #include #include typedef struct score {int number; int chinese; int math; int english; int total; float average; struct score *next; } student; //创建链表存储n个学生的信息,通过键盘输入信息student*input_score(int n) {int i; student*stu,*p; for(i=0,stu=NULL;inumber);

数据结构实验报告

南京工程学院实验报告 操作的函数程序清单,分别用顺序表和链表结构完成,并在首页上表明团队名称、成员及个人的工作(函数),未来的成绩评定时将包含这一部分的团队成绩及个人的工作成绩。 一、实验目的 1.熟悉上机环境,进一步掌握语言的结构特点。 2.掌握线性表的顺序存储结构的定义及实现。 3.掌握线性表的链式存储结构——单链表的定义及实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、程序主要语句及作用(main函数程序清单) 程序1的主要代码(附简要注释) #include #define MAXSIZE 1024 typedef int elemtype; typedef struct{ elemtype vec[MAXSIZE]; int len; }sequenlist; elemtype geti(sequenlist s, int i); elemtype deli(sequenlist *s,int i); elemtype insi(sequenlist *s,int i,int b); int main(int argc, char *argv[]){ int i,n,x; sequenlist a; printf("输入n(n>3):"); scanf("%d",&n);

数据结构实验报告.

实验目的 (1)学会用先序创建一棵二叉树。 (2)学会采用递归算法对二叉树进行先序、中序、后序遍历。 (3)学会打印输出二叉树的遍历结果。 实验内容 【问题描述】建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 【基本要求】 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。 【测试数据】 ABCффDEфGффFффф(其中ф表示空格字符) 则输出结果为先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA 【选作内容】 采用非递归算法实现二叉树遍历。 实验步骤 (一)需求分析 1、在这个过程中,接受遍历的二叉树是从键盘接受输入(先序),以二叉链表作为存储结构,建立的二叉树。因此,首先要创建一棵二叉树,而这棵二叉树是先序二叉树。本演示程序中,集合的元素设定为大写字母ABCDEFG,输出的先序,中序,后序遍历分别为ABCDEGF,CBEGDFA,CGBFDBA。二叉树可以表示为:

接受的输入数据在进行递归的先序,中序,后序遍历后,分别将结果打印出来。 2、在程序运行的过程中可以看到,以计算机提示用户执行的方式进行下去,即在计算机终端上提示“输入二叉树的先序序列”后,由用户在键盘上输入ABC##DE#G##F###,之后相应的选择遍历及遍历结果显示出来。 3、程序执行的命令包括:首先是二叉树的先序序列被创建输入,其次是对输入进去的先序序列有次序的进行先序,中序,后序遍历。最后是打印出二叉树的遍历结果。 4、测试数据 (1)在键盘上输入的先序序列ABC##DE#G##F### (2)先序遍历结果ABCDEGF

数据结构实验报告三

《数据结构》实验报告 一、实验名称 实验三:排序 二、实验目的 通过本实验,加深对排序概念的理解,能够对三类不同排序方法进行复杂度分析。掌握简单排序方法、先进排序方法和基数排序方法的变化过程及算法设计与分析。 三、实验要求 (1)学生提前准备好实验报告,预习并熟悉实验步骤; (2)遵守实验室纪律,在规定的时间内完成要求的内容; (3)1~2人为1小组,实验过程中独立操作、相互学习; 四、实验内容及步骤 (一)选择排序算法的实现 1、正确设计程序,并编译、链接成可执行文件 (1)首先正确写出排序顺序表的结构体typedef struct SqList (2)正确写出选择排序算法SelectSort (3)写出主程序main ,提供输入与输出操作 本程序的特点是对于用户给定的一组关键字序列(49,38,65,49,76,13,27,52),采用选择排序将其变成一个有序表,并输出排序结果。详见附1。 2、进行程序测试 直接运行可执行文件,观察输出结果,结果正确,如图 1 所示。 图1 3、算法的时间复杂度分析 本算法为二重循环,基本操作为“比较”与“交换”,二者的时间复杂度均为O(n2),由于二者是顺序结构,因此算法的整体时间复杂度为T(n)= O(n2)。 (二)插入排序算法的实现 1、正确设计程序,并编译、链接成可执行文件 (1)首先正确写出排序顺序表的结构体typedef struct SqList (2)正确写出插入排序算法InsertSort (3)写出主程序main ,提供输入与输出操作 本程序的特点是对于用户给定的一组关键字序列(49,38,65,97,76,13,27,49),采用插入排序将其变成一个有序表,并输出排序结果。详见附2。

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

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;

数据结构实验报告

本科实验报告 课程名称:数据结构(C语言版) 实验项目:线性表、树、图、查找、内排序实验地点:明向校区实验楼208 专业班级:学号: 学生姓名: 指导教师:杨永强 2019 年 1 月10日

#include #include #include #define OK 1 typedef struct{//项的表示,多项式的项作为LinkList的数据元素float coef;//系数 int expn;//指数 }term,ElemType; typedef struct LNode{ //单链表节点结构 ElemType data; struct LNode *next; }LNode, *LinkList; typedef LinkList polynomial; int CreatLinkList(polynomial &P,int n){ //创建多项式P = (polynomial)malloc(sizeof(LNode)); polynomial q=P; q->next=NULL; polynomial s; for(int i = 0; i < n; i++){ s = (polynomial)malloc(sizeof(LNode)); scanf("%f%d",&(s->data.coef),&(s->data.expn)); q->next = s; s->next = NULL; q=q->next; } return OK; } 运行结果 2. void PrintfPolyn(polynomial P){ polynomial q; for(q=P->next;q;q=q->next){ if(q->data.coef!=1) printf("%g",q->data.coef);

数据结构实验三实验报告

三题目:哈夫曼编/译码器 班级:姓名:学号:完成日期:15.11.14 一、题目要求 描述:写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0. 输入:输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大); 输入串长小于或等于100的目标报文。 输出:经过编码后的二进制码,占一行; 以及对应解码后的报文,占一行; 最后输出一个回车符。 输入样例: 5 a b c d e 12 40 15 8 25 bbbaddeccbbb 输出样例: 00011111110111010110110000 bbbaddeccbbb 提示:利用编码前缀性质。 二、概要设计 1.设计需要的数据结构:树型结构 2.需要的抽象数据类型: ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R:若D为空集,则称为空树; 若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3,…,Dm(m>0),对于任意j≠k(≤j,k≤m)有Dj∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi?Di有?H; (3) 对应于D-{root}的划分,H-{,…,}有唯一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di,{Hi}) 是一棵符合本定义的树,称为根root的子树。 基本操作: InitTree(&T); 操作结果:构造空树T。

数据结构实验报告

数据结构实验报告 第 6 次实验 学号:20141060106 姓名:叶佳伟 一、实验目的 1、复习图的逻辑结构、存储结构及基本操作; 2、掌握邻接矩阵、邻接表及图的创建、遍历; 3、了解图的应用。 二、实验内容 1、(必做题)假设图中数据元素类型是字符型,请采用邻接矩阵或邻接表实现图的以下基本操作: ( 1)构造图(包括有向图、有向网、无向图、无向网); ( 2)根据深度优先遍历图; ( 3)根据广度优先遍历图。 三、算法描述 (采用自然语言描述) 四、详细设计 (画出程序流程图) 五、程序代码 (给出必要注释) #include #include #include #include #include #define INFINITY 255678 /*赋初值用*/ #define MAX_VERTEX_NUM 20 /* 最大顶点个数*/ enum {DG, DN, UDG, UDN}; typedef struct ArcCell {

int adj;/*顶点关系类型,对无权图,用1(是)或0(否)表示相邻否;对带权图,则为权值*/ char *info;/*弧相关信息指针*/ }AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { char vexs[MAX_VERTEX_NUM][5];/*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum, arcnum;/*图的当前顶点数和弧数*/ int kind; }MGraph; void CreateDG(MGraph *G); void CreateDN(MGraph *G); void CreateUDG(MGraph *G); void CreateUDN(MGraph *G); int LocateVex(MGraph *G, char v[]); void print(MGraph *G); int main(void) { MGraph *G; G = (MGraph *)malloc(sizeof(MGraph)); printf("请选者0-有向图,1-有向网,2-无向图,3-无向网: "); scanf("%d", &G->kind); switch(G->kind) { case DG : CreateDG(G); print(G); break; case DN : CreateDN(G); print(G); break; case UDG : CreateUDG(G); print(G); break; case UDN : CreateUDN(G);

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

数据结构实验报告-图

数据结构实验报告 图

一、实验目的 1、熟悉图的结构和相关算法。 二、实验内容及要求 1、编写创建图的算法。 2、编写图的广度优先遍历、深度优先遍历、及求两点的简单路径和最短路径的算法。 三、算法描述 1、图的邻接表存储表示: 对图的每个顶点建立一个单链表,第i个单链表表示所有依附于第i个点的边(对于有向图表示以该顶点为尾的弧);链表的每个节点存储两个信息,该弧指向的顶点在图中的位置(adjvex)和指向下一条弧的指针(nextarc)。每个连表的头结点存储顶点的数据:顶点信息(data)和指向依附于它的弧的链表域。 存储表示如下: typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 // InfoType *info; // 该弧相关信息的指针 } ArcNode; typedef struct VNode { char data; // 顶点信息 int data2;

int sngle; ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph; 2、深度优先搜索: 假设初始态是图中所有定点未被访问,从图中的某个顶点v开始,访问此顶点,然后依次从v的未访问的邻接点出发深度优先遍历,直至途中所有和v有相同路径的点都被访问到;若图中仍有点未被访问,则从图中另选一个未被访问的点作为起点重复上述过程,直到图中所有点都被访问到。为了便于区分途中定点是否被访问过,需要附设一个访问标致数组visited [0..n-1],将其初值均设为false,一旦某个顶点被访问,将对应的访问标志赋值为true。 2、广度优先搜索: 假设初始态是图中所有顶点未被访问,从图中的某个顶点v开始依次访问v的各个未被访问的邻接点,然后分别从这些邻接点出发以此访问他们的邻接点,并使“先被访问的邻接顶点”先于“后被访问的邻接顶点”被访问,直至图中所有已被访问过的顶点的邻接顶点都被访问。若图中仍有未被访问的顶点,选择另一个未被访问的顶点开始,重复上述操作,直到图中所有顶点都被访问。为了使

《数据结构》实验3实验报告

南京工程学院实验报告 1.熟悉上机环境,进一步掌握语言的结构特点。 2.掌握线性表的顺序存储结构的定义及实现。 3.掌握线性表的链式存储结构——单链表的定义及实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素(学号)。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、程序主要语句及作用 程序1的主要代码(附简要注释) #include #include "stdio.h" #include #include typedef struct BSTNODE { int data; struct BSTNODE *lchild; struct BSTNODE *rchild; }BSTNODE; BSTNODE* initBST(int n, BSTNODE *p) { if(p==NULL) { p=(BSTNODE*)malloc(sizeof(BSTNODE)); p->lchild=NULL;

p->rchild=NULL; p->data=n; } else if(n>p->data) p->rchild=initBST(n,p->rchild); else p->lchild=initBST(n,p->lchild); return p; } void inorder(BSTNODE *BT){ if(BT!=NULL){ inorder(BT->lchild); printf("%d",BT->data); inorder(BT->rchild); } } BSTNODE *search_btree(BSTNODE *root,int key) { if(!root) {printf("Emptu btree\n"); return root;} while(root->data!=key) { if(keydata) root=root->lchild; else root=root->rchild; if(root==0) { printf("Search Failure\n"); break; } }/*while(root->info!=key*/ if(root!=0) printf("Successful search\n key%d\n",root->data); }/* *search_btree(root,key) */ int main() { BSTNODE *p=NULL; int i,n,sd; int a[100]; printf("enter the number of nodes:"); scanf("%d",&n); printf("enter the number of the tree:"); for(i=0;i #include

数据结构实验报告

实验报告手册 课程名称:数据结构指导教师: 专业:计算机科学与技术20年—20年第学期 姓名:学号: 年级:级班级:

实验报告内容 实验题目:线性表及其应用 实验目的:掌握线性表的定义,掌握不同存储结构及基本运算 实验要求:实现约瑟夫(Joseph)问题描述:约瑟夫(Joseph)问题描述为:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,从第s个人开始从1报数,数到第m的人出列;然后从它在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计一个程序求出列顺序。 实验器材:计算机 实验电路图/程序流程图: (1)利用链表 (2)利用数组

实验步骤/程序源代码: //利用链表 #include #include #include typedef int ElemType; typedef struct SingleNode { ElemType data; struct SingleNode *next; }SLL,*LinkList; int main() { SLL *head ,*use,*temp; int i,n,m,k,a=0; printf("请输入总人数n:"); scanf("%d",&n); printf("从第m个人开始数起,请输入m:");

scanf("%d",&m); printf("数到第k个人,该人出列,请输入k:"); scanf("%d",&k); head = use = (SLL *) malloc(sizeof(SLL));//建立链表,形成链表头 head->data = 1; for (i = 2; i <= n; i++)//形成其余的n-1个 { use->next = (SLL *) malloc(sizeof(SLL)); use = use->next; use->data = i;//第i个置编号i } use->next = head;//末首相连,形成环 printf("人员序号为:"); //输出人员的序号 temp=head; for(i=0;idata); temp=temp->next; } printf("\n"); for(i=0;inext; } printf("人员出列顺序为:"); while (n) { for (i = 1; i < k; i++)//掠过k-1个 use = use->next; temp = use->next;//temp指向第k个 use->next = temp->next;//第k个从环中脱钩 printf("%d ", temp->data); free(temp);//释放第k个表元占用的空间 n--; } printf("\n"); return 0; } //利用数组 #include #include int main() { int i,k,m,n,num[50],*p;

数据结构实验三实验报告

《数据结构与算法设计》 实验报告 ——实验三 学院:自动化学院 班级:_06111006__ 学号:_1120101652 姓名:__陈惠娟___

一.实验目的 了解并熟悉二叉树的存储结构及其各种操作,掌握各种二叉树的遍历方法。二.实验内容 遍历二叉树: 要求:请输入一棵二叉树的扩展的前序序列,经过处理后生成一棵二叉树,然后对于该二叉树输出前序、中序和后序遍历序列。 例如:1 2 4 * 5 * * * 3 三.程序设计 1.概要设计 程序的主要功能为:根据输入的二叉树的扩展的前序序列生成一棵完全二叉树,然后分别对生成的二叉树进行前序中序和后序的遍历,并分别输出遍历结果。 2.详细设计 定义的数据类型: typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; 建立二叉树的函数: void buildtree(BiTree &t) { char ch; cin>>ch;

if(ch=='*') t=NULL; else{ if(!(t=(BiTree)malloc(sizeof(BiTNode)))) exit(0); t->data=ch; buildtree(t->lchild); buildtree(t->rchild);} } 前序遍历二叉树并输出遍历结果的函数: void PreOrderTraverse(BiTree t) { if(t) {cout<data; PreOrderTraverse(t->lchild); PreOrderTraverse(t->rchild); }} 中序遍历二叉树并输出遍历结果的函数: void InOrderTraverse(BiTree t) { if(t) {InOrderTraverse(t->lchild); cout<data; InOrderTraverse(t->rchild); }} 后序遍历二叉树并输出遍历结果的函数: void PostOrderTraverse(BiTree t) { if(t) { PostOrderTraverse(t->lchild); PostOrderTraverse(t->rchild); cout<data; }} 主函数: void main() { BiTree T; buildtree(T); cout<<"先序序列为:"; PreOrderTraverse(T); cout<

《数据结构》实验报告

实验三——图 一、实验目的 1.掌握图的基本概念; 2.掌握图的存储结构及其建立算法; 3.熟练掌握图的两种遍历算法及其应用。 二、实验内容 1.对给定的图G,设计算法输出从V0出发深(广)度遍历图G的深(广)度优先搜索 序列; 2.设计算法输出给定图G的连通分量个数及边(或弧)的数目。 三、实验预习内容 在实验中要用到这几个函数:typedef struct 邻接矩阵的创建,Locate函数去查找,create函数创建图,定义两个指针firstadj,nextadj找寻临接点和下一个临接点,void dfs函数从某一点开始遍历,void dfsgraph进行图的遍历算法,然后就是main 函数。 四、上机实验 1.实验源程序。 #include #define max 80 int num1=0,num2=0; bool visited[max]; //标记数组 typedef struct //邻接矩阵 { char vexs[max]; int arcs[max][max]; int vexnum,arcnum; } graph; int locate(graph G,char v) //定位 { int i; for(i=0;i>G.vexnum>>G.arcnum; cout<<"Please iput the chars in sequence:";

数据结构实验3_实验报告

实验报告3 课程数据结构实验名称顺序栈基本操作第页 专业班级___ 学号_ 姓名 实验日期:2010 年9 月28 日评分 一、实验目的 1.熟悉并能实现栈的定义和基本操作。 2.了解和掌握栈的应用。 二、实验要求 1.进行栈的基本操作时要注意栈"后进先出"的特性。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。 2.编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。 主要功能描述如下: (1)从键盘上输入表达式。 (2)分析该表达式是否合法: a) 是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。 b) 是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。 c) 若是其它字符,则返回错误信息。 (3)若上述处理过程中没有发现错误,则认为该表达式合法,并打印处理结果。 四、实验步骤 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 #define OVERFLOW 0 typedef int Status; typedef int SElemType;

#include #include using namespace std; //1.编写程序任意输入栈长度和栈中的元素值 typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack & S ) //构造一个顺序栈 { S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } Status ClearStack(SqStack &S) //清空、 { if(S.top!=S.base) { S.top=S.base; S.stacksize=0; } return OK; } Status DestroyStack(SqStack &S)//销毁、 { free(S.base); if(S.base) return ERROR; return OK; } Status Push(SqStack & S ,SElemType e) //入栈 { if(S.top-S.base>=S.stacksize){ S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;

《数据结构》实验报告

苏州科技学院 数据结构(C语言版) 实验报告 专业班级测绘1011 学号10201151 姓名XX 实习地点C1 机房 指导教师史守正

目录 封面 (1) 目录 (2) 实验一线性表 (3) 一、程序设计的基本思想,原理和算法描述 (3) 二、源程序及注释(打包上传) (3) 三、运行输出结果 (4) 四、调试和运行程序过程中产生的问题及采取的措施 (6) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (6) 实验二栈和队列 (7) 一、程序设计的基本思想,原理和算法描述 (8) 二、源程序及注释(打包上传) (8) 三、运行输出结果 (8) 四、调试和运行程序过程中产生的问题及采取的措施 (10) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (10) 实验三树和二叉树 (11) 一、程序设计的基本思想,原理和算法描述 (11) 二、源程序及注释(打包上传) (12) 三、运行输出结果 (12) 四、调试和运行程序过程中产生的问题及采取的措施 (12) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (12) 实验四图 (13) 一、程序设计的基本思想,原理和算法描述 (13) 二、源程序及注释(打包上传) (14) 三、运行输出结果 (14) 四、调试和运行程序过程中产生的问题及采取的措施 (15) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (16) 实验五查找 (17) 一、程序设计的基本思想,原理和算法描述 (17) 二、源程序及注释(打包上传) (18) 三、运行输出结果 (18) 四、调试和运行程序过程中产生的问题及采取的措施 (19) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (19) 实验六排序 (20) 一、程序设计的基本思想,原理和算法描述 (20) 二、源程序及注释(打包上传) (21) 三、运行输出结果 (21) 四、调试和运行程序过程中产生的问题及采取的措施 (24) 五、对算法的程序的讨论、分析,改进设想,其它经验教训 (24)

数据结构实验报告

数据结构实验报告 第四次实验 学号::叶佳伟 一、实验目的 1、复习线性表、栈、队列的逻辑结构、存储结构及基本操作; 2、掌握顺序表、(带头结点)单链表、顺序栈、链队列; 3、了解有顺表、链栈、循环队列。 3、了解有顺表、链栈、循环队列。 二、实验容 1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现: ( 1) OrderInsert(&L, e, int (*compare)(a, b))//根据有序判定函数compare,在有序表L的适当位置插入元素e; ( 2) OrderInput(&L, int (*compare)(a, b))//根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L; ( 3) OrderMerge(&La, &Lb, &Lc, int (*compare)())//根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。 2、(必做题)假设栈中数据元素类型是字符型,请采用顺序栈实现栈的以下基本操作:( 1) Status InitStack (&S) //构造空栈S; ( 2) Status Push(&S, e) //元素e入栈S; ( 3) Status Pop(&S, &e) //栈S出栈,元素为e。 3、(必做题)假设队列中数据元素类型是字符型,请采用链队列实现队列的以下基本操作:( 1) Status InitQueue(&Q) //构造空队列Q; ( 2) Status EnQueue(&Q, e) //元素e入队列Q; ( 3) Status DeQueue (&Q, &e) //队列Q出队列, 元素为e。 三、算法描述 (采用自然语言描述) ⒈⑴分别插入第一个链表和第二个链表的数据; ⑵根据有序判定函数compare,将两个有序表La和Lb归并为个有序表。 ⑶输出归并后的有序表。 2. ⑴构造一个栈的结构体 ⑵利用函数initstack构造空栈 ⑶Push函数将元素依次存储到栈里 ⑷利用pop函数输出栈顶元素

数据结构实验报告

实验名称:数据结构实验五 实验内容:1.使用邻接矩阵建立一个图,深度遍历。2.使用邻接表建立一个图,广度遍历。3.建立一个图,存储结构自己确定,并进行拓扑排序。 实验代码: 1.#include "stdio.h" #define Infinity 100 #define MaxVertexNum 20 typedef enum {DG,DN,UDG,UDN} GraphKind; typedef int VRType; typedef char VertexType; bool Visit[MaxVertexNum]; typedef struct ArcCell { VRType adj; }ArcCell,AdjMatrix[MaxVertexNum][MaxVertexNum]; typedef struct { VertexType vexs[MaxVertexNum]; AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶

点数和弧数 GraphKind kind; }MGraph; int LocateVex(MGraph G,VertexType v) { for(int i=0;i

{ int i,j,k; printf("请输入顶点数:\n"); scanf("%d",&G.vexnum); printf("请输入弧数:\n"); scanf("%d",&G.arcnum); i = 0; while(i

相关文档