c语言算法与结构中三元组表,C语言数据结构问题,用结构体表示三元组(可以是不同类型的),并编程实现三元组基本操作给了我源代码...

C语言数据结构问题,用结构体表示三元组(可以是不同类型的),并编程实现三元组基本操作给了我源代码0

dcebd7a0de6265b6ccae5ead692f1eab.pngOK綉丨GS毛2017.09.16浏览42次分享举报

#include"stdio.h"#include"stdlib.h"typedefintElemType;typedefElemType*Triplet;typedefintStatus;#defineOK1#defineERROR0#defineOVERFLOW-2StatusInitTriplet(Triplet*T){//构造... #include "stdio.h"

#include "stdlib.h" typedef int ElemType; typedef ElemType *Triplet;

typedef int Status;

#define OK 1 #define ERROR 0 #define OVERFLOW -2

Status InitTriplet (Triplet *T){//构造三元组T

ElemType v1, v2, v3;

*T=(ElemType*)malloc(3*sizeof(ElemType));

if (*T==0)

return OVERFLOW; //存储分配失败

scanf("%d%d%d",&v1,&v2,&v3);

(*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3;return OK;}

Status DestroyTriplet(Triplet *T){ //销毁三元组T

free(*T);*T=NULL;return OK;}

Status Get(Triplet T,int i,ElemType *e){ //用e返回T的第i个元的值

if ( i<1||i>3)return ERROR; *e=T[i-1]; return OK;}

Status Put(Triplet *T,int i,ElemType e){ //修改三元组第i个元的值为e

if ( i<1||i>3)return ERROR; (*T)[i-1]=e; return OK;}

Status IsAscending(Triplet T){ //判断三元组元素是否递增

return (T[0]

Status IsDescending(Triplet T){ //判断三元组元素是否递减

return (T[0]>T[1])&&(T[1]>T[2]);}

Status Max(Triplet T,ElemType *e){//取三元组的最大元

*e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);return OK;}

Status Min(Triplet T, ElemType *e){//取三元组的最小元

*e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);return OK;}

void main(){

Triplet T;ElemType e;int select, i;

printf("输入三个数,建立一个三元组:\n");

if (InitTriplet(&T)==OVERFLOW)

printf("分配失败,退出程序!");

else //否则显示操作菜单,输入操作选择,直到结束 do {

printf("***********************************\n");

printf("*** 1:取三元组第i个元素\t***\n");

printf("*** 2:修改三元组第i个元素\t***\n" );

printf("*** 3:判断三元组元素是否递增\t***\n");

printf("*** 4:判断三元组元素是否递减\t***\n");

printf("*** 5:取三元组的最大元\t***\n");

printf("*** 6:取三元组的最小元\t***\n");

printf("*** 0:结束\t\t\t***\n");

printf("***********************************\n");

scanf("%d",&select);

switch (select){case 1:

printf("\ni=");

scanf("%d",&i);

if (Get(T,i,&e)==ERROR)

printf("i值不合法\n");

else

printf("第%d个元的值为%d\n",i,e);

break;case 2:

printf("\ninput i,e=");

scanf("%d%d",&i,&e);

if (Put(&T,i,e)==ERROR)

printf("i值不合法\n");

else

printf("%4d%4d%4d\n",T[0],T[1],T[2]);

break;case 3:

if (IsAscending(T)==1)

printf("三元组递增有序\n");

else

printf("三元组非递增有序\n");

break;case 4:

if (IsDescending(T)==1)

printf("三元组递减有序\n");

else

printf("三元组非递减有序\n");

break;case 5:

Max(T,&e);

printf(" 三元组的最大元为%d\n",e);

break;case 6:

Min(T,&e);

printf(" 三元组的最小元为%d\n",e);

break;case 0:

printf("操作结束\n");

break;default:

printf("输入选择出错!\n");}//switch

}while (select!=0); DestroyTriplet(&T);//销毁三元组}

可能会有点长,但是感觉应该蛮基础的,希望大神们能帮小弟解答 展开

你可能感兴趣的:(c语言算法与结构中三元组表)