抽象数据类型Triplet的表示和实现。
建立一个项目,包含以下三个部分:
(1)第一部分:Common.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
在VS2019下,需将头文件:Common.h做些修改:
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
typedef int Status;
(2)第二部分:Triplet.h
#include "Common.h"
#include<cstdlib>
typedef int ElemType;
typedef ElemType* Triplet;//由InitTriplet分配3个元素存储空间
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{ //操作结果:构造了三元组T,元素e1,e2和e3的值分别被赋以参数v1,v2,v3的值。
T = (ElemType*)malloc(3 * sizeof(ElemType));
if (!T) exit(OVERFLOW); //分配存储空间失败
T[0] = v1; T[1] = v2; T[2] = v3;
return OK;
} //InitTriplet
Status DestroyTriplet(Triplet& T)
{ //操作结果:三元组T被销毁。
free(T);
T = NULL;
return OK;
} //DestroyTriplet
Status Get(Triplet T, int i, ElemType& e)
{
//用e返回T的第i元的值
if (i < 1 || i>3)
return ERROR;
e = T[i - 1];
return OK;
} //Get
Status Put(Triplet& T, int i, ElemType e)
{
//1<=i<=3。
//改变T的第i元的值为e。
if (i < 1 || i>3)
return ERROR;
T[i - 1] = e;
return OK;
} // Put
Status IsAscending(Triplet T)
{
//如果三元组T的3个元素按升序排列,则返回1,否则返回0。
return (T[0] >= T[1]) && (T[1] >= T[2]);
} //IsAscending
Status IsDescending(Triplet T)
{
//如果三元组T的3个元素按降序排列,则返回1,否则返回0。
return (T[0] <= T[1]) && (T[1] <= T[2]);
} //IsDescending
Status Max(Triplet T, ElemType& e)
{
//用e返回T的3个元素中的最大值。
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的3个元素中的最小值。
e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
return OK;
}
(3)第三部分:main.cpp
#include<stdio.h>
#include "Triplet.h"
int main()
{
Triplet triplet; //等价于int* triplet
ElemType e;//等价于int e
int i;
InitTriplet(triplet, 4, 7, 5);//初始化操作,返回值是1
for (i = 0; i < 3; i++)
{
Get(triplet, i + 1, e);//得到的返回值为OK,是1 最终e为triplet[0],为4
printf("%d %d\n", triplet[i], e);//打印出triplet[0]和e的值,都为4
}
e = 13;//对e重新赋新值13
Put(triplet, 2, e);//更改triplet[1]的值为13
for (i = 0; i < 3; i++)
printf("%d ", triplet[i]);//分别打印出triplet[0]、triplet[1]、triplet[2]的值,分别为4、13、5
printf("\n");
if (IsAscending(triplet))//返回值为0
printf("升序\n");//不执行
else
{
if (IsDescending(triplet))//返回值为0
printf("降序\n");//不执行
else
printf("乱序\n");//执行
}
Max(triplet, e);//调用Max函数,把数组最大值赋值给e
printf("最大值: %d\n", e);//输出最大值e
Min(triplet, e);//调用Min函数,把数组最小值赋值给e
printf("最小值: %d\n", e);//输出最小值e
DestroyTriplet(triplet);//使指针triplet置空,防止产生野指针
return 0;
}