《数据结构与算法》三元组的基本操作
用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.堆的每一个节点的值都大于等于(或小于等于)其子节点的值. 大于等于子节点的值我们叫它:大顶堆 小于等于子节点的值 ...
- java树的基本知识_Java数据结构和算法(二)树的基本操作
Java数据结构和算法(二)树的基本操作 一.树的遍历 二叉树遍历分为:前序遍历.中序遍历.后序遍历.即父结点的访问顺序 1.1 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子 ...
- 数据结构与算法-2-链表的基本操作-查找
数据结构与算法-2-链表的基本操作-查找(c语言) 本文是单链表的C语言实现方法,包括单链表的创建.插入.删除.修改.查找等基本操作. 链表结点的类型定义 /*链式存储结构的头结点*/ typedef ...
- 数据结构与算法-4-链表的基本操作-增
数据结构与算法-4-链表的基本操作-增 注意:以下为顺序存储结构实现 相关的头文件 /*以下为头文件SqList.h是用于定义相关函数的头文件*/ #pragma once #define LIST_ ...
- 【数据结构与算法】常见数据结构及基本操作
数据结构及基本操作 1.数据结构与算法常见概念: 2.数据结构: 2.1线性结构: 基本概念 数组 字符串 队列 栈 链表 2.2树形结构 基本概念 二叉树的递归遍历 二叉树的非递归遍历 2.3图形结 ...
- 数据结构与算法基础01:绪论
目录 1. 程序设计 = 数据结构 + 算法 2. 基本概念和术语 2.1 数据 2.2 数据元素 2.3 数据对象 2.4 数据结构 3. 逻辑结构和物理结构 3.1 逻辑结构 3.2 物理结构(存 ...
- 基础数据结构和算法概念
本文涉及更多的是概念,代码部分请参考之前写过的 2 篇博客 排序算法 基于Javascript 基本数据结构和查找算法 本文主要是基础的数据结构和算法概念,可能部分地方会涉及更高级的算法和算法,具体内 ...
- Python数据结构与算法(1.1)——数据结构与算法导论
Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...
最新文章
- @SupperssWarnings注解
- python 使用raise语句主动抛出异常(Exception)、将异常抛出给上一级
- LeetCode——DFS
- 删除用户账号的命令 mysql_【Mysql】常用指令之——用户操作(创建,授权,修改,删除)...
- day14.生成器进阶,推导式
- 陆奇最新投资方向:机器人、生物科技、远程工作、云计算技术、新材料、新消费娱乐等,奇绩创坛春季创业营线上开营
- KINGBASE人大金仓数据库安装配置手册
- linux python2.7 sqlite3_为Python安装准备_tkinter和sqlite3(无管理员权限)
- 【USB电压电流表】基于STM32F103C8T6 for Arduino
- 第二章 Dubbo框架
- 解决The APR based Apache Tomcat Native library which allows optimal performance in production environ
- transformer 模型的decoder部分 带gif动图
- Windows双开或者多开微信的简单做法
- Expression is not assignable
- mysql 备份 恢复
- SpamSieve for Mac(垃圾邮件过滤软件)
- 华为手机疑似鸿蒙,疑似华为自研手机系统现身:名字叫鸿蒙?
- java学习之路之javaSE基础1
- 北京交通大学计算机学院保研,北京交通大学保研情况怎么样,保研率高不高
- 第一套微信小程序教程目录(转载侵删)