目录
因为本人基础实在太差,所以决定在寒假这四十多天的时间内将数据结构C语言版(严蔚敏、吴伟民)书上的伪代码尽量用C语言实现完。我知道这是一个大坑,但是先试试,希望可以用这样的方式夯实自己的基础。
首先,下面的抽象数据类型Triplet,其元素e1,e2,e3可以是整数或字符或字符串,甚至更复杂地有多种成分构成(只要能进行关系运算即可)。——反正需要借助面向对象的程序设计语言如C++实现。这里暂时先当成整数处理。
我用的是VS的C++语言来兼容C语言。
#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;
}