数据结构 C语言 三元组的具体实现

#include<stdio.h>
#include<stdlib.h>


//定义常量 方便操作
//可能也没多方便 

#define Time 1000 

typedef int *Triplet; 
typedef int Status; 

/**
定义一系列三元组的操作 
C语言中的函数 
*/
//初始化 
void InitTriplet(Triplet *T, Status v1, Status v2, Status v3);
//销毁三元组 
void DestroyTriplet(Triplet *T);
//返回第i个位置的的元素 
void Get(Triplet T, Status i);
//改变第i个位置的元素的值 
void Put(Triplet *T, Status i, Status e);
//判断是否升序排列 
void isAscending(Triplet T);
//判断是否降序排列 
void isDescending(Triplet T);
//返回最大值 
void Max(Triplet T);
//返回最小值 
void Min(Triplet T); 

/**
UI 逻辑 函数 
*/ 
void Show();
void Logic(Triplet *T, char key);
void isTrue(Triplet T);
//打印三元组 
void PrintTriplet(Status *T);

int main(){
	char key;
	Triplet T = NULL;	
	
	
	while(1){
		Show();
		scanf(" %c", &key);	
		Logic(&T, key);
	} 
} 


void isTrue(Triplet T){
	if(NULL == T){
		printf("\n抱歉 未分配内存\n");
		exit(0);
	}
}
void Show(){
	system("cls"); 
	printf("*****************************************************\n");
	printf("\n	");
	printf("\n");
	printf("\n		1.初始化三元组");
	printf("\n		2.销毁三元组");
	printf("\n		3.获取第i个位置的元素值");
	printf("\n		4.改变第i个位置的元素值");
	printf("\n		5.判断三元组是否为升序排列");
	printf("\n		6.判断三元组是否为降序排列");
	printf("\n		7.返回三元组中最大值");
	printf("\n		8.返回三元组中最小值");
	printf("\n		9.打印三元组");
	printf("\n");
	printf("		###########################\n");
	printf("\n		请问您需要执行什么操作?");
	printf("\n		请输入相应数字并按回车执行");
	printf("	\n");
	printf("*****************************************************\n");
}
void PrintTriplet(Triplet T){
	isTrue(T);
	printf("第一个元素为 :%d\n", *T);
	printf("第二个元素为 :%d\n", *(T+1));
	printf("第三个元素为 :%d\n", *(T+2));
	
}
void InitTriplet(Triplet *T, Status v1, Status v2, Status v3){
	*T = (Status*)malloc(3*sizeof(Status));
	(*T)[0] = v1;
	(*T)[1] = v2;
	(*T)[2] = v3;
}

void DestroyTriplet(Triplet *T){
	isTrue(*T);
	if(NULL != *T){
	free(*T);
	*T = NULL; 	
	}
}

void Get(Triplet T, Status i){
	isTrue(T);
	if(i >= 0&&i<=3){
		printf("第%d个元素是%d\n", i, T[i - 1]);	
	}else{
		printf("抱歉,你输入的数不在三元组范围");
	}
	
}

void Put(Triplet *T, Status i, Status e){
	isTrue(*T);
	if(i >= 0&&i<=3){
		**(T + i - 1) = e;
	printf("您改变第%d个位置的元素为%d\n", i, e);	
	}else{
		printf("抱歉,你输入的数不在三元组范围");
	}
	
}

void isAscending(Triplet T){
	isTrue(T);
	if(T[0] < T[1] && T[1] < T[2]){
		printf("\n该三元组是升序排列\n");
	}else{
	printf("\n该三元组不是升序排列\n");
	} 
}
void isDescending(Triplet T){
	isTrue(T);
	if(T[0] > T[1] && T[1] > T[2]){
		printf("\n该三元组是降序排列\n");
	}else{
	printf("\n该三元组不是降序排列\n");
	} 
}
void Max(Triplet T){
	isTrue(T);
	int i;
	i = T[0] > T[1]?T[0] : T[1];
	i = i > T[2]?i : T[2]; 
	printf("\n三元组中最大值是%d\n", i);
}
void Min(Triplet T){
	isTrue(T);
	int i;
	i = T[0] < T[1]?T[0] : T[1];
	i = i < T[2]?i : T[2]; 
	printf("\n三元组中最小值是%d\n", i);
}
void Logic(Triplet *T, char key){
	switch(key){
			case '1':
				system("cls");
				printf("\n请输入您想初始化三元组的值"); 
				printf("\n输入三个int数据 以空格分开\n");
				int i, j, k;
				scanf("%d %d %d", &i, &j, &k);
				InitTriplet(T, i, j, k);
				system("cls");
				printf("\n初始化完成");
				printf("\n您初始化的数据为 %d %d %d\n", i, j, k);
				_sleep(Time);
				break;
			case '2':
				system("cls");
				DestroyTriplet(T);
				printf("\n三元组已销毁...");
			 	_sleep(Time);
			 	break;
		 	case '3':
			 	system("cls"); 
			 	printf("\n您想获得第几个位置的元素?\n");
				printf("请输入\n");
				int m;
				scanf("%d", &m);
				Get(*T, m); 
				_sleep(Time);
				break;
			case '4':
				system("cls"); 
				printf("您想改变第几个位置的元素?\n");
				scanf("%d", &i);
				printf("改变为多少?\n");
				scanf("%d", &m); 
				Put(T, i, m);
				system("cls"); 
				printf("您已经改变第%d个元素为%d", i, m);
				_sleep(Time);
				break;
			case '5':
				system("cls"); 
				isAscending(*T);
				_sleep(Time);
				break;
			case '6':
				system("cls"); 
				isDescending(*T);
				_sleep(Time);
				break;
			case '7':
				system("cls"); 
				Max(*T);
				_sleep(Time);
				break;
			case '8':
				system("cls"); 
				Min(*T);
				_sleep(Time);
				break;
			case '9':
				system("cls"); 
				PrintTriplet(*T);
				_sleep(Time);
				break;
				
	} 
}

 

转载于:https://my.oschina.net/u/2936122/blog/852288

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值