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

来源:互联网 发布:如何申请网站域名 编辑:程序博客网 时间:2024/04/29 04:53
typedef ElemType * Triplet;//由InitTriplet分配3个元素存储空间//Triplet类型是ElemType类型的指针,存放ElemType类型的地址Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){    //操作结果:构造三元组T,依次置T3个元素的初值为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个元素赋给e    return 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已存在。操作结果:如果三元组T3个元素按升序排列,则返回1,否则返回0return (T[0] <= T[1] && T[1] <= T[2]); //只在T[0]不大于T[1]且不大于T[2]时返回真}Status IsDescending(Triplet T){    //初始条件:三元组T已存在。操作结果:如果三元组T3个元素按降序排列,则返回1,否则返回0return (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个元素依次为579。    printf("调用初始化函数后,i = %d(1:成功)。 T的三个值为", i);    PrintT(T);//输出T3个值    i = Get(T, 2, m);//将三元组T的第2个值赋给m    if (i == OK){//调用Get()成功        printf("T的第2个值为:");        PrintE(m); //输出m (= T[1])    }    i = Put(T, 2, 6);//将三元组T的第2个值改为6    if (i == OK){//调用Put()成功        printf("将T的第2个值改为6后,T的三个值为:");        PrintT(T);//依次输出三元组T3个值    }    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();}
0 0
原创粉丝点击