【2.2】三元组

1、首先截图说明文件布局


2、使用me.h对三元组的函数进行声明。

#ifndef _YE_LE_LE_
#define _YE_LE_LE_


typedef int *Triplet;
typedef int Status;
typedef int ElemType;


Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);//初始化三元组,返回初始化状态,成功为1,失败为0 

Status DestoryTriplet(Triplet &T);//销毁三元组 ,返回成功的状态

Status Get(Triplet T, int i, ElemType &e); //得到其中的一个元素的值 

Status Put(Triplet &T, int i, ElemType e);//修改其中一个元素的值 

Status IsAsceding(Triplet T);//判断三元组是否为升序排列

Status IsDesceding(Triplet T); //判断三元组是否为降序排列

Status Max(Triplet T, ElemType &e);//返回三元组的最大值

Status Min(Triplet T, ElemType &e);//返回三元组的最小值

#endif

3、编写三元组的函数实现。

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
//定义指向三元组首地址的指针
typedef int *Triplet;
//返回值类型
typedef int Status;
//参数类型
typedef int ElemType;
//初始化三元组的实现 
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {
	T = (ElemType *)malloc(sizeof(ElemType) * 3);
	if (!T)
	{
		exit(OVERFLOW);
	}

	T[0] = v1;
	T[1] = v2;
	T[2] = v3;
	return OK;
}

//销毁三元组
Status DestoryTriplet(Triplet &T)
{
	free(T);
	T = NULL;
	return OK;
}

//&e传递的是对实参的引用(别名)
Status Get(Triplet T, int i, ElemType &e)
{
	if (i<1 || i>3)
	{
		return ERROR;
	}
	e = T[i - 1];
	return OK;
}

//修改其中一个元素的值 
Status Put(Triplet &T, int i, ElemType e)
{
	if (i<1 || i>3)
	{
		return ERROR;
	}
	T[i - 1] = e;
	return OK;
}

//判断三元组是否为升序排列
Status IsAsceding(Triplet T)//因为在这里判断是否为升序,对T的内容没有影响,在形参中没有用引用
{
	/*if (T[0]<=T[1]&&T[1]<=T[2])
	{
		return TRUE;
	}
	return FALSE;*/
	return (T[0] <= T[1] && T[1] <= T[2]);
}

//判断三元组是否为降序排列
Status IsDesceding(Triplet T)
{
	/*if (T[0] >= T[1] && T[1] >= T[2])
	{
		return TRUE;
	}
	return FALSE;*/
	return (T[0] >= T[1] && T[1] >= T[2]);
}

//返回三元组的最大值
Status Max(Triplet T, ElemType &e)
{
	int max = T[0]>T[1]?T[0]:T[1];
	e = max > T[2] ? max : T[2];
	return e;
}

//返回三元组的最小值
Status Min(Triplet T, ElemType &e)
{
	int min = T[0]<T[1] ? T[0] : T[1];
	e = min < T[2] ? min : T[2];
	return e;
}

4、写出主函数对三元组实现进行测试。

#include<stdio.h>
#include<stdlib.h>
#include"me.h"
typedef int *Triplet;
typedef int Status;
typedef int ElemType;

int main()
{
	Triplet T=NULL;
	ElemType v1 = 4, v2 = 2, v3 = 3;
	int i,e;
	i = InitTriplet(T, v1, v2, v3);//初始化三元组,T是一个整形的地址
	//输出三元组的初始化结果
	printf("初始化完成的内容:\n");
	for (i = 0; i<3; i++)
	{
		printf("%d\n", T[i]);
	}
	//销毁三元组
	//i = DestoryTriplet(T);
	//printf("%d\n",i);

	//Get(T, 1, e);
	//printf("%d\n",e);
	printf("修改之后的内容:\n");
	Put(T, 2, 10);
	for (i = 0; i<3; i++)
	{
		printf("%d\n", T[i]);
	}
	//判断是否为升序排序,是返回1,否返回0
	printf("判断是否为升序排序\n");
	i=IsAsceding(T);
	if (i==1)
	{
		printf("true\n");
	}
	else
	{
		printf("false\n");
	}
	printf("三元组中的最大值:\n");
	i=Max(T, e);
	printf("%d\n",i);
	printf("三元组中的最小值:\n");
	i = Min(T, e);
	printf("%d\n", i);
	return 0;
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页