数据结构(C语言版)类C代码的代码实现(一)抽象数据类型的表示和实现

本文详细描述了如何使用C语言实现了一个名为Triplet的抽象数据类型,包括元素的初始化、销毁、获取、设置以及比较操作,并通过测试函数展示了其实现过程和功能。
摘要由CSDN通过智能技术生成

目录

创作原因

抽象数据类型的表示和实现

#include “head.h”

主函数——测试函数

测试数据结果


创作原因

因为本人基础实在太差,所以决定在寒假这四十多天的时间内将数据结构C语言版(严蔚敏、吴伟民)书上的伪代码尽量用C语言实现完。我知道这是一个大坑,但是先试试,希望可以用这样的方式夯实自己的基础。

抽象数据类型的表示和实现

首先,下面的抽象数据类型Triplet,其元素e1,e2,e3可以是整数或字符或字符串,甚至更复杂地有多种成分构成(只要能进行关系运算即可)。——反正需要借助面向对象的程序设计语言如C++实现。这里暂时先当成整数处理。

我用的是VS的C++语言来兼容C语言。

#include “head.h”

#pragma once
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;//Status是函数的类型,其值是函数结果状态代码

//-----采用动态分配的存储结构-----
typedef int ElemType;
typedef ElemType* Triplet;//由InitTriplet分配3个元素存储空间

//-----基本操作的实现-----
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {
	//构造三元组T,依次置入T的3个元素的初值v1,v2,v3。
	//曾尝试不用引用,但函数内所有的T变成了*T,如T[0]变成了*T[0],不好理解
	T = (ElemType*)malloc(3 * sizeof(ElemType));//分配3个元素的储存空间
	if (!T)exit(OVERFLOW);//分配存储空间失败
	T[0] = v1; T[1] = v2;T[2] = v3;
	return OK;
}
Status DestroyTriplet(Triplet &T) {
	//销毁三元组
	free(T);  T = NULL;
	return OK;
}
Status Get(Triplet T,int i,ElemType &e) {
	//1<=i<=3,用e返回T的第i元的值。
	if (i < 1 || i > 3)return ERROR;
	e = T[i - 1];
	return OK;
}
Status Put(Triplet& T, int i, ElemType e) {
	//1<=i<=3,置T的第i元的值为e。
	if (i < 1 || i > 3)return ERROR;
	T[i - 1] = e;
	return OK;
}
Status IsAscending(Triplet T) {
	//如果T的3个元素按升序排列,则返回1,否则返回0。
	return(T[0] <= T[1]) && (T[1] <= T[2]);
}
Status IsDescending(Triplet T) {
	//如果T的3个元素按降序排列,则返回1,否则返回0。
	return(T[0] >= T[1]) && (T[1] >= T[2]);
}
Status Max(Triplet T, ElemType& e) {
	//用e返回指向T的最大元素的值。
	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, ElemType& e) {
	//用e返回指向T的最小元素的值。
	e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
	return OK;
}

主函数——测试函数

#include "head.h"

int main()
{
	Triplet T;
	ElemType e;
	InitTriplet(T, 14, 22, 35);
	Get(T, 2, e);
	printf("理论输出:22\n");
	printf("实际输出:%d\n", e);
	e = 29;
	Put(T, 2, e);
	printf("理论输出:29\n");
	printf("实际输出:%d\n", e);
	if(IsDescending(T))
	{
		printf("降序\n");
	}
	if(IsAscending(T))
	{
		printf("升序\n");
	}
	Get(T, 1, e);
	printf("理论输出:14\n");
	printf("实际输出:%d\n", e);
	Max(T, e);
	printf("理论输出:35\n");
	printf("实际输出:%d\n", e);
	Min(T, e);
	printf("理论输出:14\n");
	printf("实际输出:%d\n", e);
	return 0;
}

测试数据结果

总结

这个抽象数据类型有点像C++中的类,v1,v2,v3是它的三个成员,上面的基本操作是是它的成员函数。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值