首页 > 学院 > 开发设计 > 正文

【C语言 数据结构】三元组的实现

2019-11-06 06:47:41
字体:
来源:转载
供稿:网友
#include<stdio.h>#include<stdlib.h>//定义常量 方便操作//可能也没多方便 #define Status int#define Time 1000 /**定义一系列三元组的操作 C语言中的函数 *///初始化 Status* InitTriplet(Status* T, Status v1, Status v2, Status v3);//销毁三元组 Status* DestroyTriplet(Status *T);//返回第i个位置的的元素 void Get(Status* T, Status i);//改变第i个位置的元素的值 Status* Put(Status* T, Status i, Status e);//判断是否升序排列 void isAscending(Status* T);//判断是否降序排列 void isDescending(Status* T);//返回最大值 void Max(Status* T);//返回最小值 void Min(Status* T); /**UI 逻辑 函数 */ void Show();Status* Logic(Status* T, char key);void isTrue(Status* T);//打印三元组 void PRintTriplet(Status *T);int main(){	char key;	Status* T = NULL;		while(1){		Show();		scanf(" %c", &key);		T = Logic(T, key);		} } void isTrue(Status* 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(Status *T){	isTrue(T);	printf("第一个元素为 :%d/n", *T);	printf("第二个元素为 :%d/n", *(T+1));	printf("第三个元素为 :%d/n", *(T+2));	}Status* InitTriplet(Status* T, Status v1, Status v2, Status v3){	T = (Status*)malloc(3*sizeof(Status));	T[0] = v1;	T[1] = v2;	T[2] = v3;	return T;}Status* DestroyTriplet(Status *T){	isTrue(T);	if(NULL != T){	free(T);	T = NULL; 		}	return T;}void Get(Status* T, Status i){	isTrue(T);	printf("第%d个元素是%d/n", i, T[i - 1]);	}Status* Put(Status* T, Status i, Status e){	isTrue(T);	*(T + i - 1) = e;	printf("您改变第%d个位置的元素为%d/n", i, e);	return T;}void isAscending(Status* T){	isTrue(T);	if(T[0] > T[1] && T[1] > T[2]){		printf("/n该三元组是升序排列/n");	}else{	printf("/n该三元组不是升序排列/n");	} }void isDescending(Status* T){	isTrue(T);	if(T[0] < T[1] && T[1] < T[2]){		printf("/n该三元组是降序排列/n");	}else{	printf("/n该三元组是升序排列/n");	} }void Max(Status* 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(Status* 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);}Status* Logic(Status* 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);				T = 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");				T = 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;					} 	return T;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表