实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 创建 取值 置换 打印/销毁三元组等功能 数据结构(C语言版)

简介: 实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 创建 取值 置换 打印/销毁三元组等功能 数据结构(C语言版)

实验内容


基本要求:

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

选作内容:

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


代码实现:



//

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE 0
#define LIST_INIT_SIZE 200//初始容量为200 
typedef int Status;
typedef float ElemType;
typedef struct
{
  ElemType *elem;
}Triplet;
// 创建一个三元组 
void initTriplet(Triplet &L,ElemType v0,ElemType v1,ElemType v2)
{
  L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  L.elem[0]=v0;
  L.elem[1]=v1;
  L.elem[2]=v2;
} 
//打印三元组 
void print(Triplet &L)
{
  int i;
  for(i=0;i<3;i++)
  {
    printf("%f ",L.elem[i]);
  }
}
//取三元组的任意一个分量
ElemType Getelem(Triplet L,Status i)
{
  if(i<1||i>3)
  {
    return FALSE;
  }
  ElemType e=L.elem[i-1];
  return e;
}
//置三元组的任意一个分量 
ElemType Putelem(Triplet &L,Status i,ElemType e)
{
  if(i<1||i>3)
  {
    return FALSE;
  }
  L.elem[i-1]=e;
  return OK;
}
//求三元组的最大分量 
ElemType max(Triplet L)
{
  Status temp;
  if(L.elem[0]>L.elem[1])
  {
    temp=L.elem[0];
  }else
  {
    temp=L.elem[1];
  }
  if(temp>L.elem[2])
  {
    return temp;
  }else
  {
    return L.elem[2];
  }
}
//求三元组的最小分量
ElemType min(Triplet L)
{
  Status temp;
  if(L.elem[0]<L.elem[1])
  {
    temp=L.elem[0];
  }
  else
  {
    temp=L.elem[1];
  }
  if(temp<L.elem[2])
  {
    return temp;
  }else
  {
    return L.elem[2];
  }
}
//实现两个三元组的对应分量相加
ElemType sum(Triplet L,ElemType a,ElemType b)
{
  if(a<1||a>3)
  {
    return FALSE;
  }
  if(b<1||b>3)
  {
    return FALSE;
  }
  ElemType sum=0;
  sum+=Getelem(L,a);
  sum+=Getelem(L,b);
  return sum;
}
//实现两个三元组的对应分量相减
ElemType DifferenceVaule(Triplet L,ElemType a,ElemType b)
{
  if(a<1||a>3)
  {
    return FALSE;
  }
  if(b<1||b>3)
  {
    return FALSE;
  }
  a=Getelem(L,a);
  b=Getelem(L,b);
  return a-b;
}
//给三元组的各分量同乘一个比例因子(2)
ElemType CoRide(Triplet &L,ElemType a)
{
  int i;
  for(i=0;i<3;i++)
  {
    L.elem[i]=L.elem[i]*a;
  }
}
//销毁三元组 
DestroyTriplet(Triplet &L)
{
  free(L.elem);
  return OK;
}
int main()
{
  Triplet T;
  ElemType v0,v1,v2;
  printf("请输入三元组的值:\n");
  scanf("%f %f %f",&v0,&v1,&v2);
  initTriplet(T,v0,v1,v2);
  printf("输出三元组的值:");
  print(T);
  printf("\n");
  printf("获取三元组中第二个值:%f\n",Getelem(T,2));
  Putelem(T,2,11);
  printf("将三元组中第二个值替换为11:"); 
  print(T);
  printf("\n");
  printf("替换后三元组中最大值为:%f\n",max(T)); 
  printf("替换后三元组中最小值为:%f\n",min(T));
  printf("替换后三元组中第一个值和第二个值之和为:%f\n",sum(T,1,2));
  printf("替换后三元组中第一个值和第二个值之差为:%f\n",DifferenceVaule(T,1,2));
  printf("给三元组的各分量同乘一个比例因子(2):");
  CoRide(T,2);
  print(T);
  DestroyTriplet(T);
  return 0;
}


打印结果:

image.png


注意:


1:释放动态内存时要将结构体中的成员分别释放;(和开空间相对应)

2:int a[i] 中的i必须为整型,不能为浮点型

3:scanf读入时最后一个 %f 后面不能加空格

相关文章
|
6天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0
|
6天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
7 0
|
6天前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
12 0
|
6天前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
13 4
|
6天前
|
C语言
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
279 52
|
8天前
|
存储 缓存 算法
【C 言专栏】C 语言中的数据结构应用
【5月更文挑战第4天】本文探讨了C语言中的核心数据结构,包括数组、链表(单链表和双链表)、栈、队列、二叉树(如二叉搜索树和二叉堆)以及图结构。这些数据结构在程序设计中扮演着关键角色,如数组的快速访问、链表的动态管理、栈和队列的处理流程控制、树和图的复杂关系表示。理解并选择适当的数据结构可优化程序性能,而内存管理和算法优化则进一步提升效率。通过案例分析和展望未来发展趋势,本文旨在帮助读者深化对C语言数据结构的理解和应用。
【C 言专栏】C 语言中的数据结构应用
|
11天前
|
存储 C语言
【C 言专栏】C 语言中的数据类型详解
【4月更文挑战第30天】本文介绍了C语言中的核心数据类型,包括整型(short, int, long, long long)、浮点型(float, double)、字符型(char)、指针、数组、结构体、共用体和枚举。理解这些类型的特点和适用场景对于编写高效准确的C语言代码至关重要。选择合适的数据类型并注意转换和运算规则,能避免错误,为编程打下坚实基础。
|
17天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
17天前
|
C语言
C语言数据类型和变量(C语言零基础教程)
C语言数据类型和变量(C语言零基础教程)
|
17天前
|
C语言
数据结构中顺序栈的进栈和出栈用C语言表示
数据结构中顺序栈的进栈和出栈用C语言表示
19 1