【C语言 数据结构】三元组的实现 最终作业版

来源:互联网 发布:京东众包软件打不开 编辑:程序博客网 时间:2024/06/05 15:23
#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("\n1.初始化三元组");printf("\n2.销毁三元组");printf("\n3.获取第i个位置的元素值");printf("\n4.改变第i个位置的元素值");printf("\n5.判断三元组是否为升序排列");printf("\n6.判断三元组是否为降序排列");printf("\n7.返回三元组中最大值");printf("\n8.返回三元组中最小值");printf("\n9.打印三元组");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;} }


                                             
0 0