实现三元组的构建、销毁、放与置、找最大值、找最小值、判断是否为升序、降序
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef float ElemType;
//创建三元组
typedef ElemType *Triplet;
//初始化三元组
Status initTriplet(Triplet &T,ElemType v0,ElemType v1,ElemType v2)
{
T=(ElemType*)malloc(3*sizeof(ElemType));
if(!T) exit(OVERFLOW);
T[0]=v0;
T[1]=v1;
T[2]=v2;
return OK;
}
//找最小值
ElemType getMin(Triplet T,ElemType &e)
{
if(T[0]<T[1])
e=T[0];
else
e=T[1];
if(T[2]<e)
e=T[2];
return e;
}
//找最大值
ElemType getMax(Triplet T,ElemType &e)
{
if(T[0]>T[1])
e=T[0];
else
e=T[1];
if(T[2]>e)
e=T[2];
return e;
}
//升序排列
Status IsAscending(Triplet T){
if((T[0]<=T[1])&&(T[1]<=T[2]))
return 1;
else return 0;
}
//降序排列
Status IsDescending(Triplet T){
if((T[0]>=T[1])&&(T[1]>=T[2]))
return 1;
else return 0;
}
//销毁三元组
Status DestroyTriplet(Triplet *T)
{
free(T); T=NULL;
return OK;
}
//主程序
int main()
{
Triplet T;
Status flag;
ElemType v0,v1,v2,e;
printf("请进入三元组的三个值v0,v1,v2:\n");
scanf("%f,%f,%f",&v0,&v1,&v2);
initTriplet(T,v0,v1,v2);
printf("是否为升序排列为:%d \n",IsAscending(T));
printf("是否为降序排列为:%d \n",IsDescending(T));
printf("显示三元组:%f %f %f \n",T[0],T[1],T[2]);
printf("最大值:%f\n最小值 :%f \n",getMax(T,e),getMin(T,e));
flag=DestroyTriplet( &T);
printf("是否销毁三元组%d\n",flag);
return OK;
}
问题反思:
- 刚接触数据结构,上课一定要认真听讲,做好课前预习,课后复习的工作,不懂得及时问,不要给每堂课留下疑问。
- 对于课本上的例子自己要动手敲一遍,分析执行过程,多问自己几个为什么。
- 课本上的大多为伪代码,要仔细思考真正要实现这个功能应该如何编写。
- scanf中不能输出汉字提示。