數據結構三元組操作


  復習數據結構,發現今天才真正了解數據結構是怎么一回事。當初學的完全忘了,這次從新開始吧。

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\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語言基礎要扎實,指針,內存動態分配等需要復習加強。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM