数据结构 创建一个三元组程序 C语言
数据结构三元组1

国脉信息学院数据结构实验报告____09____级____x____班___2011___年__x月__xx___日姓名__ xxxxx____ 学号___xxxx___ 得分_____________ 1.实验题目实现创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操作。
2.需求分析本演示程序用vC编写,完成三元组的生成,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操①输入的形式和输入值的范围:创建一个三元组时需要输入三元组元素的值;取三元组的任意一个分量时输入所取元素的位置;置三元组的任意一个分量时输入需要置的元素的位置以及所置的值。
在所有输入中,元素的值都是整数②输出的形式:在所有操作中都显示操作提示以及操作后三元组的内容。
其中:创建一个三元组操作后显示该三元组;完成取三元组的任意一个分量求三元组的最大分量,求三元组的最小分量操作后符合要求元素的值,完成置三元组的任意一个分量后显示操作后的三元组。
③程序所能达到的功能:完成三元组的创建,取三元组的任意一个元素,置三元组的任意一个分量,得到三元组的最大值与最小值,显示三元组等④测试数据:A.创建三元组操作中依次输入随意的三个整型数生成一个三元组TB.取三元组中的分量操作中输入元素的位序,返回所取元素在三元组中的位置及它的值C.置换三元组中的元素操作输入要置换元素在三元组中的位序及置换后新的元素值,返回置换后新的三元组D.完成前面的操作后会自动的显示出新的三元组中最大值元素和最小值元素E.最后销毁三元组3.概要设计1)为了实现上述程序功能,需要定义三元组的抽象数据类型:ADT Triplett {数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合) }数据关系:R={<e1,e2,><e2,e3> }基本操作:InitTriplet(T, v1, v2, v3)操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值。
数据结构-C语言版:三元组例题

E[1..max]
m
n t (a) tl的存储结构
i jv (b) tl中第k个元素tl.e[k]
算法transpose是用类程序设计语言描述的一种稀疏矩阵转置
算法,即将三元组表tl1转置后放入三元组表tl2中。该算法通过
统计每列的非零元素的个数从而直接确定转置后的每行的第一 个非零元素存储位置。
类程序设计语言描述形式:符号&开头的参数为输入/输出参 数。算法中,“←”为赋值号。
6)执行算法,当
时,所有循环
(4);
一次也不执行。
cpos[col]← cpos[col]+1; 7)上述算法中共有4个for循环,将非零元
}
素的行号、列号交换并放入转置后矩阵的对
}
应位置的操作是在第
个for循环中
}
实现的。
参考答案
(1) tl2.t←tl1.t (2) num[tl1.e[t].j]+1 (3) cpos[1]←1 (4) tl2.e[q].v←tl1.e[p].v; (5) 顺序 (6) 非零元素个数为0(或tl2.t=0) (7) 4
if tl2.t<>0 then
第i行)非零元素的待插入位置//
{ for col←1 to tl1.n do
//col,t,p,q均为整型//
num[col]←0;
for t←1 to tl1.t do
num[tl1.e[t].j]←
(2) ;
(3)//置非零元素待插位置初始值//
for col←2 to tl1.n do
Algorithm transpose(tl1,&tl2) //tl1,tl2为三元组,tl2为转置后的三元组//
c语言三元组数据结构

c语言三元组数据结构C语言是一种广泛应用于嵌入式系统、操作系统、网络、游戏等领域的编程语言,而三元组数据结构则是C语言的一种基本数据结构。
在本文中,我们将分步骤阐述C语言三元组数据结构的概念、定义和使用方法等内容。
1. 概念三元组数据结构是由三个元素组成的一种数据结构,其中每个元素都可以是任意数据类型,包括基本数据类型和自定义数据类型。
三元组数据结构的主要目的是为了方便地存储和处理多个相关数据的信息。
2. 定义在C语言中,三元组数据结构可以使用结构体来实现。
结构体是一种自定义数据类型,它可以包含多个不同的数据类型成员。
下面是一个表示三元组的结构体定义:```struct Triple {int first;float second;char third;};```在上述定义中,我们定义了一个包含三个元素的结构体Triple,其中第一个元素是一个整数类型,第二个元素是一个浮点数类型,第三个元素是一个字符类型。
3. 使用方法使用三元组数据结构需要包含相应的头文件,并进行结构体的定义和初始化。
下面是一个使用三元组为学生记录成绩的例子:```#include <stdio.h>#include <stdlib.h>struct Triple {char name[20];int Math;int English;};void printScore(struct Triple student) {printf("Name: %s\n", );printf("Math: %d\n", student.Math);printf("English: %d\n", student.English);}int main() {struct Triple student1 = {"Tom", 80, 85};struct Triple student2 = {"Jerry", 90, 92};printScore(student1);printScore(student2);return 0;}```在上述代码中,我们定义了一个表示学生姓名、数学成绩和英语成绩的三元组数据结构。
c语言三元表达式

c语言三元表达式
C语言三元表达式是一种简单但强大的条件语句,用于在程序中执行快速完成条件判断。
其主要由一个条件(如果/除非)、一个表达式(真值/虚假值)和一个结果(真值/虚假值)构成,而这里的表达式就是用来确定程序的正确/错误的方法。
1、C语言三元表达式的基本结构
三元表达式的格式为:条件?表达式1:表达式2。
例如:
if(a < b)
answer = a;
else
answer = b;
它可以简写为Answer = (a<b)?a:b;
2、C语言三元表达式的语法
语法:条件?表达式1:表达式2。
如果条件为真,则表达式1被执行,否则执行表达式2,这称为三元运算符,
用法如下:
a >=
b ? A : B;
if(a >= b)
A;
else
B;
3、C语言三元表达式的用法
三元表达式用于指定一个变量的值,也可以用作另一个表达式的一部分,
例:
int max = (a>b)?a:b;
4、C语言三元表达式的应用
1)在C语言中,三元表达式可以用来替代if…else语句,这会节省多余的代码。
2)三元表达式甚至可以嵌套使用,实现更复杂的判断。
3)三元表达式还可以用在比较字符串的大小,并返回布尔型true或false,以判断字符串的大小。
4)三元表达式还可以作为函数参数,而函数正是C语言编程中最重要的技术,函数中可以使用三元表达式来实现复杂的判断。
总而言之,C语言三元表达式可以有效地替代if...else结构,提升程序的执行效率,增强代码的可读性,有利于编程者梳理逻辑,因此真实深受编程界关注和青睐。
《数据结构、算法与应用(C++语言描述)》习题参考答案doc

第1章概论1.数据、数据元素、数据结构、数据类型的含义分别是什么?数据:对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体考虑。
数据结构:数据元素之间的关系+运算,是以数据为成员的结构,是带结构的数据元素的集合,数据元素之间存在着一种或多种特定的关系。
数据类型:数据类型是用来区分不同的数据;由于数据在存储时所需要的容量各不相同,不同的数据就必须要分配不同大小的内存空间来存储,所有就要将数据划分成不同的数据类型。
数据类型包含取值范围和基本运算等概念。
2.什么是数据的逻辑结构?什么是数据的物理结构?数据的逻辑结构与物理结构的区别和联系是什么?逻辑结构:数据的逻辑结构定义了数据结构中数据元素之间的相互逻辑关系。
数据的逻辑结构包含下面两个方面的信息:①数据元素的信息;②各数据元素之间的关系。
物理结构:也叫储存结构,是指逻辑结构的存储表示,即数据的逻辑结构在计算机存储空间中的存放形式,包括结点的数据和结点间关系的存储表示。
数据的逻辑结构和存储结构是密不可分的,一个操作算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采与的存储结构。
采用不同的存储结构,其数据处理的效率是不同的。
因此,在进行数据处理时,针对不同问题,选择合理的逻辑结构和存储结构非常重要。
3.数据结构的主要操作包括哪些?对于各种数据结构而言,他们在基本操作上是相似的,最常用的操作有:●创建:建立一个数据结构;●清除:清除一个数据结构;●插入:在数据结构中增加新的结点;●删除:把指定的结点从数据结构中删除;●访问:对数据结构中的结点进行访问;●更新:改变指定结点的值或改变指定的某些结点之间的关系;●查找:在数据结构中查找满足一定条件的结点;●排序:对数据结构中各个结点按指定数据项的值,以升序或降序重新排列。
4.什么是抽象数据类型?如何定义抽象数据类型?抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。
数据结构三元组c语言源代码

数据结构三元组c语言源代码数据结构三元组C语言源代码在计算机科学领域,数据结构是一种组织和存储数据的方式,它可以让我们更高效地管理和处理数据。
在数据结构中,三元组是一种常用的结构,它由三个元素组成,分别对应于一个事物的不同方面。
在C 语言中,我们可以使用结构体来实现三元组。
首先,我们需要定义一个结构体来表示三元组。
在下面的代码中,我们定义了一个名为`triple`的结构体,它有三个成员变量分别为`a`,`b`和`c`。
```ctypedef struct {int a;double b;char c;} triple;```这个结构体中,`a`表示整型变量,`b`表示双精度浮点型变量,`c`表示字符型变量。
我们可以根据需要更改这些类型,以便适应特定的数据需求。
接下来,我们可以使用三元组结构体来创建存储数据的具体实例。
在下面的代码片段中,我们定义了一个名为`example`的三元组,它的第一,二,三个元素分别为1、3.14和'A'。
```ctriple example = { 1, 3.14, 'A' };```我们还可以定义一个函数来根据用户提供的数据创建一个新的三元组实例。
在下面的代码片段中,我们创建了一个名为`create_triple`的函数,并定义一个名为`new_triple`的三元组变量,它的元素根据用户输入而定。
```ctriple create_triple() {triple new_triple;printf("请输入一个整数:");scanf("%d", &new_triple.a);printf("请输入一个双精度浮点数:");scanf("%lf", &new_triple.b);printf("请输入一个字符:");scanf(" %c", &new_triple.c);return new_triple;}```最后,我们可以在程序中使用定义好的结构体和函数来处理我们的数据。
数据结构三元组

数据结构三元组引言数据结构是计算机科学中的重要概念,用于组织和管理数据。
其中,三元组是一种常见的数据结构,通常用于表示和存储有序的数据集合。
本文将介绍三元组的概念、应用和实现方式。
一、概念1. 三元组的定义三元组是由三个元素组成的有序序列,通常表示为(a, b, c),其中a、b、c分别表示三个元素。
三元组可以用于表示各种类型的数据,如数值、字符串、布尔值等。
2. 三元组的特点三元组具有以下特点:- 有序性:三元组中的元素按照一定的顺序排列,不可随意调换位置。
- 可变性:三元组中的元素可以根据需要进行修改,但元素的类型通常是固定的。
- 独特性:三元组中的元素互不相同,每个元素的值都是唯一的。
二、应用1. 数据库管理系统在数据库管理系统中,三元组常用于表示关系型数据库中的表。
每个表都由多个三元组组成,每个三元组表示表中的一条记录。
通过使用三元组,可以方便地对表中的数据进行增删改查操作。
2. 图论在图论中,三元组常用于表示有向图或无向图中的边。
每个边都可以用一个三元组表示,其中第一个元素表示边的起点,第二个元素表示边的终点,第三个元素表示边的权重。
通过使用三元组,可以方便地表示和操作图中的边。
3. 机器学习在机器学习中,三元组常用于表示训练数据集。
每个训练样本都可以用一个三元组表示,其中第一个元素表示输入数据,第二个元素表示输出数据,第三个元素表示样本的权重。
通过使用三元组,可以方便地表示和处理机器学习中的训练数据。
三、实现方式1. 数组使用数组来实现三元组是一种简单而常见的方式。
可以创建一个长度为3的数组,将三个元素依次存储在数组中。
通过索引可以方便地访问和修改数组中的元素。
2. 链表使用链表来实现三元组是一种灵活而高效的方式。
可以创建一个节点结构,每个节点包含三个指针,分别指向三个元素。
通过节点之间的链接,可以方便地遍历和操作三元组。
3. 字典使用字典来实现三元组是一种方便而易读的方式。
可以创建一个键值对,将三个元素分别作为键的不同属性,然后将键值对存储在字典中。
数据结构C语言版稀疏矩阵的三元组顺序表存储表示和实现

typedef int ElemType;// 稀疏矩阵的三元组顺序表存储表示define MAXSIZE 100 // 非零元个数的最大值typedef struct{int i;j; // 行下标;列下标ElemType e; // 非零元素值}Triple;typedef struct{Triple dataMAXSIZE+1; // 非零元三元组表;data0未用int mu;nu;tu; // 矩阵的行数、列数和非零元个数}TSMatrix;// 创建稀疏矩阵Mint CreateSMatrixTSMatrix M{int i;m;n;ElemType e;int k;printf"请输入矩阵的行数;列数;非零元素个数:逗号\n";scanf"%d;%d;%d";&M.mu;&M.nu;&M.tu;M.data0.i=0; // 为以下比较顺序做准备fori = 1; i <= M.tu; i++{do{printf"请按行序顺序输入第%d个非零元素所在的行1~%d;""列1~%d;元素值:逗号\n"; i;M.mu;M.nu;scanf"%d;%d;%d";&m;&n;&e;k=0;// 行或列超出范围ifm < 1 || m > M.mu || n < 1 || n > M.nuk=1;ifm < M.datai-1.i || m == M.datai-1.i&& n <= M.datai-1.j // 行或列的顺序有错k=1;}whilek;M.datai.i = m; //行下标M.datai.j = n; //列下标M.datai.e = e; //该下标所对应的值}return 1;}// 销毁稀疏矩阵M;所有元素置空void DestroySMatrixTSMatrix M{M.mu=0;M.nu=0;M.tu=0;}// 输出稀疏矩阵Mvoid PrintSMatrixTSMatrix M{int i;printf"\n%d行%d列%d个非零元素..\n";M.mu;M.nu;M.tu;printf"%4s%4s%8s\n"; "行"; "列"; "元素值";fori=1;i<=M.tu;i++printf"%4d%4d%8d\n";M.datai.i;M.datai.j;M.datai.e; }// 由稀疏矩阵M复制得到Tint CopySMatrixTSMatrix M;TSMatrix T{T=M;return 1;}// AddSMatrix函数要用到int compint c1;int c2{int i;ifc1<c2i=1;else ifc1==c2i=0;elsei=-1;return i;}// 求稀疏矩阵的和Q=M+Nint AddSMatrixTSMatrix M;TSMatrix N;TSMatrix Q{Triple Mp;Me;Np;Ne;Qh;Qe;ifM.mu=N.mureturn 0;ifM.nu=N.nureturn 0;Q.mu=M.mu;Q.nu=M.nu;Mp=&M.data1; // Mp的初值指向矩阵M的非零元素首地址Np=&N.data1; // Np的初值指向矩阵N的非零元素首地址Me=&M.dataM.tu; // Me指向矩阵M的非零元素尾地址Ne=&N.dataN.tu; // Ne指向矩阵N的非零元素尾地址Qh=Qe=Q.data; // Qh、Qe的初值指向矩阵Q的非零元素首地址的前一地址whileMp <= Me && Np <= Ne{Qe++;switchcompMp->i;Np->i{case 1:Qe=Mp;Mp++;break;case 0:// M、N矩阵当前非零元素的行相等;继续比较列switchcompMp->j;Np->j{case 1:Qe=Mp;Mp++;break;case 0:Qe=Mp;Qe->e+=Np->e;ifQe->e // 元素值为0;不存入压缩矩阵Qe--;Mp++;Np++;break;case -1:Qe=Np;Np++;}break;case -1:Qe=Np;Np++;}}ifMp>Me // 矩阵M的元素全部处理完毕whileNp<=Ne{Qe++;Qe=Np;Np++;}ifNp>Ne // 矩阵N的元素全部处理完毕whileMp<=Me{Qe++;Qe=Mp;Mp++;}Q.tu=Qe-Qh; // 矩阵Q的非零元素个数return 1;}// 求稀疏矩阵的差Q=M-Nint SubtSMatrixTSMatrix M;TSMatrix N;TSMatrix Q{int i;fori=1;i<=N.tu;i++N.datai.e=-1;AddSMatrixM;N;Q;return 1;}// 求稀疏矩阵的乘积Q=MNint MultSMatrixTSMatrix M;TSMatrix N;TSMatrix Q{int i;j;h=M.mu;l=N.nu;Qn=0;// h;l分别为矩阵Q的行、列值;Qn为矩阵Q的非零元素个数;初值为0 ElemType Qe;ifM.nu=N.mureturn 0;Q.mu=M.mu;Q.nu=N.nu;Qe=ElemType mallochlsizeofElemType; // Qe为矩阵Q的临时数组// 矩阵Q的第i行j列的元素值存于Qe+i-1l+j-1中;初值为0 fori=0;i<hl;i++Qe+i=0; // 赋初值0fori=1;i<=M.tu;i++ // 矩阵元素相乘;结果累加到Qeforj=1;j<=N.tu;j++ifM.datai.j==N.dataj.iQe+M.datai.i-1l+N.dataj.j-1 +=M.datai.e N.dataj.e;fori=1;i<=M.mu;i++forj=1;j<=N.nu;j++ifQe+i-1l+j-1=0{Qn++;Q.dataQn.e=Qe+i-1l+j-1;Q.dataQn.i=i;Q.dataQn.j=j;}freeQe;Q.tu=Qn;return 1;}// 算法5.1 P99// 求稀疏矩阵M的转置矩阵T..int TransposeSMatrixTSMatrix M;TSMatrix T{int p;q;col;T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;ifT.tu{q=1;forcol=1;col<=M.nu;++col //先将列转换成行forp=1;p<=M.tu;++p //再将行转换成列ifM.datap.j==col{T.dataq.i=M.datap.j;T.dataq.j=M.datap.i;T.dataq.e=M.datap.e;++q;}}return 1;}// 算法5.2 P100// 快速求稀疏矩阵M的转置矩阵T..int FastTransposeSMatrixTSMatrix M;TSMatrix T{int p;q;t;col;num;cpot;num=int mallocM.nu+1sizeofint; // 生成数组0不用cpot=int mallocM.nu+1sizeofint; // 生成数组0不用T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;ifT.tu{forcol=1;col<=M.nu;++colnumcol=0; // 设初值fort=1;t<=M.tu;++t // 求M中每一列含非零元素个数++numM.datat.j;cpot1=1;// 求第col列中第一个非零元在T.data中的序号forcol=2;col<=M.nu;++colcpotcol=cpotcol-1+numcol-1;forp=1;p<=M.tu;++p{col=M.datap.j;q=cpotcol;T.dataq.i=M.datap.j;T.dataq.j=M.datap.i;T.dataq.e=M.datap.e;++cpotcol;}}freenum;freecpot;return 1;}int main{TSMatrix A;B;C;printf"创建矩阵A: ";CreateSMatrix&A;PrintSMatrixA;printf"由矩阵A复制矩阵B: ";CopySMatrixA;&B;PrintSMatrixB;DestroySMatrix&B;printf"销毁矩阵B后:\n";PrintSMatrixB;printf"重创矩阵B:注意与矩阵A的行、列数相同;这样方便后面的测试""行、列分别为%d;%d\n"; A.mu; A.nu;CreateSMatrix&B;PrintSMatrixB;printf"矩阵C1A+B: ";AddSMatrixA;B;&C;PrintSMatrixC;DestroySMatrix&C;printf"矩阵C2A-B: ";SubtSMatrixA;B;&C;PrintSMatrixC;DestroySMatrix&C;printf"矩阵C3A的转置: ";TransposeSMatrixA;&C;PrintSMatrixC;DestroySMatrix&A;DestroySMatrix&B;DestroySMatrix&C;printf"创建矩阵A2: ";CreateSMatrix&A;PrintSMatrixA;printf"创建矩阵B3:行数应与矩阵A2的列数相同=%d\n";A.nu; CreateSMatrix&B;PrintSMatrixB;printf"矩阵C5AB: ";MultSMatrixA;B;&C;PrintSMatrixC;DestroySMatrix&A;DestroySMatrix&B;DestroySMatrix&C;printf"创建矩阵A: ";CreateSMatrix&A;PrintSMatrixA;FastTransposeSMatrixA;&B;printf"矩阵BA的快速转置: ";PrintSMatrixB;DestroySMatrix&A;DestroySMatrix&B;system"pause";return 0;}/输出效果:创建矩阵A: 请输入矩阵的行数;列数;非零元素个数:逗号3;3;3请按行序顺序输入第1个非零元素所在的行1~3;列1~3;元素值:逗号1;1;1请按行序顺序输入第2个非零元素所在的行1~3;列1~3;元素值:逗号1;3;2请按行序顺序输入第3个非零元素所在的行1~3;列1~3;元素值:逗号3;3;33行3列3个非零元素..行列元素值1 1 11 3 23 3 3由矩阵A复制矩阵B:3行3列3个非零元素..行列元素值1 1 11 3 23 3 3销毁矩阵B后:0行0列0个非零元素..行列元素值重创矩阵B:注意与矩阵A的行、列数相同;这样方便后面的测试行、列分别为3;3 请输入矩阵的行数;列数;非零元素个数:逗号3;3;3请按行序顺序输入第1个非零元素所在的行1~3;列1~3;元素值:逗号1;2;1请按行序顺序输入第2个非零元素所在的行1~3;列1~3;元素值:逗号2;1;2请按行序顺序输入第3个非零元素所在的行1~3;列1~3;元素值:逗号3;1;33行3列3个非零元素..行列元素值1 2 12 1 23 1 3矩阵C1A+B:3行3列6个非零元素..行列元素值1 1 11 2 11 3 22 1 23 1 33 3 3矩阵C2A-B:3行3列6个非零元素..行列元素值1 1 11 2 -11 3 22 1 -23 1 -33 3 3矩阵C3A的转置:3行3列3个非零元素..行列元素值1 1 13 1 23 3 3创建矩阵A2: 请输入矩阵的行数;列数;非零元素个数:逗号3;3;3请按行序顺序输入第1个非零元素所在的行1~3;列1~3;元素值:逗号1;1;1请按行序顺序输入第2个非零元素所在的行1~3;列1~3;元素值:逗号1;3;2请按行序顺序输入第3个非零元素所在的行1~3;列1~3;元素值:逗号3;3;33行3列3个非零元素..行列元素值1 1 11 3 23 3 3创建矩阵B3:行数应与矩阵A2的列数相同=3请输入矩阵的行数;列数;非零元素个数:逗号3;3;2请按行序顺序输入第1个非零元素所在的行1~3;列1~3;元素值:逗号1;3;1请按行序顺序输入第2个非零元素所在的行1~3;列1~3;元素值:逗号2;2;23行3列2个非零元素..行列元素值1 3 12 2 2矩阵C5AB:3行3列1个非零元素..行列元素值1 3 1创建矩阵A: 请输入矩阵的行数;列数;非零元素个数:逗号3;3;2请按行序顺序输入第1个非零元素所在的行1~3;列1~3;元素值:逗号1;2;2请按行序顺序输入第2个非零元素所在的行1~3;列1~3;元素值:逗号3;1;23行3列2个非零元素..行列元素值1 2 23 1 2矩阵BA的快速转置:3行3列2个非零元素..行列元素值1 3 22 1 2请按任意键继续. . . /。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构创建一个三元组程序C语言
#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3); Status DestroyTriplet(Triplet &T);
Status get(Triplet T,int i,ElemType &e);
Status put(Triplet &T,int i,ElemType e);
Status IsAscending(Triplet T);
Status IsDescending(Triplet T);
Status Max(Triplet T,ElemType &e);
Status Min(Triplet T,ElemType &e);
void PrintE(ElemType e);
void PrintT(Triplet T);
int main()
{
Triplet T;
int e;
Status flag;
flag = InitTriplet(T,90,95,100);
if(flag)
{
printf("初始化成功!\nT中元素是:");
PrintT(T);
}
else
{
printf("初始化失败!");
}
flag = get(T,1,e);
if(flag)
{
printf("第1个元素的值为:%d\n",e);
}
flag = put(T,2,96);
if(flag)
{
printf("将T中第2个元素改为96,重新输出T为:");
PrintT(T);
}
flag = IsAscending(T);
if(flag)
printf("T中元素是升序!\n");
else if(flag = IsDescending(T))
printf("T中元素是降序!\n");
else
printf("T中元素无序!\n");
flag = Max(T,e);
if(flag)
{
printf("T中最大元素是:");
PrintE(e);
}
flag = Min(T,e);
if(flag)
{
printf("T中最小元素是:");
PrintE(e);
}
DestroyTriplet(T);
printf("销毁T后,T = %u\n",T);
printf("\n");
return 0;
}
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3) {
T = (ElemType*)malloc(3*sizeof(ElemType));
if(!T)
exit(-1);
T[0] = v1,T[1] = v2,T[2] = v3;
return OK;
}
Status DestroyTriplet(Triplet &T)
{
free(T);
T = NULL;
return OK;
}
Status get(Triplet T,int i,ElemType &e)
{
e = T[i-1];
return OK;
}
Status put(Triplet &T,int i,ElemType e)
{
T[i-1] = e;
return OK;
}
Status IsAscending(Triplet T)
{
return(T[0] <= T[1])&&(T[1] <= T[2]);
}
Status IsDescending(Triplet T)
{
return(T[0] >= T[1])&&(T[1] >= T[2]);
}
Status Max(Triplet T,ElemType &e)
{
e = (T[0] >= T[1])?(T[0] >= T[2]?T[0]:T[2]):(T[1] >= T[2]?T[1]:T[2]);
return OK;
}
Status Min(Triplet T,ElemType &e)
{
e = (T[0] <= T[1])?(T[0] <= T[2]?T[0]:T[2]):(T[1] <= T[2]?T[1]:T[2]);
return OK;
}
void PrintE(ElemType e)
{
printf("%d\n",e);
}
void PrintT(Triplet T)
{
printf("%d,%d,%d\n",T[0],T[1],T[2]); }。