数据结构实验

实验一 三元组(Triplet)

定义三元组:

ADT Triplet{

数据对象:D={e1,e2,e3}

}

  输出三元组内容: PrintTriplet(T)

实现两个三元组的对应分量的相加或相减:add(T1,&T2)

这里用T2带回来结果,对T2进行引用

给三元组的各分量同乘一个比例因子:mulCoef(&T1,coef)

这里用T1带回结果

实现N元组:

代码:

拿三元组的看,如果需要改为N元组还需要再main函数中添加循环……

#include <stdio.h>
#include <stdlib.h>

#define N 3      //定义符号常量N 目的是不把代码写死方便实现N元组

typedef float ElemType;//给float类型重新定义为ElemType
typedef ElemType *Triplet;//给指向ElemType类型的指针定义(起别名)为Triplet

//1.N元组初始化
void initTriplet(Triplet &T, ElemType a[]) {  //用T带回结果-void   a[]数组类型和上面定义的类型一样
	T = (Triplet)malloc(sizeof(ElemType) * N);
	if (!T)
		exit(-1);     //0表示正常退出,其他值表示异常退出
	int i;
	for (i = 0; i < N; i++) {
		T[i] = a[i];
	}
}

//2.输出N元组
void PrintfTriplet(Triplet T) {
	int i;
	for (i = 0; i < N; i++) {
		printf("%.1f\t", T[i]);
	}
	printf("\n");
}

//3.用e获取T的第i个元素的值
void getElem(Triplet T, int i, ElemType& e)
{
	if (i<i || i>N)
		printf("请输入正确范围内的值!");
	else
		e = T[i - 1];
}

//4.置换T的第i元的值为e
void putElem(Triplet &T, int i, ElemType e) {
	T[i - 1] = e;
}



//5.取最大值
void getMax(Triplet T, ElemType &e) {
	int i;
	e = T[0];
	for (i = 1; i < N; i++) {
		if (T[i] > e)
			e = T[i];
	}
}

//6.取最小值
void getMin(Triplet T, ElemType &e) {
	int i;
	e = T[0];
	for (i = 1; i < N; i++) {
		if (T[i] < e)
			e = T[i];
	}
}

//7.两个N元组相加
void add(Triplet T1, Triplet &T2) {
	int i;
	for (i = 0; i < N; i++) {
		T2[i] += T1[i];
	}
}

//8.N元组的各系数同乘比例
void MulCoef(Triplet T1, float coef) {
	int i;
	for (i = 0; i < N; i++) {
		T1[i] *= coef;
	}
}

//9.销毁三元组并退出系统
void destroy(Triplet T) {
	if (!T)
		free(T);
	exit(0);
}

//主函数
int main() {
	Triplet T1, T2;
	ElemType v[N], coef, e;
	int i, Num, flat;
	printf("-----N元组操作主菜单-----\n");
	printf("1.N元组初始化\n");
	printf("2.输出三元组\n");
	printf("3.用e获取T的第i个元素的值\n");
	printf("4.置换T的第i元的值为e\n");
	printf("6.取最大值\n");
	printf("7.取最小值\n");
	printf("8.输入另一个N元组(N = %d)并相加\n", N);
	printf("9.N元组的倍增或倍减\n");
	printf("10.释放内存并退出系统\n");
	while (1) {
		printf("请输入你想实现的功能的编号:\n");
		printf("请先初始化三元组!\n");
		scanf("%d", &Num);
		switch (Num) {
			//N元组初始化
			case 1:
				printf("请输入N元组(N=%d)的每个元素的值:\n", N);
				for (i = 0; i < N; i++)
					scanf("%f", &v[i]);
				initTriplet(T1, v);
				break;
			//输出N元组
			case 2:
				printf("初始化好的N元组为:\n");
				PrintfTriplet(T1);
				break;
			//获取第i个元素的值
			case 3:printf("请输入要获取第几个元素的值:\n");
				scanf("%d", &i);
				getElem(T1, i, e);
				if (i >= 1 && i <= N)
					printf("第%d个元素的值为:%.1f\n", i, e);
				break;
			//置换T的第i元的值为e
			case 4:
				printf("请输入你想要置换第几个元素:\n");
				scanf("%d", &i);
				putElem(T1, i, e);
				printf("置换后的新的N元组为:\n");
				PrintfTriplet(T1);
				break;
			//取最大值
			case 6:
				getMax(T1, e);
				printf("最大值为:%.1f\n", e);
				break;
			//取最大值
			case 7:
				getMin(T1, e);
				printf("最小值为:%.1f\n", e);
				break;
			//输入另一个N元组(N = %d)并相加
			case 8:
				printf("请输入要相加的N元组(N=%d)的每个元素\n", N);
				for (i = 0; i < N; i++)
					scanf("%f", &v[i]);
				initTriplet(T2, v);
				add(T1, T2);
				printf("相加后的N元组为:\n");
				PrintfTriplet(T2);
				break;
			//N元组的倍增或倍减
			case 9:
				printf("请输入N元组要相乘的数:\n");
				scanf("%f", &coef);
				MulCoef(T1, coef);
				printf("N元组乘以比例系数后的结果为:\n");
				PrintfTriplet(T1);
				break;
			//释放内存并退出系统
			case 10:
				destroy(T1);
				destroy(T2);
				break;
			default:
				printf("没有所需的功能\n");
				break;
		}
		printf("感谢您的本次使用!\n"); 
	}
	return 0;
}

数据类型没有直接定义为float……而是直接定义为了ElemType,后续直接在前更改就好,但是后面输出时需要注意printf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值