码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-17 19:04:16      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:c   考研   计算机专业   算法   

#include<string.h>//字符串函数头文件
#include<ctype.h>//字符函数头文件
#include<malloc.h>//malloc等
#include<stdio.h>//标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include<stdlib.h>//atoi(),exit()
#include<io.h>//eof()
#include<math.h>//数学函数头文件,包括floor(),celil(),abs()等
#include<sys/timeb.h>//ftime()
#include<stdarg.h>//提供宏va_start,va_arg和va_end,用于存取变长参数表

//函数结果状态代码。
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean;//Boolean是布尔类型,,其值是TRUEFALSE

typedef int ElemType;

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();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:c   考研   计算机专业   算法   

原文地址:http://blog.csdn.net/zhou554291911/article/details/46928855

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!