【数据结构】三元组

【数据结构】三元组

代码目录树:

  • 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
",result);
				} 
				break;
			
			case 2 :
				
				printf("请输入要改变的第i项以及改变后的值   ");
				scanf("%d %d",&i,&result); 
				if(Put(T,i,result) == ERROR) printf("输入值错误
"); 
				else {
					printf("修改成功!
");
				} 
				break;
				
			case 3 :
				if(IsAscending(T)==TRUE) printf("是升序排列
");
				else printf("不是升序排列
");
				break;
			
			case 4 :
				if(IsDesending(T)==TRUE) printf("是降序排列
");
				else printf("不是降序排列
");
				break; 
				
			case 5 :
				
				if(Max(T,result)==OK) 
					printf("最大值是:");
					if(sizeof(result)==4) printf("%d
",result);
				break; 
			
			case 6 :
				
				if(Min(T,result)==OK) 
					printf("最小值是:");
					if(sizeof(result)==4) printf("%d
",result);
			
			default : break;
		}	
	}
} 
原文地址:https://www.cnblogs.com/SiriusZHT/p/14310789.html