用c语言实现《数据结构与算法(严蔚敏版)》三元组的基本操作

(大二数据结构课的Lab1)

以下源代码(因为对指针不太清楚,所以用到了c++中的引用,而且这也是书中所给算法框架的做法)

#include <stdio.h>
#include <stdlib.h>typedef int Status;
typedef int ElemType;
typedef ElemType* Triplet;#define OK 1
#define ERROR 2
#define True 1
#define False 0
#define OVERFLOW -2//构造三元组
Status InitTriplet (Triplet &T, ElemType v1, ElemType v2, ElemType v3);
//销毁三元组
Status DestroyTryplet (Triplet &T);
//用e返回T的第i元的值
Status Get (Triplet T, ElemType i, ElemType &e);
//改变T的第i元的值为e
Status Put (Triplet &T, ElemType i, ElemType e);
//如果T的三个元素升序排列,返回1,否则返回0
Status IsAscending (Triplet T);
//如果T的三个元素降序排列,返回1,否则返回0
Status IsDescending (Triplet T);
//用e返回T的3个元素中的最大值
Status Max (Triplet T, ElemType &e);
//用e返回T的3个元素中的最小值
Status Min (Triplet T, ElemType &e);Status Min (Triplet T, ElemType &e)
{e = T[0];if (T[0] > T[1]) e = T[1];if (e > T[2]) e = T[2];return OK;
}Status Max (Triplet T, ElemType &e)
{e = T[0];if (T[0] < T[1]) e = T[1];if (e < T[2]) e = T[2];return OK;
}Status IsDescending (Triplet T)
{if (T[0] < T[1] || T[0] < T[2] ){return False;}else if (T[1] < T[2]){return False;}else{return True;}
}Status IsAscending (Triplet T)
{if (T[0] > T[1] || T[0] > T[2] ){return False;}else if (T[1] > T[2]){return False;}else{return True;}
}Status Put (Triplet &T, ElemType i, ElemType e)
{if(i < 1 || i > 3) exit(ERROR);T[i - 1] = e;return OK;
}Status Get (Triplet T, ElemType i, ElemType &e)
{if(i < 1 || i > 3) exit(ERROR);e = T[i - 1];return OK;
}Status DestroyTryplet (Triplet &T)
{free(T);return OK;
}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;
}int main()
{Triplet T;ElemType e, e1, e2, e3, i;printf("输入三个整数并且用空格分开:\n");scanf("%d %d %d", &e1, &e2, &e3);if (!InitTriplet(T, e1, e2, e3))  return 0;Max(T, e);printf("最大的整数是: %d\n", e);Min(T, e);printf("最小的整数是: %d\n", e);printf("Ascending order (yes: 1, no: 0): %d\n", IsAscending(T));printf("Descending order (yes: 1, no: 0): %d\n", IsDescending(T));printf("请输入你想要更改的元素的位置:\n");scanf("%d", &i);printf("你想要把元素 %d 改为:\n", i);scanf("%d", &e);Put(T, i, e);printf("请输入你想查看的元素的位置:\n");scanf("%d", &i);Get(T, i, e);printf("元素 %d 是: %d\n", i, e);DestroyTryplet(T);return 0;
}

以下代码实现了两组三元组的加法和减法。

#include <stdio.h>
#include <stdlib.h>typedef int Status;
typedef int ElemType;
typedef ElemType* Triplet;#define OK 1
#define ERROR 2
#define True 1
#define False 0
#define OVERFLOW -2//构造三元组
Status InitTriplet (Triplet &T, ElemType v1, ElemType v2, ElemType v3);
//销毁三元组
Status DestroyTryplet (Triplet &T);
//把两个三元组的元素对应相加并生成新的三元组T_plus
Status Plus (Triplet T1, Triplet T2, Triplet T3);
//用T1中的元素对应减去T2中的元素并生成新的三元组T_minus
Status Minus (Triplet T1, Triplet T2, Triplet T3);Status Minus (Triplet T1, Triplet T2, Triplet T3)
{T3[0] = T1[0] - T2[0];T3[1] = T1[1] - T2[1];T3[2] = T1[2] - T2[2];return OK;
}Status Plus (Triplet T1, Triplet T2, Triplet T3)
{T3[0] = T1[0] + T2[0];T3[1] = T1[1] + T2[1];T3[2] = T1[2] + T2[2];return OK;
}Status DestroyTryplet (Triplet &T)
{free(T);return OK;
}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;
}int main()
{Triplet T1, T2, T_plus, T_minus;ElemType e1, e2, e3;ElemType E1, E2, E3;printf("请输入三个整数并且用空格隔开:\n");scanf("%d %d %d", &e1, &e2, &e3);printf("请输入另外三个整数并且用空格隔开:\n");scanf("%d %d %d", &E1, &E2, &E3);if (!InitTriplet(T1, e1, e2, e3))  return 0;if (!InitTriplet(T2, E1, E2, E3))  return 0;InitTriplet(T_plus, 0, 0, 0);InitTriplet(T_minus, 0, 0, 0);Plus(T1, T2, T_plus);Minus(T1, T2, T_minus);printf("两组数据的和为: %d %d %d\n", T_plus[0], T_plus[1], T_plus[2]);printf("两组数据的差为: %d %d %d\n", T_minus[0], T_minus[1], T_minus[2]);DestroyTryplet(T1);DestroyTryplet(T2);DestroyTryplet(T_minus);DestroyTryplet(T_plus);return 0;
}

《数据结构与算法》三元组的基本操作相关推荐

  1. 数据结构与算法 三元组转置算法(稀疏矩阵)

    三元组稀疏矩阵转置算法及相关讨论 本篇文章介绍稀疏矩阵中的数据如何存储的更加高效,以及矩阵转置的优良算法------三元组稀疏矩阵转置算法. 稀疏矩阵定义:矩阵中非零元素的个数远远小于矩阵元素的总数, ...

  2. 数据结构与算法---堆的基本操作

    堆的定义 堆可以看做是一种特殊的树,堆结构满足两个条件: 1.堆是一个完全二叉树. 2.堆的每一个节点的值都大于等于(或小于等于)其子节点的值. 大于等于子节点的值我们叫它:大顶堆 小于等于子节点的值 ...

  3. java树的基本知识_Java数据结构和算法(二)树的基本操作

    Java数据结构和算法(二)树的基本操作 一.树的遍历 二叉树遍历分为:前序遍历.中序遍历.后序遍历.即父结点的访问顺序 1.1 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子 ...

  4. 数据结构与算法-2-链表的基本操作-查找

    数据结构与算法-2-链表的基本操作-查找(c语言) 本文是单链表的C语言实现方法,包括单链表的创建.插入.删除.修改.查找等基本操作. 链表结点的类型定义 /*链式存储结构的头结点*/ typedef ...

  5. 数据结构与算法-4-链表的基本操作-增

    数据结构与算法-4-链表的基本操作-增 注意:以下为顺序存储结构实现 相关的头文件 /*以下为头文件SqList.h是用于定义相关函数的头文件*/ #pragma once #define LIST_ ...

  6. 【数据结构与算法】常见数据结构及基本操作

    数据结构及基本操作 1.数据结构与算法常见概念: 2.数据结构: 2.1线性结构: 基本概念 数组 字符串 队列 栈 链表 2.2树形结构 基本概念 二叉树的递归遍历 二叉树的非递归遍历 2.3图形结 ...

  7. 数据结构与算法基础01:绪论

    目录 1. 程序设计 = 数据结构 + 算法 2. 基本概念和术语 2.1 数据 2.2 数据元素 2.3 数据对象 2.4 数据结构 3. 逻辑结构和物理结构 3.1 逻辑结构 3.2 物理结构(存 ...

  8. 基础数据结构和算法概念

    本文涉及更多的是概念,代码部分请参考之前写过的 2 篇博客 排序算法 基于Javascript 基本数据结构和查找算法 本文主要是基础的数据结构和算法概念,可能部分地方会涉及更高级的算法和算法,具体内 ...

  9. Python数据结构与算法(1.1)——数据结构与算法导论

    Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...

最新文章

  1. @SupperssWarnings注解
  2. python 使用raise语句主动抛出异常(Exception)、将异常抛出给上一级
  3. LeetCode——DFS
  4. 删除用户账号的命令 mysql_【Mysql】常用指令之——用户操作(创建,授权,修改,删除)...
  5. day14.生成器进阶,推导式
  6. 陆奇最新投资方向:机器人、生物科技、远程工作、云计算技术、新材料、新消费娱乐等,奇绩创坛春季创业营线上开营
  7. KINGBASE人大金仓数据库安装配置手册
  8. linux python2.7 sqlite3_为Python安装准备_tkinter和sqlite3(无管理员权限)
  9. 【USB电压电流表】基于STM32F103C8T6 for Arduino
  10. 第二章 Dubbo框架
  11. 解决The APR based Apache Tomcat Native library which allows optimal performance in production environ
  12. transformer 模型的decoder部分 带gif动图
  13. Windows双开或者多开微信的简单做法
  14. Expression is not assignable
  15. mysql 备份 恢复
  16. SpamSieve for Mac(垃圾邮件过滤软件)
  17. 华为手机疑似鸿蒙,疑似华为自研手机系统现身:名字叫鸿蒙?
  18. java学习之路之javaSE基础1
  19. 北京交通大学计算机学院保研,北京交通大学保研情况怎么样,保研率高不高
  20. 第一套微信小程序教程目录(转载侵删)

热门文章

  1. 如何用Windows自带命令修改文件和图片的MD5
  2. 上海市所有的街道SQL
  3. 融媒宝入门教程(二):融媒宝如何如何做自媒体一键发布?
  4. 创新先行者Barsetto百胜图咖啡
  5. 分享:aop 相关术语介绍之 本人通俗易懂大白话介绍
  6. 绿色债券数据集2016-2021(含交易代码、债券简称、发行规模期限等多指标数据)
  7. Device eth1 has different MAC address
  8. 「奇淫技巧」如何写最少的代码
  9. 游戏图形学——屏幕后期特效:水波纹
  10. 二分查找法-函数形式