抽象数据类型的表示和实现(三元组)

/*********************************************************************
    程序名: 抽象数据类型的表示和实现
    作者: 南去良鱼
    日期: 2023-03-05 10:36
    说明: 实验目的
(1)复习巩固C语言的结构体、指针、函数、动态分配内存等知识点。
(2)掌握抽象数据类型的定义、表示和实现,为后续实验打好基础。
*********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 3//三元组
typedef float ElemType;//定义元素类型
typedef ElemType *Triplet;//定义指向指针指向Triplet,float*  Triplet;
//创建一个三元组
void initTriplet(Triplet &T, ElemType v[]) {
//动态分配内存
	T = (Triplet)malloc(sizeof(ElemType) * N);
	if (!T) {
		exit (-2);//内存分配失败,退出
	}
	int i;
	for (i = 0; i < N; i++) {
		T[i] = v[i]; //赋值
	}
}

//显示三元组
void printTriplet(Triplet T) {
	int i;
	printf("这个%d元组为:\n", N);
	for (i = 0; i < N; i++) {
		printf("%f\t", T[i]);
	}
	printf("\n");
}

//取三元组的任意一个分量
void GetElem(Triplet T, int e) {
	if (e >= 1 && e <= N)
		printf("%f\n", T[e - 1]);
	else
		printf("ERROR\n");
}

//求三元组的最大分量
ElemType MaxElem(Triplet T) {
	ElemType m;
	int i;
	m = T[0];
	for (i = 1; i < N; i++) {
		if (T[i] > T[i + 1])
			m = T[i];
	}
	return m;
}

//求三元组的最小分量
ElemType MinElem(Triplet T) {
	ElemType m;
	int i;
	m = T[0];
	for (i = 1; i < N; i++) {
		if (T[i] < T[i + 1])
			m = T[i];
	}
	return m;

}

//销毁三元组
void DestroyList(Triplet T) {
	free(T);
}

//置三元组的任意一个分量(将e放到第i个)
void PutElem(Triplet T, int i, ElemType e) {
	if (i < 1 || i > N) {
		printf("ERROR");
	} else {
		T[i - 1] = e;
	}
}

//实现两个三元组的对应分量相加
void add(Triplet T, Triplet &T2) {
	int i;
	for (i = 0; i < N; i++) {
		T2[i] += T[i];
	}
}


//给三元组的各分量同乘一个比例因子
void multiconstant(Triplet T, int i) {
	int j;
	for (j = 0; j < N; j++) {
		T[j] *= i;
	}
	printf("得出的结果为:");
	for (j = 0; j < N; j++) {
		printf("%f\t", T[j]);
	}
	printf("\n");
}

int main(void) {

	Triplet T;//三元组名称T
	int a = 0; //几个三元组
	while (1) {
		char s;
		printf("********************\n");
		printf("请选择想实现的功能:\n");
		printf("1.创建一个三元组\n");
		printf("2.显示三元组\n");
		printf("3.取三元组的任意一个分量\n");
		printf("4.置三元组的任意一个分量(将e放到第i个)\n");
		printf("5.求三元组的最大分量\n");
		printf("6.求三元组的最小分量\n");
		printf("7.销毁三元组\n");
		printf("8.给三元组的各分量同乘一个比例因子\n");
		printf("9.实现两个三元组的对应分量相加\n");
		printf("0.退出\n");
		printf("********************\n");
		scanf("%s", &s);
		if (s == '1') {
			a++;

			ElemType v[N];
			printf("请输入n元组的每个元素(N=%d)\n", N);
			int i;
			for (i = 0; i < N; i++) {
				scanf("%f", &v[i]);
			}
			initTriplet(T, v);
		}
		if (s == '2') {
			printTriplet(T)	;
		}
		if (s == '3') {
			int x;
			printf("请输入取第几个分量:");
			scanf("%d", &x);
			GetElem(T, x);
		}
		if (s == '4') {
			int m, n;
			printf("想要将什么数据放在第几个位置:");
			scanf("%d %d", &m, &n);
			PutElem(T, n, m);
		}
		if (s == '5') {
			ElemType max;
			max = MaxElem(T);
			printf("%f\n", max);
		}
		if (s == '6') {
			ElemType min;
			min = MinElem(T);
			printf("%f\n", min);
		}
		if (s == '7') {
			DestroyList(T);
		}
		if (s == '8') {
			int n;
			printf("想要的比例因子为:");
			scanf("%d", &n);
			multiconstant(T, n);
		}
		if (s == '9') {
			Triplet T1;
			ElemType l[N];
			printf("请输入第二个三元组的三个元素:");
			int i;
			for (i = 0; i < N; i++) {
				scanf("%f", &l[i]);
			}
			initTriplet(T1, l);
			add(T, T1);
			printf("相加后的值为:");
			printTriplet(T1);
		}
		if (s == '0') {
			break;
		}
	}

	return 0;
}

 为复习巩固C语言的结构体、指针、函数、动态分配内存等知识点,尝试制作三元组。

如有不足,多多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值