您的位置:首页 > 理论基础 > 数据结构算法

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

2017-03-05 00:00 78 查看
#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;

3ff0
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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息