C语言-抽象数据类型三元组定义

C语言学习 专栏收录该内容
18 篇文章 0 订阅
#include<stdio.h>
#include<stdlib.h> 
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1  //不可行的 
#define overflow -2    //溢出,一般用于exit(overflow),程序退出,无论哪里调用exit
					   //程序都会推出,而return是退回到上一级。 
typedef int status;     //函数类型 
typedef int element_type;//元素类型 
typedef element_type* triplet;//三元组     感觉要改变结构里的值时用&t,不改变用t 
status init_triplet(triplet &t,element_type v1,element_type v2,element_type v3);//创建三元组 
status destory_triplet(triplet &t);			//销毁三元组 
status get(triplet t,int i,element_type &e);//取值 
status put(triplet &t,int i,element_type e);//放值 
status is_ascendint(triplet t);				//是否升序 
status is_descending(triplet t);			//是否降序 
status max(triplet t,element_type &e);
status min(triplet t,element_type &e);

status init_triplet(triplet &t,element_type v1,element_type v2,element_type v3)
{
	t=(element_type*)malloc(3*sizeof(element_type));//t存的申请空间的地址,不为0 
	if(!t)// !t为0,if不成立,不运行退出 
	exit(overflow);
	t[0]=v1;
	t[1]=v2;
	t[2]=v3;
}
status destory_triplet(triplet &t)
{
	free(t);//释放t申请的一段空间,但t指针还在,指向未知地址  
	t=NULL; //t指向null,这样的t是不允许使用的,使用需重新赋值,
			//NULL可读地址,不可读数值,这样防止了误操作 
	return ok;
}
status get(triplet t,int i,element_type &e)
{
	if(i<1 || i>3)
	return error;
	e=t[i-1];
	return ok;
} 
status put(triplet &t,int i,element_type e)
{
	if(i<1 || i>3)
	return error;
	t[i-1]=e; 
}
status is_ascendint(triplet t)
{
/*	if(t[0]<t[1])
	{
		if(t[1]<t[2])
		return ok; 
	}
	return error;*/
	return t[0]<t[1] && t[1]<t[2]; 
}
status is_descending(triplet t)
{
	return t[0]>=t[1] && t[1]>=t[2];
}
status max(triplet t,element_type &e)
{
	e=t[0]>=t[1]?(t[0]>=t[2]?t[0]:t[2]):(t[1]>=t[2]?t[1]:t[2]);
	return ok;
}
status min(triplet t,element_type &e)
{
	e=t[0]<=t[1]?(t[0]<=t[2]?t[0]:t[2]):(t[1]<=t[2]?t[1]:t[2]);
	return ok;
}
status main()
{
	//int* p=NULL;
	//printf("%#x",p);//%#x十六进制输出
} 

  • 1
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值