实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 创建 取值 置换 打印/销毁三元组等功能 数据结构(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 后面不能加空格

相关文章
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
57 4
|
2月前
|
C语言
大学生期末C语言实验(学生成绩和鞍点)
大学生期末C语言实验(学生成绩和鞍点)
269 0
大学生期末C语言实验(学生成绩和鞍点)
01_设计一个有getMin功能的栈
01_设计一个有getMin功能的栈
|
2月前
【数据结构】二叉搜索树的功能实现详解
【数据结构】二叉搜索树的功能实现详解
35 0
|
3月前
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
3月前
|
存储 测试技术 C语言
C语言实现链表的各种功能
本文详细介绍了如何使用C语言实现链表的各种功能,包括链表节点结构的定义与操作函数的实现。链表作为一种常用的数据结构,具有节点自由插入删除、动态变化等特点。文中通过`link_list.h`和`link_list.c`两个文件,实现了链表的初始化、插入、删除、查找、修改等核心功能,并在`main.c`中进行了功能测试。这些代码不仅展示了链表的基本操作,还提供了丰富的注释帮助理解,适合作为学习链表的入门资料。
|
3月前
|
网络协议 C语言
C语言 网络编程(十四)并发的TCP服务端-以线程完成功能
这段代码实现了一个基于TCP协议的多线程服务器和客户端程序,服务器端通过为每个客户端创建独立的线程来处理并发请求,解决了粘包问题并支持不定长数据传输。服务器监听在IP地址`172.17.140.183`的`8080`端口上,接收客户端发来的数据,并将接收到的消息添加“-回传”后返回给客户端。客户端则可以循环输入并发送数据,同时接收服务器回传的信息。当输入“exit”时,客户端会结束与服务器的通信并关闭连接。
|
3月前
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。
|
3月前
|
C语言
C语言 网络编程(九)并发的UDP服务端 以线程完成功能
这是一个基于UDP协议的客户端和服务端程序,其中服务端采用多线程并发处理客户端请求。客户端通过UDP向服务端发送登录请求,并根据登录结果与服务端的新子线程进行后续交互。服务端在主线程中接收客户端请求并创建新线程处理登录验证及后续通信,子线程创建新的套接字并与客户端进行数据交换。该程序展示了如何利用线程和UDP实现简单的并发服务器架构。
|
4月前
|
C语言 索引
C语言编译环境中的 调试功能及常见错误提示
这篇文章介绍了C语言编译环境中的调试功能,包括快捷键操作、块操作、查找替换等,并详细分析了编译中常见的错误类型及其解决方法,同时提供了常见错误信息的索引供参考。

热门文章

最新文章