Trilplet的表示和实现 教材例1-7

重新学习数据结构,感觉还行,坚持!

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

#define  TRUE        1
#define  FALSE       0
#define  OK          1
#define  ERROR       0
#define  INFEASIBLE  -1
#define  OVERFLOW    -2

#define  ElemType    int     //定义数据类型为int型

typedef  int  Status;

typedef ElemType *   Triplet;

Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){
		//构造三元组T,依次置T的3个元素的初值为v1,v2,v3.
		T = (ElemType *)malloc(3 * sizeof(ElemType));   //分配3个元素的存储空间
		if(!T) exit(OVERFLOW);   //分配存储空间失败
		T[0] = v1;
		T[1] = v2;
		T[2] = v3;
		return OK;
}//InitTriplet

Status DestroyTriplet(Triplet &T){
		//销毁三元组T。
		free(T);
		T = NULL;
		return OK;
}//DestroyTriplet

Status Get(Triplet T, int i, ElemType &e){
		//1<=i<=3,用e返回T的第i元的值
		if(i<1  ||  i>3)
				return ERROR;
		e = T[i-1];
		return OK;
}//Get

Status Put(Triplet &T, int i, ElemType e){
		//1<=i<=3,置T的第i元的值为e
		if(i<1   ||   i>3)
				return ERROR;
		T[i-1] = e;
		return OK;
}//Put

Status IsAscending(Triplet T){
		//如果T的3个元素按升序排列,则返回1,否则返回0
		return(T[0]<=T[1]) && (T[1]<=T[2]);
}//IsAscending

Status IsDescending(Triplet T){
		//如果T的3个元素按降序排列,则返回1,否则返回0
		return(T[0]>=T[1]) && (T[1]>=T[2]);
}//IsDecending

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;
}//Max

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;
}//Min




int main()
{
		Triplet T;
		int m;
		InitTriplet(T, 3, 5, 8);
		cout<<T[0]<<" "<<T[1]<<" "<<T[2]<<" "<<endl;
		Get(T, 2, m);
		cout<<m<<endl;
		Put(T, 2, 18);
		cout<<IsAscending(T)<<endl;
		cout<<IsDescending(T)<<endl;
		Max(T, m);
		cout<<"max:  "<<m<<endl;
		Min(T, m);
		cout<<"min:  "<<m<<endl;
		DestroyTriplet(T);
		return 0;
}

你可能感兴趣的:(实现)