数据结构与算法实验1 :抽象数据类型的表示与实现 - Go语言中文社区

数据结构与算法实验1 :抽象数据类型的表示与实现


 今天对数据结构与算法实验进行实践,这是一个先明白实验目的是什么,然后通过抽象数据类型的定义、表示与实现的过程,清楚设计每一个函数的目的,然后再写程序,这样效率会变得更高!

实验内容

基本要求:

设计实现抽象数据类型“三元组”。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组取三元组的任意一个分量置三元组的任意一个分量求三元组的最大分量求三元组的最小分量显示三元组销毁三元组

选作内容:

实现两个三元组的对应分量相加或相减给三元组的各分量同乘一个比例因子操作

  1. #include <stdio.h>
    #include <malloc.h>
    #define OK 1
    #define ERROR 0
    typedef int Status;
    typedef float Elemtype;
    typedef struct{
    	Elemtype e[3];
    }Triplet;
    
    /*初始化三元组T且初始化赋值*/
    Status InitTriplet(Triplet &T,Elemtype v1,Elemtype v2,Elemtype v3)
    {
    	T.e[0]=v1;
    	T.e[1]=v2;
    	T.e[2]=v3;
    	return 	OK;
    }
    /*初始化三元组T1且初始化赋值*/
    Status InitTriplet1(Triplet &T1,Elemtype v1,Elemtype v2,Elemtype v3)
    {
    	T1.e[0]=v1;
    	T1.e[1]=v2;
    	T1.e[2]=v3;
    	return 	OK;
    }
    /*取三元组T中第i个元素赋值给e*/
    Status Getelem(Triplet T,Status i,Elemtype &e)
    {
    	if(i<1||i>3)
    	    return ERROR;
    	else
    	    e=T.e[i-1];
    	return OK;
    }
    /*将三元组T中第i个元素置换成所输入的e的值*/
    Status Put(Triplet &T,Status i,Elemtype e)
    {
    	if(i<1||i>3)
    	    return ERROR;
    	else
    	    T.e[i-1]=e;
    	return OK;
    }
    /*找出三元组T中最大值并将其赋值给e*/
    Elemtype GetMax(Triplet &T,Elemtype &e)
    {
    	Status i;
    	e=T.e[0];
    	for(i=1;i<3;i++)
    		if(T.e[i]>e)
                        e=T.e[i];
    	return e;
    }
    /*找出三元组T中最小值并将其赋值给e*/
    Elemtype GetMin(Triplet &T,Elemtype &e)
    {
    	if(T.e[0]<T.e[1])
    	    e=T.e[0];
    	else
    	    e=T.e[1];
    	if(T.e[2]<e)
    	    e=T.e[2];
    	return e;
    }
    /*输出三元组T的三个元素值*/
    Status ShowTriplet(Triplet &T,Status &t)
    {
    	Status i;
    	if(t>=1&&t<=3)
    	    printf("置换第%d值后,三元组的三个值为:",t);
    	for(i=0;i<3;i++)
    	    printf("%2f  ",T.e[i]);
    	return OK;
    }
    /*输出三元组T1的三个元素值*/
    Status ShowTriplet1(Triplet &T1)
    {
    	Status i;
    	for(i=0;i<3;i++)
    	printf("%2f  ",T1.e[i]);
    	return OK;
    }
    /*判断三元组T是否是递增排序*/
    Status IsAscending(Triplet &T)
    {
    	return ((T.e[0]<=T.e[1])&&(T.e[1]<=T.e[2]));
    }
    
    /*判断三元组T是否是递减排序*/
    Status IsDescending(Triplet &T)
    {
    	return ((T.e[0]>=T.e[1])&&(T.e[1]>=T.e[2]));
    }
    /*销毁三元组T*/
    Status DestroyTriplet(Triplet *T)
    {
    	free(T);
    	T=NULL;
    	return OK;
    }
    /*两个三元组对应元素相加,并将其依次放入数组x中*/
    Status AddTriplet(Triplet &T,Triplet &T1,Elemtype x[])
    {
        Status i;
        for(i=0;i<3;i++)
        {
            x[i]=T.e[i]+T1.e[i];
        }
        return OK;
    }
    /*两个三元组对应元素相减,并将其依次放入数组x1中*/
    Status SubtractTriplet(Triplet &T,Triplet &T1,Elemtype x1[])
    {
        Status i;
        for(i=0;i<3;i++)
        {
            x1[i]=T.e[i]-T1.e[i];
        }
        return OK;
    }
    /*输出数组x或x1的各元素值*/
    Status ShowResult(Elemtype x[])
    {
        Status i;
        for(i=0;i<3;i++)
            printf("%f  ",x[i]);
        printf("\n");
        return OK;
    }
    /*三元组T的各元素同乘一个比例因子k*/
    Status MultiplyNumberT(Triplet &T,Elemtype k)
    {
        Status i;
        for(i=0;i<3;i++)
            T.e[i]=k*T.e[i];
        return OK;
    }
    /*三元组T1的各元素同乘一个比例因子k*/
    Status MultiplyNumberT1(Triplet &T1,Elemtype k)
    {
        Status i;
        for(i=0;i<3;i++)
            T1.e[i]=k*T1.e[i];
        return OK;
    }
    int main()
    {
    	Triplet T,T1;
    	Status i,flag,flag1,t=0;
    	Elemtype v1,v2,v3,a1,a2,a3,e,x[3],x1[3],k;
    	printf("Please input three values into Triplet v1,v2,v3:\n");
    	scanf("%f%f%f",&v1,&v2,&v3);
    	flag=InitTriplet(T,v1,v2,v3);
    	printf("初始化三元组T:flag:%d(1:成功)\n",flag);
    	printf("三元组T1中三个值分别为:\n");
    	ShowTriplet(T,t);
    	printf("\nPlease input three values into Triplet1 a1,a2,a3:\n");
    	scanf("%f%f%f",&a1,&a2,&a3);
    	flag1=InitTriplet1(T1,a1,a2,a3);
    	printf("初始化三元组T1:flag1:%d(1:成功)\n",flag1);
    	printf("三元组T1中三个值分别为:\n");
    	ShowTriplet(T1,t);
    	printf("\n输入三元组T想获得的第几个元素值(1-3):\n");
    	scanf("%d",&t);
    	Getelem(T,t,e);
    	printf("三元组T中第%d的值为:%f\n",t,e);
    	printf("你想重置T中第几个的值(1-3):\n");
    	scanf("%d",&t);
    	printf("重置它的值为:\n");
    	scanf("%f",&e);
    	Put(T,t,e);
    	printf("重置T中第%d的值后,三元组T的三个值为:%f,%f,%f\n",t,T.e
    
    [0],T.e[1],T.e[2]);
    	printf("max=%f,min=%f\n",GetMax(T,e),GetMin(T,e));
    	ShowTriplet(T,t);
    	printf("\n");
    	if(IsAscending(T))
    	    printf("T是一个升序三元组!\n");
    	if(IsDescending(T))
    	    printf("T是一个降序三元组!\n");
    	flag=DestroyTriplet(&T);
    	AddTriplet(T,T1,x);
    	printf("两个三元组对应分量相加后的三个结果为:\n");
    	ShowResult(x);
    	SubtractTriplet(T,T1,x1);
    	printf("两个三元组对应分量相减后的三个结果为:\n");
    	ShowResult(x1);
    	printf("请输入比例因子k: ");
    	scanf("%f",&k);
    	MultiplyNumberT(T,k);
    	printf("\n三元组T各元素乘过比例因子k后,得到的三个元素值分别为:\n");
    	t=0;
    	ShowTriplet(T,t);
    	MultiplyNumberT1(T1,k);
    	printf("\n三元组T1各元素乘过比例因子k后,得到的三个元素值分别为:\n");
    	ShowTriplet1(T1);
    	flag1=DestroyTriplet(&T);
    	printf("\n销毁三元组T:flag=%d(1:成功)\n",flag);
    	flag1=DestroyTriplet(&T1);
    	printf("销毁三元组T1:flag1=%d(1:成功)",flag1);
    	return OK;
    }

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43652961/article/details/88920012
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-02 12:43:23
  • 阅读 ( 143 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢