当前位置:   article > 正文

数据结构之三元组的实现_ik jk sk生成三元组

ik jk sk生成三元组

数据结构之三元组的实现

思路的构建

三元组的实现
1、必要的头文件
2、相关操作集
3、主函数调用实现最终的功能

头文件

#include<malloc.h>
#include<math.h>//包含OVERFLOW=3
#include<stdlib.h>//包含exit函数

#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
//经Hope.133发现,该例子中可不用定义SElemType类型
//20220922修改
//typedef int SElemType;
//20201001添加
typedef ElemType *Triplet;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

操作集

1.构造三元组
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
	//传参列表为三元组指针,元素一、二、三
	//通过malloc函数为三元组分配三个元素的空间
	T=(ElemType *)malloc(3*sizeof(ElemType));
	//分配失败
	if(!T)
		exit(OVERFLOW);
	T[0]=v1;T[1]=v2;T[2]=v3;
	return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
2.销毁三元组
Status DestroyTriplet(Triplet &T)
{
	//传参为三元组
	free(T);
	T=NULL;
	return OK;	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
3.返回三元组某个位置的值
Status GetElem(Triplet T,int i,ElemType &e)
{
	//传参为三元组,位置i和用来返回数值的参数e,这里的三元组不需要修改,传递实参
	//判断是否输入正确
	if(i<1||i>3)
		return ERROR;
	//正确则将i-1的值赋给e
	else
		e=T[i-1];
		return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
4.改变某个位置的值
Status Replace(Triplet &T,int i,ElemType e)
{
	//传参为三元组,位置i和替换元素e
	//判断i的位置是否为1-3
	if(i<1||i>3)
		return ERROR;
	//将e的值付给三元组i-1的位置
	else
		T[i-1]=e;
		return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
5.将三元组升序排列
Status IsAscending(Triplet T)
{
	//值只有三个,可以直接通过两两比较判断是否为升序
	//若值有很多个,可通过for循环判断是否为升序
	return (T[0]<=T[1]&&T[1]<T[2]);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
6.将三元组降序排列
Status IsDescending(Triplet T)
{
	//方法同升序
	return (T[0]>T[1]&&T[1]>T[2]);
}
  • 1
  • 2
  • 3
  • 4
  • 5
7.返回三元组最大值
Status Max(Triplet T,ElemType &e)
{
	//传参为三元组,返回参数e
	//直接通过判断语句返回最大值
	e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);
	return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
8.返回三元组最小值
Status 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]);
	return OK;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

主函数的实现

int main()
{
	//创建三元组对象T
	Triplet T;
	//构建元素m
	ElemType m;
	//执行函数完成的状态
	Status i;
	//构建三元组
	i=InitTriplet(T,0,0,0);
	printf("构造的三元组状态为%d,元素为%d,%d,%d\n",i,T[0],T[1],T[2]);

	system("pause");

	//查询操作
	int a;
	printf("请选择1-3来选择要查询的数\n");
	scanf("%d",&a);
	i=GetElem(T,a,m);
	printf("查询状态%d,查询的数为%d\n",i,m);

	system("pause");
	
	//循环修改操作
	int isRound=1;
	while(isRound)
	{
	int n=-1;
	printf("请输入需要修改数的位置和修改后的值,用空格隔开\n");
	scanf("%d %d",&n,&m);
	i=Replace(T,n,m);
	printf("修改状态为%d,修改后的三元组为%d,%d,%d\n",i,T[0],T[1],T[2]);
	printf("继续修改请按1,退出修改按0\n");
	scanf("%d",&isRound);
	}

	//判断三元组是否为升序
	i=IsAscending(T);
	printf("三元组为升序的状态为%d,(0为否,1为是)\n",i);

	system("pause");
	//判断三元组是否为降序
	i=IsDescending(T);
	printf("三元组为降序的状态为%d,(0为否,1为是)\n",i);

	system("pause");

	//最大值

	i=Max(T,m);
	printf("函数执行状态为%d,最大值为%d\n",i,m);

	system("pause");
	//最小值
	i=Min(T,m);
	printf("函数执行状态为%d,最小值为%d\n",i,m);

	system("pause");

	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

执行结果如图
在这里插入图片描述

PS:经过网友指正,缺少一个Triplet的声明,在原文已添加。

总结:三元组的实现需要注意传参问题,实参与形参的知识点一定要牢记。附源代码一份(https://download.csdn.net/download/qq_37002607/11387345)
(https://github.com/idong1e/DataStruct)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号