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


    各种字符的定义代码如下:

    ////////////////////////////////
    //    liyuechao
    //    2014.8.7
    //    c1.h
    ////////////////////////////////
    //c1.h文件名字
    #include<string.h>
    #include<ctype.h>
    #include<malloc.h> // malloc()等
    #include<limits.h> // INT_MAX等
    #include<stdio.h> // EOF(=^Z或F6),NULL
    #include<stdlib.h> // atoi()
    #include<io.h> // eof()
    #include<math.h> // floor(),ceil(),abs()
    #include<process.h> // exit()
    #include<iostream.h> // cout,cin
    #define TRUE 1  // 函数结果状态代码
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    //#define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
    typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
    typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE


    // c1-1.h 采用动态分配的顺序存储结构
    typedef ElemType *Triplet; // 由InitTriplet分配3个元素存储空间
    // Triplet类型是ElemType类型的指针,存放ElemType类型的地址




    // bo1-1.cpp 抽象数据类型Triplet和ElemType(由c1-1.h定义)的基本操作(8个)
    Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
    { // 操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和v3(见图1.2)
    	if(!(T=(ElemType *)malloc(3*sizeof(ElemType))))
    exit(OVERFLOW);
    T[0]=v1,T[1]=v2,T[2]=v3;
    return OK;
    }
    Status DestroyTriplet(Triplet &T)
    { // 操作结果:三元组T被销毁(见图1.3)
    free(T);
    T=NULL;
    return OK;
    }
    Status Get(Triplet T,int i,ElemType &e)
    { // 初始条件:三元组T已存在,1≤i≤3。操作结果:用e返回T的第i元的值
    if(i<1||i>3)
    return ERROR;
    e=T[i-1];
    return OK;
    }
    Status Put(Triplet T,int i,ElemType e)
    { // 初始条件:三元组T已存在,1≤i≤3。操作结果:改变T的第i元的值为e
    if(i<1||i>3)
    return ERROR;
    T[i-1]=e;
    return OK;
    }
    Status IsAscending(Triplet T)
    { // 初始条件:三元组T已存在。操作结果:如果T的3个元素按升序排列,则返回1;否则返回0
    return(T[0]<=T[1]&&T[1]<=T[2]);
    }
    Status IsDescending(Triplet T)
    { // 初始条件:三元组T已存在。操作结果:如果T的3个元素按降序排列,则返回1;否则返回0
    return(T[0]>=T[1]&&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;
    }

    // main1-1.cpp 检验基本操作bo1-1.cpp的主函数
    #include "c1.h" // 要将程序中所有#include命令所包含的文件拷贝到当前目录下
    // 以下2行可根据需要选用一个(且只能选用一个),而不需改变基本操作bo1-1.cpp
    typedef int ElemType; // 定义抽象数据类型ElemType在本程序中为整型
    //typedef double ElemType; // 定义抽象数据类型ElemType在本程序中为双精度型
    #include "c1-1.h" // 在此命令之前要定义ElemType的类型
    #include "bo1-1.cpp" // 在此命令之前要包括c1-1.h文件(因为其中定义了Triplet)
    void main()
    {
    Triplet T;
    ElemType m;
    Status i;
    i=InitTriplet(T,5,7,9); // 初始化三元组T,其3个元素依次为5,7,9
    //i=InitTriplet(T,5.0,7.1,9.3); // 当ElemType为双精度型时,可取代上句
    printf("调用初始化函数后,i=%d(1:成功) T的3个值为",i);
    cout<<T[0]<<' '<<T[1]<<' '<<T[2]<<endl;
    // 为避免ElemType的类型变化的影响,用cout取代printf()。注意结尾要加endl
    i=Get(T,2,m); // 将三元组T的第2个值赋给m
    if(i==OK) // 调用Get()成功
    cout<<"T的第2个值为"<<m<<endl;
    i=Put(T,2,6); // 将三元组T的第2个值改为6
    if(i==OK) // 调用Put()成功
    cout<<"将T的第2个值改为6后,T的3个值为"<<T[0]<<' '<<T[1]<<' '<<T[2]<<endl;
    i=IsAscending(T); // 此类函数实参与ElemType的类型无关,当ElemType的类型变化时,实参不需改变
    printf("调用测试升序的函数后,i=%d(0:否1:是)
    ",i);
    i=IsDescending(T);
    printf("调用测试降序的函数后,i=%d(0:否1:是)
    ",i);
    if((i=Max(T,m))==OK) // 先赋值再比较
    cout<<"T中的最大值为"<<m<<endl;
    if((i=Min(T,m))==OK)
    cout<<"T中的最小值为"<<m<<endl;
    DestroyTriplet(T); // 函数也可以不带回返回值
    cout<<"销毁T后,T="<<T<<"(NULL)"<<endl;
    }

    测试的结果:

    调用初始化函数后,i=1(1:成功) T的3个值为5 7 9
    T的第2个值为7
    将T的第2个值改为6后,T的3个值为5 6 9
    调用测试升序的函数后,i=1(0:否1:是)
    调用测试降序的函数后,i=0(0:否1:是)
    T中的最大值为9
    T中的最小值为5
    销毁T后,T=0x00000000(NULL)
    Press any key to continue






        每当夜深人静的时候,想想今天发生了什么,失去了什么,得到了什么,做了什么,没做什么,该做什么,不该做什么,明天要做什么!
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 士兵排队问题
    Java实现 蓝桥杯VIP 算法提高 数字黑洞
    Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
  • 原文地址:https://www.cnblogs.com/KongkOngL/p/3923447.html
Copyright © 2020-2023  润新知