实验报告:抽象数据类型的表现和实现

实验报告:抽象数据类型的表现和实现

实验内容

基本要求:
设计实现抽象数据类型“三元组”,要求动态分配内存。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。

/* Auther: XDate:2020/2/15Description:  数据结构与算法*实验一*抽象数据结构 */
#include<stdio.h>
#define OK 1
#define ERROR 0
typedef int status;typedef float Elemtype;
typedef int Status;typedef struct
{Elemtype e[3];}Triplet;//初始化三元组; 
Status InitTriplet(Triplet &T,Elemtype v0,Elemtype v1,Elemtype v2)
{T.e[0]=v0;T.e[1]=v1;T.e[2]=v2;return OK;
}// 取三元组中第i个值赋值给e 
Status Put(Triplet T,Status i,Elemtype &e)
{if(i<1||i>3)return ERROR;elsee=T.e[i-1];return OK;}//取三元组中最大值赋值给e 
Status Getmax(Triplet &T,Status i,Elemtype &e)
{e=T.e[0];for(i=0;i<3;i++)if(T.e[i]>e)e=T.e[i];return OK;
}//取三元组中最小值赋值给e 
Status Getmin(Triplet &T,Status i,Elemtype &e)
{e=T.e[0];for(i=0;i<3;i++)if(T.e[i]<e)e=T.e[i];return OK;
}//输出三元组的三个值; 
Status ShowTriplet(Triplet &T,Status i)
{if(i<1||i>3)return ERROR;elseprintf("三元组的3个值为:");for(i=0;i<3;i++)printf("%2f",T.e[i]);return OK; } //判断三元组中的值是否为升序;
Status IsAscending(Triplet &T) 
{return((T.e[0]<T.e[1])&&(T.e[1]<T.e[2]));//升序则返回1,否则返回0; 
}//判断三元组中的值是否为降序;;
Status IsDescending(Triplet &T)
{return((T.e[0]>T.e[1])&&(T.e[1]>T.e[2]));//降序则返回1,否则返回0; } //输出三元组中数值的乘积;
Status GetProduct(Triplet &T,Status i,Elemtype &e)
{e=T.e[0]*T.e[1]*T.e[2];return OK;} //销毁三元组;
Status Destory(Triplet &T)
{return OK;} int main()
{Triplet T;Status i,flag;Elemtype v0,v1,v2,e;printf("输入三元组的值:\n");scanf("%f %f %f",&v0,&v1,&v2);flag=InitTriplet(T,v0,v1,v2);printf("初始化函数后,flag=%d\n,",flag);printf("三元组中三个值分别为:%4.2f,%4.2f,%4.2f\n",T.e[0],T.e[1],T.e[2]);Put(T,i,e);printf("取三元组中第i个值赋值给e:%d\n ",e);Getmax(T,i,e);printf("输出三元组中的最大值:%f\n",e);Getmin(T,i,e);printf("输出三元组中的最小值:%f\n",e);if (IsAscending(T))printf("三元组是升序") ;if(IsDescending(T)) printf("三元组是降序");GetProduct(T,i,e);printf("输出三元组三个元素值的成绩:%f%f%f\n",T.e[0],T.e[1],T.e[2]);flag=Destory(T);printf("销毁三元组T成功:flag=%d\n",flag);return OK;}

三元组相比上学期的指针在功能上更加丰富,且更易理解。
同时更加从系统角度出发,例如typedef int Status;可以是系统更容易修改数值的数据类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于x86、x86_64/x64、amd64和arm64/aarch64

关于x86、x86_64/x64、amd64和arm64/aarch64 转自&#xff1a;https://www.jianshu.com/p/2753c45af9bf 为什么叫x86和x86_64和AMD64? 为什么大家叫x86为32位系统&#xff1f; 为什么软件版本会注明 for amd64版本&#xff0c;不是intel64呢&#xff1f; x86是指intel的开…

实验报告: 线性表的基本操作及应用

实验报告&#xff1a; 线性表的基本操作及应用 实验内容 基本要求&#xff1a; &#xff08;1&#xff09;实现单链表的创建&#xff1b;&#xff08;2&#xff09;实现单链表的插入&#xff1b;&#xff08;3&#xff09;实现单链表的删除 &#xff08;4&#xff09;实现单链…

TVM:源码编译安装

TVM&#xff1a;Linux源码编译安装 笔者环境&#xff1a; OS&#xff1a;Ubuntu 18.04 CMake&#xff1a;3.10.2 gcc&#xff1a;7.5.0 cuda&#xff1a;11.1 编译安装过程总览 本文将简介 tvm 的编译安装过程&#xff0c;包含两个步骤&#xff1a; 通过C代码构建共享库设置相…

第2章线性表的基本使用及其cpp示例(第二章汇总,线性表都在这里)

2.1线性表的定义和特点 【类型定义&#xff1a; *是n个元素的有限序列 *除了第一个元素没有直接前驱和最后一个没有直接后驱之外&#xff0c;其余的每个元素只有一个直接前驱和直接后驱&#xff1b; &#xff08;a1,a2…an&#xff09; 【特征&#xff1a; *有穷性&#xff1…

TVM:通过Python接口(AutoTVM)来编译和优化模型

TVM&#xff1a;通过Python接口&#xff08;AutoTVM&#xff09;来编译和优化模型 上次我们已经介绍了如何从源码编译安装 tvm&#xff0c;本文我们将介绍在本机中使用 tvm Python 接口来编译优化模型的一个demo。 TVM 是一个深度学习编译器框架&#xff0c;有许多不同的模块…

TVM:在树莓派上部署预训练的模型

TVM&#xff1a;在树莓派上部署预训练的模型 之前我们已经介绍如何通过Python接口&#xff08;AutoTVM&#xff09;来编译和优化模型。本文将介绍如何在远程&#xff08;如本例中的树莓派&#xff09;上部署预训练的模型。 在设备上构建 TVM Runtime 首先我们需要再远程设备…

2.2线性表的顺序表

2.2.1线性表的顺序表示和实现------顺序映像 【顺序存储】在【查找时】的时间复杂度为【O(1)】&#xff0c;因为它的地址是连续的&#xff0c;只要知道首元素的地址&#xff0c;根据下标可以很快找到指定位置的元素 【插入和删除】操作由于可能要在插入前或删除后对元素进行移…

TVM:交叉编译和RPC

TVM&#xff1a;交叉编译和RPC 之前我们介绍了 TVM 的安装、本机demo和树莓派远程demo。本文将介绍了在 TVM 中使用 RPC 进行交叉编译和远程设备执行。 通过交叉编译和 RPC&#xff0c;我们可以在本地机器上编译程序&#xff0c;然后在远程设备上运行它。 当远程设备资源有限…

2.3单链表的基本使用及其cpp示例

2.3线性表的链式表现与实现 2.3.1.1单链表 【特点&#xff1a; *用一组任意的存储单元存储线性表的数据元素 *利用指针实现用不同相邻的存储单元存放逻辑上相邻的元素 *每个元素ai&#xff0c;除存储本身信息外&#xff0c;还存储其直接后继的元素&#xff08;后一个元素的地址…

TVM:简介

TVM&#xff1a;简介概述 Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念&#xff0c;引导您了解 TVM 的所有主要功能。新用户应该能够从…

2.3.3单链表的双向链表

2.3.3双向链表 插入、删除 指在前驱和后驱方向都能游历&#xff08;遍历&#xff09;的线性链表 双向链表的每个结点有两个指针域 【结构】&#xff1a;prior data next 双链表通常采用带头结点的循环链表形式 可理解为首位相接的数据“圈”&#xff0c;每个结点都可以向前…

nvidia-smi 命令详解

nvidia-smi 命令详解 简介 nvidia-smi - NVIDIA System Management Interface program nvidia smi&#xff08;也称为NVSMI&#xff09;为来自 Fermi 和更高体系结构系列的 nvidia Tesla、Quadro、GRID 和 GeForce 设备提供监控和管理功能。GeForce Titan系列设备支持大多数…

2.4一元多项式的表示及相加,含cpp算法

2.4一元多项式的表示及相加 n阶多项式的表示&#xff1a; n阶多项式有n1项 指数按升幂排序 【 优点&#xff1a; 多项式的项数可以动态增长&#xff0c;不存在存储溢出的问题插入&#xff0c;删除方便&#xff0c;不移动元素 【表示&#xff1a; 有两个数据域&#xff0c;一…

TVM:使用Tensor Expression (TE)来处理算子

TVM&#xff1a;使用Tensor Expression (TE)来处理算子 在本教程中&#xff0c;我们将聚焦于在 TVM 中使用张量表达式&#xff08;TE&#xff09;来定义张量计算和实现循环优化。TE用纯函数语言描述张量计算&#xff08;即每个表达式都没有副作用&#xff09;。当在 TVM 的整体…

4-数据结构-串的学习

4.1串类型的定义 1.串&#xff1a;&#xff08;或字符串&#xff09; 串是由多个字符组成的有限序列&#xff0c;记作&#xff1a;S‘c1c2c3…cn’ (n>0) 其中S是串的名字&#xff0c;‘c1c2c3…cn’ 是串值 ci是串中字符 n是串的长度&#xff0c;表示字符的数目 空串&a…

Linux下rm误删恢复 extundelete

Linux下rm误删恢复 extundelete 误删之后要第一时间卸载&#xff08;umount&#xff09;该分区&#xff0c;或者以只读的方式来挂载&#xff08;mount&#xff09;该分区&#xff0c;否则覆写了谁也没办法恢复。如果误删除的是根分区&#xff0c;最好直接断电&#xff0c;进入…

5-数据结构-数组的学习

5.1数组的定义 定义&#xff1a; 由一组类型相同的数据元素构成的有序集合&#xff0c;每个数据元素称为一个数据元素&#xff08;简称元素&#xff09;&#xff0c;每个元素受n&#xff08;n>1&#xff09;个线性关系的约束&#xff0c;每个元素在n个线性关系中的序号i1、…

timm 视觉库中的 create_model 函数详解

timm 视觉库中的 create_model 函数详解 最近一年 Vision Transformer 及其相关改进的工作层出不穷&#xff0c;在他们开源的代码中&#xff0c;大部分都用到了这样一个库&#xff1a;timm。各位炼丹师应该已经想必已经对其无比熟悉了&#xff0c;本文将介绍其中最关键的函数之…

C--数据结构--树的学习

6.2.1二叉树的性质 1.二叉树 性质&#xff1a; 1.若二叉树的层次从1开始&#xff0c;则在二叉树的第i层最多有2^(i-1)个结点 2.深度为k的二叉树最多有2^k -1个结点 &#xff08;k>1&#xff09; 3.对任何一颗二叉树&#xff0c;如果其叶结点个数为n0,度为2的非叶结点个数…

TVM:使用 Schedule 模板和 AutoTVM 来优化算子

TVM&#xff1a;使用 Schedule 模板和 AutoTVM 来优化算子 在本文中&#xff0c;我们将介绍如何使用 TVM 张量表达式&#xff08;Tensor Expression&#xff0c;TE&#xff09;语言编写 Schedule 模板&#xff0c;AutoTVM 可以搜索通过这些模板找到最佳 Schedule。这个过程称为…