抽象数据类型的表示与实现

//函数结果状态代码。typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean;//Boolean是布尔类型,,其值是TRUE和FALSEtypedef int ElemType;typedef ElemType * Triplet;//由InitTriplet分配3个元素存储空间//Triplet类型是ElemType类型的指针,存放ElemType类型的地址Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){//操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和v3。T = (ElemType *)malloc(3 * sizeof(ElemType));//分配3个元素的存储空间if (!T)exit(OVERFLOW);//分配失败则退出T[0] = v1, T[1] = v2, T[2] = v3;return OK;}Status DestroyTriplet(Triplet &T){//操作结果:三元组T被销毁。free(T);//释放T所指的三元组存储空间T = NULL;//T不再指向任何存储单元return OK;}Status Get(Triplet T, int i, ElemType &e){//初始条件:三元组T已存在,1 <= i <= 3。操作结果:用e返回T的第i元的值。if (i<1 || i>3) return ERROR;//i不在三元组范围内e = T[i – 1];//将三元组T的第i个元素赋给ereturn OK;}Status Put(Triplet T, int i, ElemType e){//初始条件:三元组T已存在,1 <= i <= 3。操作结果:改变T的第i元的值为e。if (i<1 || i>3) return ERROR;//i不在三元组范围内T[i – 1] = e;//将e的值赋给三元组T的第i个元素return OK;}Status IsAscending(Triplet T){//初始条件:三元组T已存在。操作结果:如果三元组T的3个元素按升序排列,则返回1,否则返回0。return (T[0] <= T[1] && T[1] <= T[2]); //只在T[0]不大于T[1]且不大于T[2]时返回真}Status IsDescending(Triplet T){//初始条件:三元组T已存在。操作结果:如果三元组T的3个元素按降序排列,则返回1,否则返回0。return (T[0] >= T[1] && T[1] >= T[2]);//只在T[0]不小于T[1]且不小于T[2]时返回真}Status Max(Triplet T, ElemType &e){//初始条件:三元组T已存在。操作结果:用e返回指向T的最大元素的值。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){//初始条件:三元组T已存在。操作结果:用e返回指向T的最小元素的值。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 main(){Triplet T;ElemType m;Status i;i = InitTriplet(T, 5, 7, 9);//初始化三元组T,其3个元素依次为5,7,9。printf(“调用初始化函数后,i = %d(1:成功)。 T的三个值为”, i);PrintT(T);//输出T的3个值i = Get(T, 2, m);//将三元组T的第2个值赋给mif (i == OK){//调用Get()成功printf(“T的第2个值为:”);PrintE(m); //输出m (= T[1])}i = Put(T, 2, 6);//将三元组T的第2个值改为6if (i == OK){//调用Put()成功printf(“将T的第2个值改为6后,T的三个值为:”);PrintT(T);//依次输出三元组T的3个值}i = IsAscending(T);//测试升序的函数printf(“调用测试升序的函数后,,i = %d(0:否 1:是)\n”, i);i = IsDescending(T);//测试降序的函数printf(“调用测试降序的函数后,i = %d(0:否 1:是)\n”, i);if (i = Max(T, m) == OK){//先赋值再比较printf(“T中的最大值为”);PrintE(m); //输出最大值m}if (i = Min(T, m) == OK){printf(“T中的最小值为”);PrintE(m);//输出最小值m}DestroyTriplet(T);//函数也可以不带返回值printf(“销毁T后,T = %u\n”, T);getchar();}

失败是什么?没有什么,只是更走近成功一步;

抽象数据类型的表示与实现

相关文章:

你感兴趣的文章:

标签云: