抽象数据类型的表示与实现(实验一)

合集下载

实验1线性表的抽象数据类型的实现

实验1线性表的抽象数据类型的实现

二、链表(带头结点)基本操作实验 链表(带头结点) 要求:数据元素类型ElemType取字符型 取字符型char。按照动态单循环 要求:数据元素类型 取字符型 。 链表结构实现如下算法(各算法边界条件适当给出): 链表结构实现如下算法(各算法边界条件适当给出): 创建任意字符型有序(递增排序)单循环链表( ① 创建任意字符型有序(递增排序)单循环链表(即链表 的字符元素随机在键盘上输入),长度限定在15之内 ),长度限定在 之内; 的字符元素随机在键盘上输入),长度限定在 之内; 打印(遍历)该链表(依次打印出表中元素值); ② 打印(遍历)该链表(依次打印出表中元素值); 在链表中查找第i个元素 合法返回元素值 否则, 个元素, 合法返回元素值, ③ 在链表中查找第 个元素,i合法返回元素值,否则,返回 FALSE; ; 在链表中查找与一已知字符相同的第一个结点, ④ 在链表中查找与一已知字符相同的第一个结点,有则返 回TRUE,否则,返回 ,否则,返回FALSE; ; 在链表中按照有序方式插入一已知字符元素; ⑤ 在链表中按照有序方式插入一已知字符元素; 在线性表中删除第i个结点 个结点; ⑥ 在线性表中删除第 个结点; 计算链表的长度。 ⑦ 计算链表的长度。
实验环境 计算机、 语言程序设计环境 计算机、C语言程序设计环境 实验学时 2学时,选做实验。 学时, 学时 选做实验。 实验内容 一、顺序表的基本操作实现实验 要求:数据元素类型ElemType取整型 。按照顺序存储结构 取整型int。 要求:数据元素类型 取整型 实现如下算法(各算法边界条件和返回结果适当给出): 实现如下算法(各算法边界条件和返回结果适当给出): 创建任意整数线性表( ① 创建任意整数线性表(即线性表的元素值随机在键盘上 输入),长度限定在20之内 ),长度限定在 之内; 输入),长度限定在 之内; 打印(遍历)该线性表(依次打印出表中元素值); ② 打印(遍历)该线性表(依次打印出表中元素值); 在线性表中查找第i个元素 并返回其值; 个元素, ③ 在线性表中查找第 个元素,并返回其值; 在线性表中第i个元素之前插入一已知元素 个元素之前插入一已知元素; ④ 在线性表中第 个元素之前插入一已知元素; 在线性表中删除第i个元素 个元素; ⑤ 在线性表中删除第 个元素; 求线性表中所有元素值(整数)之和; ⑥ 求线性表中所有元素值(整数)之和;

抽象数据类型-树

抽象数据类型-树

数据结构实验报告题目:树的抽像数据类型实现一、实验目的对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。

通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。

进而达到熟练地运用本课程中的基础知识及技术的目的。

二、实验编程环境编程环境:Visual C++。

三、实验要求利用c语言实现树的抽象数据类型的基本操作。

四、基本操作描述树的结构定义和树的一组基本操作: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(1≤j,k≤m)有D j∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi∈Di有<root,xi>∈H;(3) 对应于D-{root}的划分,H-{<root,xi>,…,<root,xm>}有唯一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。

基本操作P:InitTree(&T);操作结果:构造空树T。

DestroyTree(&T);初始条件:树T存在。

操作结果:销毁树T。

CreateTree(&T,definition);初始条件:definition给出树T的定义。

操作结果:按definition构造树T。

ClearTree(&T);初始条件:树T存在。

操作结果:将树T清为空树。

实验1_抽象数据类型的表示和实现

实验1_抽象数据类型的表示和实现

实验1 抽象数据类型的表示和实现
一、实验目的
1.复习巩固C语言的结构体、指针、函数、动态分配内存等知识点。

2.掌握抽象数据类型的定义、表示和实现,为后续实验打好基础。

二、实验内容
基本要求:
设计实现抽象数据类型“三元组”。

每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。

选作内容:
实现两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子等操作。

三、实验步骤
1、写出“三元组(Triplet)”抽象数据类型的定义,即数据对象、数据关系、基本操作
2、练习抽象数据类型的表示和实现。

方法:用指针描述“三元组”,要求:动态分配内存。

3、完成所有基本操作的C语言实现与调用,并写测试程序。

抽象类型实现-二叉树-实验报告1

抽象类型实现-二叉树-实验报告1

一、设计任务、要求及所用软件环境或工具设计任务:选用顺序存储结构和二叉链表存储结构实现抽象数据类型二叉树的基本操作编译环境:VC++6.0二、抽象数据类型定义二叉树抽象类型定义如下ADT BinaryTree{基本对象D:D是具有相同特性的数据元素的集合。

数据关系R:若D=φ,则R=φ,称BinaryTree为空二叉树;若D≠φ,则R={H},H是如下二元关系:(1)在D中存在惟一的称为根的数据元素root,它在关系H下无前驱;(2)若D-{root}≠φ,则存在D-{root}={D1,Dr},且D1∩Dr=φ;(3)若D1≠φ,则D1中存在惟一的元素x1,<root,x1>∈H,且存在D1上的关系H1⊂H;若Dr≠φ,则Dr中存在惟一的元素xr,<root,xr>∈H,且存在D1上的关系Hr⊂H;H={<root,xl>,<root,xr>,Hl,Hr};(4)(Dl,{Hl})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一棵符合本定义的二叉树,称为根的右子树。

基本操作P:InitBiTree(&T);操作结果:构造空二叉树T。

DestroyBiTree(&T);初始条件:二叉树T存在操作结果:销毁二叉树TCreateBiTree(&T, definition);初始条件:definition给出二叉树T的定义操作结果:按definition构造二叉树TClearBiTree(&T);初始条件:二叉树T存在操作结果:将二叉树T清为空树BiTreeEmpty(T);初始条件:二叉树T存在操作结果:若T为空二叉树,则返回TRUE,否则返回FALSEBiTreeDepth(T);初始条件:二叉树T存在操作结果:返回T的深度Root(T);初始条件:二叉树T存在操作结果:返回T的根Value(T,e);初始条件:二叉树T存在,e是T中某个结点操作结果:返回e的值Assign(T,&e,value);操作结果:结点e赋值为valueParent(T,e);初始条件:二叉树T存在,e是T中某个结点操作结果:若e是T的非根节点,则返回它的双亲,否则返回“空”LeftChild(T,e);初始条件:二叉树T存在,e是T中某个结点操作结果:返回e的左孩子。

实验02抽象数据类型的表示及实现

实验02抽象数据类型的表示及实现

浙江大学城市学院实验报告课程名称数据结构基础实验项目名称实验二抽象数据类型的表示和实现学生姓名专业班级学号实验成绩指导老师(签名)日期一.实验目的和要求1、通过抽象数据类型三元组的表示和实现,了解抽象数据类型的定义方式。

2、掌握抽象数据类型的定义方式和用C语言实现的方法。

3、熟悉如何运用主函数检验各基本操作函数的正确性的具体操作。

二.实验内容1、认真阅读以下有关抽象数据类型的知识:(1)抽象数据类型的概念抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。

抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,就不影响其外部的使用。

一个含抽象数据类型的软件模块通常应包含定义、表示和实现3个部分。

抽象数据类型通常采用以下格式定义:ADT抽象数据类型名{数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>} ADT抽象数据类型名(2)三元组的抽象数据类型定义及表示我们以抽象数据类型三元组为例,说明抽象数据类型是如何定义的。

三元组实际上就是一个数据对象中有3个数据元素。

三元组中元素的数据类型,可以是整型数,也可以是字符、浮点数或者更复杂的数据类型。

以下是三元组的抽象数据类型定义:ADT Triplet{数据对象:D={e1, e2, e3 | e1, e2, e3∈ElemSet (ElemSet为某个数据对象的集合)}数据关系:R1={<e1, e2>, <e2, e3>}基本操作:InitTriplet(&T, v1, v2, v3)操作结果:构造三元组T,元素e1, e2和e3分别被赋以v1, v2, v3值DestroyTriplet(&T)操作结果:三元组T被销毁Get(T, i, &e)初始条件:三元组T已存在,1≤i≤3操作结果:用e返回T的第i元的值IsAscending(T)初始条件:三元组T已存在操作结果:如果T的三个元素按升序排列,则返回1,否则返回0 IsDecending(Triplet T);初始条件: 三元组T已存在操作结果: 如果T的三个元素按降序排列,则返回1,否则返回0 Put(&T, i, e)初始条件:三元组T已存在,1≤i≤3操作结果:改变T的第i元的值为eMax(T, &e)初始条件:三元组T已存在操作结果:用e返回T的三个元素中的最大值Min(T, &e)初始条件:三元组T已存在操作结果:用e返回T的三个元素中的最小值} ADT Triplet三元组在计算机中的具体存储方式可以采用动态分配的顺序存储结构,如图所示:Triplet ElemType动态分配的顺序存储的三元组2、在计算机中实现上述三元组抽象数据类型。

抽象数据类型ADT及其实现

抽象数据类型ADT及其实现

实验一抽象数据类型ADT及其实现一、实验目的1. 了解抽象数据类型(ADT)的基本概念,及描述方法。

2. 通过对复数抽象数据类型ADT的实现,熟悉C语言语法及程序设计。

为以后章节的学习打下基础。

二、实例复数抽象数据类型ADT的描述及实现。

[复数ADT的描述]ADT complex{数据对象:D={ c1,c2|c1,c2∈FloatSet }数据关系:R={ <c1,c2>,c1是复数的实部,c2是复数的虚部,即c1+c2i}基本操作:创建一个复数 creat(a);输出一个复数 outputc(a);求两个复数相加之和 add(a,b);求两个复数相减之差 sub(a,b);求两个复数相乘之积 chengji(a,b);等等;} ADT complex;[复数ADT实现的源程序]#include <stdio.h>#include <stdlib.h>/* 存储表示,结构体类型的定义 */typedef struct{ float x; /* 实部子域 */float y; /* 虚部的实系数子域 */}comp;/* 全局变量的说明 */comp a,b,a1,b1;int z;/* 子函数的原型声明 */void creat(comp *c);void outputc(comp a);comp add(comp k,comp h);/* 主函数 */void main(){ creat(&a); outputc(a);creat(&b); outputc(b);a1=add(a,b); outputc(a1);} /* maijn *//* 创建一个复数 */void creat(comp *c){ float c1,c2;printf("输入实部real x=");scanf("%f",&c1);printf("输入虚部xvpu y=");scanf("%f",&c2);(*c).x=c1; c ->y=c2;} /* creat *//* 输出一个复数 */void outputc(comp a){ printf("\n %f+%f i \n\n",a.x,a.y);}/* 求两个复数相加之和 */comp add(comp k,comp h){ comp l;l.x=k.x+h.x; l.y=k.y+h.y;return(l);} /* add */三、试验内容首先将上面源程序输入计算机,进行调试。

实验1线性表的抽象数据类型的实现

实验1线性表的抽象数据类型的实现

实验1线性表的抽象数据类型的实现实验目的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<stdlib.h>#include<stdio.h>#include<malloc.h>int list[25];int i,n,a,sum=0,k,l;int eleminsert;/*------------------创建函数--------------*/void initlist(){printf("Please input the total of the elems:");scanf("%d",&n);if(n>25||n<1) {printf("ERROE!");return;}printf("Please input the elems:...\n");for(i=0;i<n;i++){scanf("%d",&list[i]);}return;}/*------------------打印函数--------------*/void Print(int list[],int n){int j;for(j=0;j<n;j++)printf("%d\t",list[j]);printf("\n");return;}/*------------------查找函数------------*/void Search(int list[],int n,int m){if(m<1||m>n){printf("ERROR!\n"); return ;}else printf("The elem is %d at %d place\n",list[m-1],m); return;}/*----------------插入函数------------*/void Insert(int list[],int n,int m,int elem){int j;if(m<1||m>n){printf("ERROR!\n"); return ;}for(j=n-1;j>=m-1;j--){list[j+1]=list[j];}list[m-1]=elem;n=n+1;printf("The new list are:" );Print(list,n);return;}/*---------------删除函数-----------*/void Delete(int list[],int n,int m){int q;if(m<1||m>n){printf("ERROR!\n"); return ;}for(q=m-1;q<=n;q++){list[q]=list[q+1];}printf("The new list are:");Print(list,n-1);return;}/*-------------求和函数------------*/void Sum(int list[],int n,int sum){int j;for(j=0;j<n;j++){sum=sum+list[j];}printf("The sum is :%d",sum);return;}void menu(){int j;/*------------菜单函数------------*/menulab:printf("********************** MENU ******************\n\n"); printf("Create a new int list :...................press 1\n\n"); printf("Print the whole list :....................press 2\n\n"); printf("Search by order :........................press 3\n\n"); printf("Insert the elem in the place i:...........press 4\n\n"); printf("Delete the elem by order :................press 5\n\n"); printf("Sum all elem in the list :................press 6\n\n"); printf("exit the programe :.......................press 0\n\n"); printf("********************** END *******************\n\n"); printf("Please choose the number from (0~6).....");checklabel: scanf("%1d",&j);getchar();if(j<0||j>7){printf("Error! Please choose again......");goto checklabel;}printf("\n\tYou choose the number %d\n ",j);printf("\n\tPress any key to continue.....");getchar();clrscr(); /*clear screen*/switch(j){case 1:/*创建任意整数线性表*/initlist();clrscr(); /*clear screen*/goto menulab;case 2: /*打印(遍历)该线性表*/printf("The original list is:");Print(list,n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 3:/*在线性表中查找第i个元素,并返回其值*/printf("Input which LNode you want to Search(Input number):"); scanf("%d",&a);getchar();Search(l,n,a);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 4:/*在线性表中第i个元素之前插入一已知元素*/printf("Please input the elem's place where you want to insert"); scanf("%d",&k);printf("Input the elem which you want to insert:");scanf("%d",&eleminsert);Insert(list,n,k,eleminsert);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 5:/*在线性表中删除第i个元素*/printf("Please input the elem you want to delete:");scanf("%d",&l);n=n+1;Delete(list,n,l);n=n-1;printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 6:/*求线性表中所有元素值(整数)之和*/Sum(list,n,sum);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 0:/*退出程序*/printf("Press any key to continue.....");getchar();exit(0);}}void main(){void menu();menu();}二、链表(带头结点)的源程序#include<stdlib.h>#include<stdio.h>struct LNode{char elem;struct LNode* next;}*l,*p,*new;int i,a,k,n;char c,s;/*----------------创建函数-------------*/void intilist(void){l=(struct LNode *)malloc(sizeof(struct LNode));l->next=NULL;clrscr();printf("Input the total of the elems:.....");scanf("%d",&n);getchar();if(n>15)printf("Error!");for(i=n;i>0;i--){new=(struct LNode *)malloc(sizeof(struct LNode));new->next=l->next;l->next=new;}p=l;while(p->next!=NULL) p=p->next;p->next=l;printf("Input elems:.......\n");p=l->next;for(i=1;i<=n;i++){scanf("%c",&p->elem);getchar();p=p->next;}return;}/*----------------排序函数-------------*/ void Sequence(struct LNode * l, int n) {int i;char swap,*e,*f;for(i=1;i<=n-1;i++){ p=l->next;while(p->next!=l){if(p->elem>p->next->elem) {e=&p->elem;f=&p->next->elem;swap=*e;*e=*f;*f=swap;} p=p->next;}}return;}/*----------------打印函数-------------*/void Print(struct LNode * l, int n){int i;p=l->next;for(i=1;i<=n;i++){printf("%c\t",p->elem);p=p->next;}printf("\n");return;}/*----------------查找函数-------------*/ void Locate(struct LNode * l, int n,int m){int i;if(m>n) { printf("FALSE!\t");return; }else { p=l;for(i=1;i<=m;i++){p=p->next;}printf("The elem is:%c\n",p->elem);}return;}/*------已知字母匹配首结点查找函数------*/void LocateLNode(struct LNode * l, int n,char m){int i;p=l;for(i=1;i<=n;i++){p=p->next; if(p->elem==m) {printf("TRUE!\n");return;}} if(i>n) printf("FALSE!\n");return;}/*----------------插入函数-------------*/void Insert(struct LNode * l, int n,char m){new=(struct LNode *)malloc(sizeof(struct LNode));new->next=l->next;l->next=new;new->elem=m;n=n+1;Sequence(l,n);Print(l,n);return;}/*----------------删除函数-------------*/void Delete(struct LNode * l, int n,int m){int i;p=l;for(i=1;i<m;i++){p=p->next;}p->next=p->next->next;n=n-1;printf("The new list is:");Print(l,n);return;}/*----------------求表长函数-------------*/void Length(int n){int i;int length=0;for(i=1;i<=n+1;i++){length=length+sizeof(struct LNode);}printf("The length of the list is:%d",length);return;}/*----------------菜单函数-------------*/void menu(){int j;menulab:printf("********************** MENU ******************\n\n"); printf("Create the new list :..................press 1\n\n"); printf("Sequence the list :...................press 2\n\n"); printf("Search the Lnode by order :............press 3\n\n"); printf("Search the Lnode by elem :.............press 4\n\n"); printf("Insert the elem :......................press 5\n\n"); printf("Delete the elem by order :.............press 6\n\n"); printf("Return the length of the list :........press 7\n\n"); printf("exit the programe :....................press 0\n\n"); printf("********************** END *******************\n\n"); printf("Please choose the number from (0~7)....."); checklabel: scanf("%1d",&j);getchar();if(j<0||j>7){printf("Error! Please choose again......");goto checklabel;}printf("\n\tYou choose the number %d\n ",j);printf("\n\tPress any key to continue.....");getchar();clrscr(); /*clear screen*/switch(j){case 1:/*创建链表并输入元素*/intilist();clrscr(); /*clear screen*/goto menulab;case 2: /*排序并打印链表*/Sequence(l,n);printf("The orignal list is:\n");Print(l,n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 3:/*查找第i个元素*/printf("Input which LNode you want to locate(Input number):"); scanf("%d",&a);getchar();Locate(l,n,a);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 4:/*查找与已知字符相同的第一个结点*/printf("Input the elem you want to search ");scanf("%c",&c);getchar();LocateLNode(l,n,c);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 5:/*插入已知字符的结点*/printf("Input the elem you want to insert:");scanf("%c",&s);getchar();Insert(l,n,s);n=n+1;printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case 6:/*删除第i个结点*/printf("Input which one you want to delete:");scanf("%d",&k);if(k<1||k>n)printf("ERROR!");else{Delete(l,n,k);}n=n-1;getchar();clrscr(); /*clear screen*/goto menulab;case 7:/*计算链表长度*/Length(n);printf("Press any key to continue.....");getchar();clrscr(); /*clear screen*/goto menulab;case0:/*退出链表程序*/printf("Press any key to continue.....");getchar();exit(0);}}/*------------------主函数---------------*/main(){void menu(void);menu();}测试数据与实验结果(可以抓图粘贴)一、顺序表程序抓图及其简要说明菜单选项如下图1所示:该菜单由八个函数组成,实现八项功能。

实验2--抽象数据类型的实现而午后阳光

实验2--抽象数据类型的实现而午后阳光

实验2 抽象数据类型的实现一、实验目的1.了解抽象数据类型(ADT)的基本概念及描述方法;2. 掌握抽象数据类型(ADT)的实现方法;3. 学会使用VC6.0建立工程(project)来组织程序。

二、预备知识1. C语言中数组、函数、结构体、指针的使用方法。

2. C语言中动态内存分配和释放方法(malloc和free库函数的使用)。

3. VC6.0集成开发环境使用方法,尤其是工程使用和程序调试方法。

4. 复数的基本知识及四则运算法则:设z1=a + bi,z2=c + di,(a,b,c,d∈R)加减法:z1±z2 =(a ±c)+(b ±d)i乘法:z1 * z2 =(ac - bd)+(ad + bc)i三、实例——三元组抽象数据类型实现1.三元组抽象数据类型的定义ADT Triplet{数据对象:D={e1, e2, e3| e1, e2, e3∈ElemSet (定义了关系运算的某个集合)} 数据关系:R1 = {<e1, e2>, <e2, e3>}基本操作:InitTriplet(&T, v1, v2, v3);操作结果:构造了三元组T,元素e1, e2和e3分别被赋以参数v1, v2和v3。

DestroyTriplet(&T);操作结果:三元组T被销毁。

Get(T, i, &e);初始条件:三元组T已存在,1≤i≤3;操作结果:用e返回T的第i元的值。

Put(&T, i, e);初始条件:三元组T已存在,1≤i≤3;操作结果:修改T的第i元的值为e。

IsAscending(T);初始条件:三元组T已存在;操作结果:如果T的三个元素按升序排列,则返回1,否则返回0。

IsDescending(T);初始条件:三元组T已存在;操作结果:如果T的三个元素按降序排列,则返回1,否则返回0。

Max(T, &e);初始条件:三元组T已存在;操作结果:用e返回T的三个元素中的最大值。

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

实验一抽象数据类型的表示与实现一.实验目的及要求(1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;(2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组);(3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。

二.实验内容(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。

要求:将计算过程写成一个函数,并采用引用参数实现值的求解。

(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。

三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。

要求:将计算过程写成一个函数,并采用引用参数实现值的求解。

程序代码部分:头文件:#define N 10000void comparason(double a[],int n,double &max,double &min);主函数:#include""#include""int main(){int n;printf("请输入数据个数\n");scanf("%d",&n);double a[N],max,min;int i;printf("请输入数据(空格隔开)\n");for(i=0;i<n;i++){scanf("%lf",&a[i]);}comparason(a,n,max,min);printf("最大值为%lf,最小值为%lf\n",max,min);return 0;}功能函数:#include""#include""void comparason(double a[],int n,double &max,double &min) {int i;max=a[0];min=a[0];for(i=0;i<n;i++){if(max<a[i]){max=a[i];}if(min>a[i]){min=a[i];}}return;}运行结果:(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。

程序代码部分:头文件:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef ElemType *Triplet;Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3); Status DestroyTriplet(Triplet &T);Status Get(Triplet T,int i,ElemType &e);Status Put(Triplet &T,int i,ElemType e);Status IsAscending(Triplet T);Status IsDescending(Triplet T);Status Max(Triplet T,ElemType &e);Status Min(Triplet T,ElemType &e);主函数:#include""#include""#include""int main(){Triplet T;ElemType v1,v2,v3;printf("请输入三个数\n");scanf("%d%d%d",&v1,&v2,&v3);int x;InitTriplet(T,v1,v2,v3);do{printf("请选择下面操作\n");printf("1、销毁三元组\n");printf("2、查看第i个值\n");printf("3、修改第i个值\n");printf("4、判断是否为升序\n");printf("5、判断是否为降序\n");printf("6、查看最大值\n");printf("7、查看最小值\n");printf("0、结束程序!\n");scanf("%d",&x);switch(x){case 1:DestroyTriplet(T);printf("三元组已销毁,若想进行其他操作,需重启程序,新建三元组\n");break;case 2:printf("请输入要查看的位置\n");int a,e;scanf("%d",&a);Get(T,a,e);printf("第%d个值为%d\n",a,e);break;case 3:printf("请输入要修改的位置和数值\n");int b,c;scanf("%d%d",&b,&c);Put(T,b,c);printf("修改后三个值为%d,%d,%d\n",T[0],T[1],T[2]);break;case 4:int f;f=IsAscending(T);if(f==1)printf("是升序排列\n");elseprintf("不是升序排列\n");break;case 5:int g;g=IsDescending(T);if(g==1)printf("是降序排列\n");elseprintf("不是降序排列\n");break;case 6:int y;Max(T,y);printf("最大值为%d\n",y);break;case 7:int z;Min(T,z);printf("最小值为%d\n",z);break;case 0:printf("程序结束!\n");break;default:printf("输入出错!\n");}}while(x!=0&&x!=1);return 0;}功能函数:#include""#include""#include""Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3) {T=(ElemType *)malloc(3*sizeof(ElemType));if(!T) exit(OVERFLOW);T[0]=v1;T[1]=v2;T[2]=v3;return OK;}Status DestroyTriplet(Triplet &T){free(T);T=NULL;return OK;}Status Get(Triplet T,int i,ElemType &e) {if(i<1||i>3)return ERROR;e=T[i-1];return OK;}Status Put(Triplet &T,int i,ElemType e) {if(i<1||i>3)return ERROR;T[i-1]=e;return OK;}Status IsAscending(Triplet T){return (T[0]<=T[1])&&(T[1]<=T[2]);}Status IsDescending(Triplet T){return (T[0]>=T[1])&&(T[1]>=T[2]);}Status Max(Triplet T,ElemType &e){e=(T[0]>=T[1])((T[0]>=T[2])T[0]:T[2]):((T[1]>=T[2])T[1]:T[2]);return OK;}Status Min(Triplet T,ElemType &e){e=(T[0]<=T[1])((T[0]<=T[2])T[0]:T[2]):((T[1]<=T[2])T[1]:T[2]);return OK;}运行结果:四.实验结果的分析与评价(该部分如不够填写,请另加附页)1.三元组可含多个数据项;2.采用顺序存储方式;注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。

相关文档
最新文档