【数据结构】三元组
代码目录树:
- comedef.h
- tripletapp.h
- tripletmain.cpp
comedef.h
//变量定义
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
typedef int * Triplet;
typedef int Status;
tripletapp.h
功能函数的实现
//操作结果:构造三元组T,元素e1e2e3分别被赋以参数v1v2v3的值
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3);
//操作结果:三元组T被销毁
Status DestroyTriplet(Triplet &T);
//初始条件:三元组T已存在 i是 1-3
//操作结果:用e返回T的第i元的值
Status Get(Triplet &T,int i,ElemType &e);
//初始条件:三元组T已存在 i是 1-3
//操作结果:改变T的第i元的值为e
Status Put(Triplet &T,int i,ElemType &e);
//初始条件:T已存在
//操作结果:是升序排列就返回1,反之则0
Status IsAscending(Triplet T);
//初始条件:T已存在
//操作结果:是降序排列就返回1,反之则0
Status IsDesending(Triplet T);
//初始条件:T已存在
//操作结果:用e返回最大的值
Status Max(Triplet T,ElemType &e);
//初始条件:T已存在
//操作结果:用e返回最小的值
Status Min(Triplet T,ElemType &e);
//操作结果:构造三元组T,元素e1e2e3分别被赋以参数v1v2v3的值
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3){
//构造三元组T,依次设三个初值 v1v2v3
T = (ElemType *)malloc(3 * sizeof(ElemType));//分配三个元素Elemtype类型的存储空间
if(!T) exit(OVERFLOW);//分配存储空间失败
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}
//操作结果:三元组T被销毁
Status DestroyTriplet(Triplet &T){
free(T);
T = NULL;
return OK;
}
//初始条件:三元组T已存在 i是 1-3
//操作结果:用e返回T的第i元的值
Status Get(Triplet &T,int i,ElemType &e){
if(i<1 ||i>3) return ERROR;
e = T[i-1];
return OK;
}
//初始条件:三元组T已存在 i是 1-3
//操作结果:改变T的第i元的值为e
Status Put(Triplet &T,int i,ElemType &e){
if(i<1 ||i>3) return ERROR;
T[i-1] = e;
return OK;
}
//初始条件:T已存在
//操作结果:是升序排列就返回1,反之则0
Status IsAscending(Triplet T){
return (T[0] <= T[1]) && (T[1] <= T[2]);
}
//初始条件:T已存在
//操作结果:是降序排列就返回1,反之则0
Status IsDesending(Triplet T){
return (T[0] >= T[1]) && (T[1] >= T[2]);
}
//初始条件:T已存在
//操作结果:用e返回最大的值
Status Max(Triplet T,ElemType &e){
e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[0] >= T[2]) ? T[1] : T[2]);
return OK;
}
//初始条件:T已存在
//操作结果:用e返回最小的值
Status Min(Triplet T,ElemType &e){
e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[0] <= T[2]) ? T[1] : T[2]);
return OK;
}
tripletmain.cpp
主函数
#include <stdio.h>
#include <stdlib.h>
#include "comedef.h"
#include "tripletapp.h"
main(){
int num;
Triplet T;
ElemType v1,v2,v3;
printf("请输入3个数字 : ");
scanf("%d %d %d",&v1,&v2,&v3);
if(InitTriplet(T,v1,v2,v3)==1)
printf("三元组构造成功!");
int i;
ElemType result;
while(1){
printf("请输入选项 : ");
scanf("%d",&num);
getchar();
switch (num){
case 1 :
printf("请输入要查看的第i项 ");
scanf("%d",&i);
if(Get(T,i,result) == ERROR) printf("输入值错误");
else {
printf("这个值为 ");
if(sizeof(result)==4) printf("%d\n",result);
}
break;
case 2 :
printf("请输入要改变的第i项以及改变后的值 ");
scanf("%d %d",&i,&result);
if(Put(T,i,result) == ERROR) printf("输入值错误\n");
else {
printf("修改成功!\n");
}
break;
case 3 :
if(IsAscending(T)==TRUE) printf("是升序排列\n");
else printf("不是升序排列\n");
break;
case 4 :
if(IsDesending(T)==TRUE) printf("是降序排列\n");
else printf("不是降序排列\n");
break;
case 5 :
if(Max(T,result)==OK)
printf("最大值是:");
if(sizeof(result)==4) printf("%d\n",result);
break;
case 6 :
if(Min(T,result)==OK)
printf("最小值是:");
if(sizeof(result)==4) printf("%d\n",result);
default : break;
}
}
}