首页 > 代码库 > 数据结构三元组操作

数据结构三元组操作

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

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 0typedef 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\n",i,elem);    }}void main(){   Triplet T,*t=&T;   int e1,e2,e3,e,*p=&e;   int i;   printf("\n请输入三元组元素e1 e2 e3:\n");   scanf("%d%d%d",&e1,&e2,&e3);   printf("输出的三元组为:\n");   InitTriplet(t,e1,e2,e3);   Print(T);   printf("\n请输入要取出的三元组分量的位序\n");   scanf("%d",&i);   if(i>=1&&i<=3){       Get(T,i,p);       printf("\n三元组中第%d个元素是:%d\n",i,*p);   }else{       printf("输入不正确\n");   }   printf("\n请输入要置换的三元组分量的位序i:");   scanf("%d",&i);   if (i>=1&&i<=3)   {        printf("\n请输入要置换成新的元素为:");        scanf("%d",&e);        Put(t,i,e);        printf("\n置换后新的三元组T为:\n");        Print(T);   }else{      printf("输入不正确!\n");   }   printf("%d\n",Max(T,p));   printf("\n最大值为:%d\n",e);   Min(T,p);   printf("\n最小值为:%d\n",e);   DestoryTriplet(t); }

3.运行结果

4.总结

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