#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; } }
【C语言 数据结构】三元组的实现 最终作业版
最新推荐文章于 2025-03-25 01:03:25 发布