抽象数据类型三元组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

三个文件放在一起放在一个工程中才能运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值