• 数据结构三元组操作


      复习数据结构,发现今天才真正了解数据结构是怎么一回事。当初学的完全忘了,这次从新开始吧。

    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的值。
            DestroyTriplet(T)  
                 操作结果:三元组T被销毁。
               Get(T, i,e)
                 初始条件:三元组T已存在,0<i<4    
                  操作结果: 用e返回T的第i个元素的值。
                Put(T, i, e)
                 初始条件:三元组T已存在0<i<4,
                 操作结果:改变T的第i个元素值为e。
            若存在,返回元素在表中的位置;若不存在,返回-1.
            Max(T,e)  
            初始条件:三元组T已存在
                 操作结果:用e返回T的3个元素中的最大值。
            Min(T,e)
            初始条件:三元组T已存在
                操作结果:用e返回T的3个元素中的最小值。
            Print(T)
            初始条件:三元组T已存在
            操作结果:打印三元组T的各个元素值
    */

    2.源代码

    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    
    #define OVERFLOW -2
    #define OK 1
    #define  ERROR 0
    typedef int status;
    
    typedef int ElemType;
    
    typedef ElemType *Triplet;
    
    int InitTriplet(Triplet *T,int v1,int v2,int v3){//构造三元组T,依次赋值v1,v2,v3    
       (*T)=(int *)malloc(3*sizeof(int));
       if(!T) exit(OVERFLOW);
       (*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3;
       return OK;
    
    }
    
    int DestoryTriplet(Triplet *t){//销毁三元组
        free(*t);
        *t=NULL;
    
        return OK;
    }
    
    
    int Get(Triplet t,int i,int *e){
        //去三元组的一个分量,用e返回t的第i元素的值
         if (i<1||i>3)  return ERROR;
         
         *e=t[i-1];
    
         return OK;
    }
    
    int Put(Triplet *t,int i,int e){
        if (i<1||i>3) return OVERFLOW;
    
        (*t)[i-1]=e;
    
        return OK;
          
    }
    
    int Max(Triplet T,int *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 Min(Triplet T,int *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 Print(Triplet T){
        int i;
    
        ElemType elem, *p=&elem;
    
        for(i=1;i<=3;i++){
            Get(T,i,p);
             printf("T[%d]=%d
    ",i,elem);
        }
    
    }
    void main(){
       Triplet T,*t=&T;
       int e1,e2,e3,e,*p=&e;
       int i;
    
       printf("
    请输入三元组元素e1 e2 e3:
    ");
       scanf("%d%d%d",&e1,&e2,&e3);
       printf("输出的三元组为:
    ");
       InitTriplet(t,e1,e2,e3);
       Print(T);
       printf("
    请输入要取出的三元组分量的位序
    ");
       scanf("%d",&i);
       if(i>=1&&i<=3){
           Get(T,i,p);
           printf("
    三元组中第%d个元素是:%d
    ",i,*p);
    
       }else{
           printf("输入不正确
    ");
       }
       printf("
    请输入要置换的三元组分量的位序i:");
       scanf("%d",&i);
       if (i>=1&&i<=3)
       {
            printf("
    请输入要置换成新的元素为:");
            scanf("%d",&e);
            Put(t,i,e);
            printf("
    置换后新的三元组T为:
    ");
            Print(T);
       }else{
          printf("输入不正确!
    ");
       }
       printf("%d
    ",Max(T,p));
       printf("
    最大值为:%d
    ",e);
       Min(T,p);
       printf("
    最小值为:%d
    ",e);
       DestoryTriplet(t);
     
    }

    3.运行结果

    4.总结

        C语言基础要扎实,指针,内存动态分配等需要复习加强。

  • 相关阅读:
    ES6 常用总结——第一章(简介、let、const)
    那些说自己逻辑好的,过来切磋下啊
    纯css3的上下左右提示框几种方法
    遮罩的几种写法
    送给HTML的初学者——H5的基本结构和标签
    H5柱状图2D小插件
    小白学习H5从入门到放弃
    layui学习笔记
    windows系统安装vue及其配置
    友情链接
  • 原文地址:https://www.cnblogs.com/yaopan007/p/3871871.html
Copyright © 2020-2023  润新知