c语言三元组作用,数据结构 C语言 三元组的具体实现

#include

#include

//定义常量 方便操作

//可能也没多方便

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值