这个博客基本操作大部分来自教材《数据结构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
三个文件放在一起放在一个工程中才能运行