#include <stdio.h>
#include <stdlib.h> //exit()
#include <math.h> //OVERFLOW
/*函数结果状态代码*/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Boolean;
typedef int ElemType;
typedef ElemType * Triplet;
//操作结果:构造三元组T,依次设置T的3个元素的初始值为v1,v2,v3。
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType *) malloc(sizeof(ElemType) * 3); //分配3个元素的存储空间
if(! T) //当T===NULL
{
exit(OVERFLOW); //分配失败则退出
}
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}
//操作结果:三元组T被销毁。
Status DestroyTriplet(Triplet &T)
{
free(T); //释放T所指的三元组存储空间
T = NULL; //T不再指向任何存储单元
return OK;
}
//初始条件:三元组T已存在,1<=i<=3。
//操作结果:用e返回T的第i元的值。
Status Get(Triplet T, int i, ElemType &e)
{
if(i < 1 || i > 3) //i不在三元组的范围之内
{
return ERROR;
}
e = T[i - 1]; //将三元组T的第i个元素的值赋给e
return OK;
}
//初始条件:三元组T已存在。
//操作结果:T改变T的第i元的值为e。
Status Put(Triplet T, int i, ElemType e)
{
if(i < 1 || i > 3)
{
return ERROR;
}
T[i - 1] = e; //将e的值赋给三元组T的第i个元素
return OK;
}
//初始条件:三元组T已存在。
//操作结果:如果三元组T的3个元素按升序排列,则返回1;否则返回0。
Status IsAscending(Triplet T)
{
return (T[0] <= T[1] && T[1] <= T[2]);
}
//初始条件:三元组T已存在。
//操作结果:如果三元组T的3个元素按降序排列,则返回1;否则返回0。
Status IsDescending(Triplet T)
{
return (T[0] >= T[1] && T[1] >= T[2]);
}
//初始条件:三元组T已存在。
//操作结果:用e返回指向T的最大元素的值。
Status Max(Triplet T, ElemType &e)
{
/*用if else判断
if(T[0] >= T[1])
{
if(T[0] >= T[2])
{
e = t[0];
}
else
{
e = t[2];
}
}
else
{
if(t[1] >= T[2])
{
e = T[1];
}
else
{
e = T[2];
}
}
*/
e = (T[0] >= T[1]) ? (T[0] >= T[2] ? T[0] : T[2]) : (T[1] >= T[2] ? T[1] : T[2]); //只在T[0]>=T[1]>=T[2]返回真
return OK;
}
//初始条件:三元组T已存在。
//操作结果:用e返回指向T的最小元素的值。
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 printE(ElemType e)
{
printf("%d\n", e);
}
//依次输出三元组的值
void printT(Triplet T)
{
printf("%d, %d, %d\n", T[0], T[1], T[2]);
}
//打印分界
void printStar(int n)
{
for(int j = 0; j <= n; j ++)
{
printf("*");
}
printf("\n");
}
void main()
{
Triplet T;
ElemType m;
Status i;
int num1;
int num2;
int num3;
printStar(50);
i = InitTriplet(T, 5, 7, 9);
printf("Call InitTriplet() after , T = %u\n", T);
printf("i = %d (1: success). Call printT() after T[0], T[1], T[2] valuse is: ",i);
printT(T);
printf("Please select T[num] output, 1 <= num <= 3\n");
scanf("%d", &num1);
while(num1 < 1 || num1 > 3)
{
printf("You're input error number\n");
printf("Please select T[num] output, 1 <= num <= 3\n");
scanf("%d", &num1);
};
i = Get(T, num1, m);
if(OK == i)
{
printf("Call Get() after, T[%d] = %d\n", num1,m);
}
printf("Please select change T[num], 1 <= num < 3\nPlease input T[num]'s values _3,9_:");
scanf("%d,%d", &num2,&num3);
while(num2 < 1 || num2 > 3)
{
printf("You're input error number\n");
printf("Please select change T[num], 1 <= num < 3\nPlease input T[num]'s values: ");
scanf("%d,%d", &num2, &num3);
};
i = Put(T, num2, num3);
if(OK == i)
{
printf("Call Put() after, Call PrintT()\n");
printT(T);
}
i = IsAscending(T);
if(1 == i)
{
printf("is ascending\n");
}
else
{
printf("is not sacending\n");
}
i = IsDescending(T);
if(1 == i)
{
printf("is decending\n");
}
else
{
printf("is not decending\n");
}
i = Max(T, m);
if(OK == i)
{
printf("max value is ");
printE(m);
}
i = Min(T, m);
if(OK == i)
{
printf("min value is ");
printE(m);
}
DestroyTriplet(T);
printf("Call DestroyTriplet() after , T = %u\n", T);
printStar(50);
}
抽象数据类型
原创
©著作权归作者所有:来自51CTO博客作者coperator的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:标准日本语 01
下一篇:标准日本语 02_001
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
数据结构(4) -- 抽象数据类型
文章目录到底什么是数据结构抽象数据类型例子: 矩阵的抽象数据类型定义到底什
数据结构 抽象数据类型 数据