第 1 章 绪论 (三元组)

1.  示例代码:

1)status.h

/* DataStructure 预定义常量和类型头文件 */

#ifndef STATUS_H
#define STATUS_H

/* 函数结果状态码 */
#define TRUE 					1			/* 返回值为真 */
#define FALSE 					0			/* 返回值为假 */
#define RET_OK 					0			/* 返回值正确 */
#define INFEASIABLE    		   	2			/* 返回值未知 */
#define ERR_MEMORY     		   	3			/* 访问内存错 */
#define ERR_NULL_PTR   			4			/* 空指针错误 */
#define ERR_MEMORY_ALLOCATE		5			/* 内存分配错 */
#define ERR_NULL_STACK			6			/* 栈元素为空 */
#define ERR_PARA				7			/* 函数参数错 */
#define ERR_OPEN_FILE			8			/* 打开文件错 */
typedef int Status;							/* Status 是函数的类型,其值是函数结果状态代码,如 OK 等 */
typedef int Bollean;						/* Boolean 是布尔类型,其值是 TRUE 或 FALSE */

#endif // !STATUS_H

2) triplet.h

/* 抽象数据类型 Triplet 和 ElemType 的基本操作头文件 */

#ifndef TRIPLET_H
#define TRIPLET_H

#include "status.h"
#define SIZE 3

typedef int ElemType;				/* 定义抽象数据类型 ElemType 在本程序中为整型 */
typedef ElemType* Triplet;			/* 由 InitTriplet 分配三个元素存储空间 */

/* 操作结果:构造三元组 T,依次置 T 的三个元素的初值为 v1, v2 和 v3 */
Status InitTriplet(Triplet* T, ElemType v1, ElemType v2, ElemType v3);

/* 操作结果:三元组 T 被销毁 */
void DestroyTriplet(Triplet* T);

/* 初始条件:三元组 T 已存在,1 ≤ i ≤ 3。操作结果:用 e 返回 T 的第 i 元的值 */
Status Get(Triplet T, int i, ElemType* e);

/* 初始条件:三元组 T 已存在,1 ≤ i ≤3。操作结果:改变 T 的第 i 元的值为 e */
Status Put(Triplet T, int i, ElemType e);

/* 初始条件:三元组 T 已存在。操作结果:如果 T 的三个元素按升序排列,返回 1,否则返回 0 */
Bollean IsAscending(Triplet T);

/* 初始条件:三元组 T 已存在。操作结果:如果 T 的三个元素按降序排列,返回 1,否则返回 0 */
Bollean IsDescending(Triplet T);

/* 初始条件:三元组 T 已存在。操作结果:用 e 返回 T 的三个元素中的最大值 */
void Max(Triplet T, ElemType* e);

/* 初始条件:三元组 T 已存在。操作结果:用 e 返回 T 的三个元素中的最小值 */
void Min(Triplet T, ElemType* e);

#endif // !TRIPLET_H

3) triplet.c

/* 抽象数据类型 Triplet 和 ElemType 的基本操作实现 */
#include "triplet.h"
#include 			/* 提供 malloc() 函数原型*/
#include 

/* 操作结果:构造三元组 T,依次置 T 的三个元素的初值为 v1, v2 和 v3 */
Status InitTriplet(Triplet* T, ElemType v1, ElemType v2, ElemType v3)
{
	*T = (ElemType*)malloc(sizeof(ElemType) * SIZE);
	if (!(*T)) {
		printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_MEMORY_ALLOCATE);
		return ERR_MEMORY_ALLOCATE;
	}

	(*T)[0] = v1;
	(*T)[1] = v2;
	(*T)[2] = v3;

	return RET_OK;
}

/* 操作结果:三元组 T 被销毁 */
void DestroyTriplet(Triplet* T)
{
	free(*T);
	*T = NULL;
}

/* 初始条件:三元组 T 已存在,1 ≤ i ≤ 3。操作结果:用 e 返回 T 的第 i 元的值 */
Status Get(Triplet T, int i, ElemType* e)
{
	if (i < 1 || i > 3) {
		printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_PARA);
		return ERR_PARA;
	}

	*e = T[i - 1];

	return RET_OK;
}

/* 初始条件:三元组 T 已存在,1 ≤ i ≤3。操作结果:改变 T 的第 i 元的值为 e */
Status Put(Triplet T, int i, ElemType e)
{
	if (i < 1 || i > 3) {
		printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_PARA);
		return ERR_PARA;
	}

	T[i - 1] = e;

	return RET_OK;
}

/* 初始条件:三元组 T 已存在。操作结果:如果 T 的三个元素按升序排列,返回 1,否则返回 0 */
Bollean IsAscending(Triplet T)
{
	return (T[0] <= T[1] && T[1] <= T[2]);
}

/* 初始条件:三元组 T 已存在。操作结果:如果 T 的三个元素按降序排列,返回 1,否则返回 0 */
Bollean IsDescending(Triplet T)
{
	return (T[0] >= T[1] && T[1] >= T[2]);
}

/* 初始条件:三元组 T 已存在。操作结果:用 e 返回 T 的三个元素中的最大值 */
void Max(Triplet T, ElemType* e)
{
	*e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[1] >= T[2]) ? T[1] : T[2]);
}

/* 初始条件:三元组 T 已存在。操作结果:用 e 返回 T 的三个元素中的最小值 */
void Min(Triplet T, ElemType* e)
{
	*e = (T[0] <= T[1]) ? ((T[0] < T[2]) ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
}

4) main.c

#include 
#include "status.h"
#include "triplet.h"

int main(void)
{
	Triplet T;
	/* 初始化三元组 */
	Status ret = InitTriplet(&T, 5, 7, 9);
	printf("初始化三元组%s, T[0] = %d, T[1] = %d, T[2] = %d\n\n", ret == RET_OK ? "成功" : "失败", T[0], T[1], T[2]);

	/* 获取三元组第 i 个值 */
	ElemType e;
	int i = 2;
	ret = Get(T, i, &e);
	if (ret != RET_OK) {
		printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ret);
		return ret;
	}

	printf("获取成功,T 的第 %d 个值为:%d\n\n", i, e);

	/* 改变三元组第 i 个值 */
	e = 6;
	ret = Put(T, i, e);
	if (ret != RET_OK) {
		printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ret);
		return ret;
	}

	printf("改变三元组成功,T 的第 %d 个值为:%d\n\n", i, T[i - 1]);

	/* 判断三元组是否升序 */
	ret = IsAscending(T);
	printf("该三元组为%s\n\n", ret == TRUE ? "升序" : "非升序");

	/* 判断三元组是否降序 */
	ret = IsDescending(T);
	printf("该三元组为%s\n\n", ret == TRUE ? "降序" : "非降序");

	/* 获取三元组中最大值 */
	Max(T, &e);
	printf("三元组中最大值为:%d\n\n", e);

	/* 获取三元组中最小值 */
	Min(T, &e);
	printf("三元组中最小值为:%d\n\n", e);

	/* 销毁三元组 */
	DestroyTriplet(&T);

	return 0;
}

2.  输出示例:

第 1 章 绪论 (三元组)_第1张图片

你可能感兴趣的:(#,数据结构(C语言版),数据结构,算法,c语言)