C语言数据结构-三元数组Triplet

#include <stdio.h>
#include<stdlib.h>

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

typedef int Status;

typedef int ElemType;
typedef int *Triplet;

Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){
    //操作结果:构造三元组T,元素e1,e2,e3分别赋值给v1,v2,v3
    T = (ElemType *) malloc (3 * sizeof(ElemType));//分配三个元素的存储空间
    if (!T) exit(OVERFLOW);//分配空间失败
    T[0] = v1;
    T[1] = v2;
    T[2] = v3;
    return OK;
}//InitTriplet

Status DestoryTriplet(Triplet &T) {
    free(T);
    T = NULL;
    return OK;
}

Status Get(Triplet &T, int i, ElemType &e){
    if(i <1 || i > 3) {
        return ERROR;
    }

    e = T[i - 1];
    return OK;
}

Status Put(Triplet &T, int i, ElemType e) {
     if(i <1 || i > 3) {
        return ERROR;
    }

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

int main() {

	Triplet T;
	ElemType e, e1, e2, e3, r;
	e1 = 3;
	e2 = 5;
	e3 = 7;

	InitTriplet(T, e1, e2, e3);

    printf("====== e1 ========\n");
    Get(T, 1, e);
    printf("%-4d\n", e);
    printf("\n");

    printf("====== e2 ========\n");
    Get(T, 2, e);
    printf("%-4d\n", e);
    printf("\n");

    printf("====== e3 ========\n");
    Get(T, 3, e);
    printf("%-4d\n", e);
    printf("\n");

    e = 6;
    printf("====== put 6 e3 ========\n");
    Put(T, 3, e);
    printf("%-4d\n", e);
    printf("\n");

    printf("====== r = 1 ========\n");
    r = IsAscending(T);
    printf("%-4d\n", r);
    printf("\n");

    printf("====== r = 0 ========\n");
    r = IsDescending(T);
    printf("%-4d\n", r);
    printf("\n");

    printf("======  Max ========\n");
    Max(T, e);
    printf("%-4d\n", e);
    printf("\n");

    printf("======  Min ========\n");
    Min(T, e);
    printf("%-4d\n", e);
    printf("\n");

    DestoryTriplet(T);

    printf("====== T is null ? ========\n");
    if(T == NULL) {
        printf("t is null\n");
    } else {
        printf("t is not null\n");
    }

	return 0;
}

  

posted @ 2020-06-26 16:55  金色元年  阅读(816)  评论(0编辑  收藏  举报