/*
数据结构C语言版 抽象数据类型三元组的表示和实现
p12
编译环境:Dev-C++ 4.9.9.2
日期:2011年2月9日
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
// 以下2行可根据需要选用一个(且只能选用一个),而不需改变基本
// 操作
// 定义抽象数据类型ElemType在本程序中为整型
typedef int ElemType;
// 定义抽象数据类型ElemType在本程序中为双精度型
// typedef double ElemType;
typedef ElemType *Triplet; // 由InitTriplet分配三个元素存储空间
// Triplet类型是ElemType类型的指针,存放ElemType类型的地址
// 构造三元组T,依次置T的三个元素的初值为v1,v2和v3。
int InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
{
// 动态分配三个元素的空间(ElemType *)这是强制类型转换
// malloc的参数是多少字节。
*T = (ElemType *)malloc(3 * sizeof(ElemType));
if(!*T)
exit(0);
// 进行赋值,赋得是值,而不是地址。
(*T)[0] = v1; // *的优先级比[]的低,所以要加括号
(*T)[1] = v2;
(*T)[2] = v3;
return 1;
}
// 销毁三元组T。
int DestroyTriplet(Triplet *T)
{
// 先将分配给T的空间释放,注意只要是分配了空间的,用完之后记
// 得一定要释放空间,不然就会引起内存泄漏。malloc与free搭配
// 使用。
free(*T);
// 然后置T为空
*T = NULL;
return 1;
}
// 用e返回T的第i元的值即将第i个值赋给e,因为要传递值到主调函数中,
// 所以使用指针。
int Get(Triplet T, int i, ElemType *e)
{
if (i < 1 || i > 3)
return 0;
// 此时的T[i-1]表示内容而不是一个地址,因为它使用的是[],就