1. 程式人生 > >抽象資料型別三元組Triplet基本操作與實現 嚴蔚敏版

抽象資料型別三元組Triplet基本操作與實現 嚴蔚敏版

這個部落格基本操作大部分來自教材《資料結構C語言版》嚴蔚敏版,實現了書中的大部分功能,並且用了三個檔案。

一個是主函式,一個是功能模組,一個是標頭檔案定義,用VC6.0++完成


//標頭檔案宣告
#ifndef _FUNC_H
#define _FUNC_H
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef float ElemType;
typedef ElemType *Triplet;     

extern Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3);
extern Status DestroyTriplet (Triplet t);
extern Status get(Triplet t,int i,ElemType &e);
extern Status put(Triplet &t,int i,ElemType e);
extern Status Max(Triplet t,ElemType &e);
extern Status Min(Triplet t,ElemType &e);
extern Status IsAscend(Triplet t);
extern Status IsDescend(Triplet t);
extern Status Average(Triplet t,ElemType &e);
int system(const char *string);
#endif
//功能模組
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
//初始化
Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3)
{

	t=(ElemType *)malloc(3*sizeof(ElemType));   
	if(!t) return OVERFLOW;
	t[0]=v1;t[1]=v2;t[2]=v3;
    return OK;
}
//銷燬
Status DestroyTriplet (Triplet t)
{
	free(t); t=NULL;
    return OK;
}
//返回第i個值
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 IsAscend(Triplet t)
{
	return (t[0]<t[1])&&(t[1]<t[2]);
}

//判斷降序
Status IsDescend(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;
}
//求平均值
Status Average(Triplet t,ElemType &e)
{
	e=(t[0]+t[1]+t[2])/3;
	return OK;
}
//主函式
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
void main()
{
	Triplet  p;
	ElemType e,v1,v2,v3;
	int i;


	char select;
	printf("輸入三個數,建立一個三元組\n");
	scanf("%d%d%d",&v1,&v2,&v3);                    
	if (InitTriplet(p,v1,v2,v3)==OVERFLOW) 
		 printf("分配失敗,退出程式!");
	else 
        do 
		{
			printf("\n");
			printf("1:取三元組第i個元素\n");
			printf("2:判斷三元組元素是否遞增\n");
			printf("3:求最大值\n");
			printf("4:置換第i個元素\n");
           	printf("5:判斷三元組元素是否遞減\n");
            printf("6:求最小值\n");
			printf("7:求三元組平均值\n");
			printf("0:結束!\n");
			printf("請輸入選擇!\n");
		
			getchar();
			scanf("%c",&select);
			switch (select) 
			{case '1':                            //get
			    printf("\ni=");
				scanf("%d",&i);				
				if (get(p,i,e)==ERROR)  printf("i值不合法\n");
				else 	printf("第%d個元素的值為:%d\n",i,e);      
		    	break;	
                
            case '2':             //IsAscend
		     	printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]);
				printf("\n");
				if (IsAscend(p)==1) printf("三元組遞增有序\n");
				 else printf("三元組非遞增有序\n");           
				break;  
             
			case '3':             //Max
				  printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]);
			   	  Max(p,e);                         
				  printf("最大值是:%d\n",e);       
                  break;

			case '4':   
				//put 
				  printf("\n");
                  printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]);
                
				  printf("請輸入想置換的第i個元素");
				  printf("\ni=");
				  scanf("%d",&i);           
				  printf("\nx=");
				  scanf("%d",&e);        
				  if (put(p,i,e)==ERROR) printf("i值不合法\n");
				  else printf("置換第%d個元素後的3個元素分別為:%d,%d,%d\n",i,p[0],p[1],p[2]);
				  break;

            case '5':              //IsDescend
                 printf("\n");
      		     printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2])
				if (IsDescend(p)==1) printf("三元組遞減有序\n");
				 else printf("三元組非遞減有序\n");	
			
				 break;


           	case '6':       
				 printf("\n");
				 printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]);
                
			  	Min(p,e);
				  printf("最小值是:%f\n",e);        
				  break;
			
			case'7':
                 printf("\n");
               printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]);
                
			     Average(p,e);
				 printf("平均值是:%.2f\n",e);   
               
				  break;
			
			case'0':
				printf("操作結束!"); break;
		 	default: printf("輸入選擇出錯!\n");
			}// end of switch
		}while(select!='0'); //end of while
		DestroyTriplet(p);
}// end of main

三個檔案放在一起放在一個工程中才能執行