数据结构与算法三元组的代码实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法三元组的代码实现相关的知识,希望对你有一定的参考价值。

开始复习数据结构和算法,好长时间没写c了,顺便复习一下

三元组的表示与实现

#include<iostream>
#include <stdlib.h>

using namespace std;

//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

//函数结果类型
typedef int Status;

//数据元素类型
typedef int ElemType;

//定义一个三元组,初始化工作有InitTriplet函数进行
typedef ElemType * Triplet;

//初始化函数
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);

//销毁函数
Status DestroyTriplet(Triplet &T);

//取得三元组的第i个元素赋值给e
Status Get(Triplet T, int i, ElemType &e);

//改变三元组的第i个元素的值为e
Status    Put(Triplet &T, int i, ElemType &e);

//判断三元组是否升序排列    1代表是  0代表不是
Status isAscending(Triplet T);

//判断三元组是否降序排列    1代表是  0代表不是
Status isDescending(Triplet T);

//用e返回三元组中最大值
Status Max(Triplet T, ElemType &e);


//用e返回三元组中最小值
Status Min(Triplet T, ElemType &e);

//初始化函数
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){
    //给三元组分配空间
    T = (ElemType *)malloc(3 * sizeof(ElemType));
    //如果分配失败,返回overFlow结果状态
    if (!T)
        exit(OVERFLOW);
    //给数组初初始化数值
    T[0] = v1;
    T[1] = v2;
    T[2] = v3;
    //返回ok状态
    return OK;
}

//销毁函数
Status DestroyTriplet(Triplet &T){
    free(T);
    T = NULL;
    return OK;
}

//取得三元组的第i个元素赋值给e
Status Get(Triplet T, int i, ElemType &e){
    if (i<1 || i>3)
        return ERROR;
    e = T[i - 1];
    return OK;
}

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

//判断三元组是否升序排列    1代表是  0代表不是
Status isAscending(Triplet T){
    if (T[0] > T[1] && T[1] > T[2]){
        return 1;
    }else{
        return 0;
    }
}

//判断三元组是否降序排列    1代表是  0代表不是
Status isDescending(Triplet T){
    return (T[0] < T[1] && T[1] < T[2]);
}


//用e返回三元组中最大值
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;
}


//用e返回三元组中最小值
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 main(){
    //定义一个三元组
    Triplet triplet;
    //初始化三元组,元素分别是1,2,3
    InitTriplet(triplet, 1,2,3);
    cout << triplet[0] << endl;

    int a;
    //将三元组的第2个元素赋值给a,所以a应该等于2
    Get(triplet, 2, a);
    cout << a << endl;

    int b = 6;
    //将三元组的第三个元素改为6
    Put(triplet, 1, b);
    cout << triplet[0] << endl;

    //应该返回0,因为三元组为6,2,3
    cout << isAscending(triplet)<<endl;

    //也应该是 0
    cout << isDescending(triplet) << endl;

    //最大值和最小值
    int c;
    Max(triplet, c);

    int d;
    Min(triplet, d);

    cout << "最大值:"<<c <<"最小值"<< d << endl;
}

运行结果

技术分享

 

以上是关于数据结构与算法三元组的代码实现的主要内容,如果未能解决你的问题,请参考以下文章

使用 Gensim 获取三元组的问题

电网知识图谱项目总结python代码实现RDF三元组自动化标注

电网知识图谱项目总结python代码实现RDF三元组自动化标注

电网知识图谱项目总结python代码实现RDF三元组自动化标注

算法leetcode|6136. 算术三元组的数目(rust和go全部双百)

算法leetcode|6136. 算术三元组的数目(rust和go全部双百)