三元组Triplet的基本操作:
typedef ElemType* Triplet;
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType*)malloc(3 * sizeof(ElemType));
if (!T) exit(OVERFLOW);
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}
Status DestroyTriplet(Triplet& T)
{
free(T);
T = NULL;
return OK;
}
Status Get(Triplet T, int i, ElemType& e)
{
if (i < 1 || i>3) return ERROR;
else e = T[i - 1];
return OK;
}
Status Put(Triplet& T, int i, ElemType e)
{
if (i < 1 || i>3) return ERROR;
else T[i - 1] = e;
return OK;
}
Status IsAscending(Triplet T)
{
return (T[0] <= T[1] && T[1] < T[2]);
}
Status IsDescending(Triplet T)
{
return (T[0] > T[1] && T[1] > T[2]);
}
Status Max(Triplet T, ElemType& e)
{
return e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[1] >= T[2]) ? T[1] : T[2]);
}
Status Min(Triplet T, ElemType& e)
{
return e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
}
主函数中测试基本函数:
int main()
{
Triplet T;
ElemType m;
InitTriplet(T, 7, 7, 7);
Status i;
printf("三元组元素依次为:%d,%d,%d\n",T[0], T[1], T[2]);
int isRound = 1;
int IsRound = 1;
while (isRound)
{
int n;
printf("请输入需要查询的数的位置:");
scanf_s("%d", &n);
Get(T, n, m);
printf("查询的数:%d\n",m);
printf("继续修改请按1,退出请按0\n");
scanf_s("%d", &isRound);
}
while (IsRound)
{
int n;
printf("请输入需要修改数的位置:");
scanf_s("%d",&n);
printf("请输入修改后的值:");
scanf_s("%d",&m);
Put(T, n, m);
printf("修改后的三元组为%d,%d,%d\n",T[0], T[1], T[2]);
printf("继续修改请按1,退出请按0\n");
scanf_s("%d", &IsRound);
}
i = IsAscending(T);
printf("三元组是否为升序的状态:%d (0为否,1为是)\n", i);
i = IsDescending(T);
printf("三元组是否为降序的状态:%d (0为否,1为是)\n", i);
Min(T, m);
printf("最小值为%d\n",m);
Max(T, m);
printf("最大值为%d\n",m);
return 0;
}
运行结果:
窗外有风景,笔下有前途,低头是题海,抬头是未来,菜鸡在努力!