高一凡-数据结构第1章-绪论

1.1三元组抽象数据类型Triplet

三元组数据结构:

int* Triplet;

相当于数组,实现过程中类似于一个数组,以下是其函数列表:

函数列表
InitTriplet(初始化)
DestoryTriple(销毁)
Get(获取值)
Put(赋值)
IsAscending(升序?)
IsDscending(降序?)
Max(求最大)
Min(求最小)
PrintE(输出元素)
PrintT(打印三元组)

说明:ElemType为int;Triplet为int型指针;Status为int

1.初始化InitTriplet

malloc函数分配三个空间并且检查分配是否成功,传入三个元素赋值。

Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
{
	T = (ElemType*)malloc(sizeof(ElemType) * 3);
	if (!T)
		exit(OVERFLOW);
	T[0] = v1; T[1] = v2; T[2] = v3;
	return OK;
}

2.销毁三元组DestoryTriple

将初始化过的T的内存free掉,将地址指向NULL。

Status DestoryTriple(Triplet &T)
{
	free(T);
	T = NULL;
	return OK;
}

3.获取元素值Get

Status Get(Triplet T, int i, ElemType &e)
{
	if (i < 1 || i > 3)
		return ERROR;
	e = T[i - 1];
	return OK;
}

4.指定赋值Put

Status Put(Triplet T, int i, ElemType e)
{
	if (i < 1 || i > 3)
		return ERROR;
	T[i - 1] = e;
	return OK;
}

5.检查升序IsAscending

Status IsAscending(Triplet T)
{
	return (T[0] <= T[1] && T[1] <= T[2]);
}

6.检查降序IsDscending

Status IsDscending(Triplet T)
{
	return (T[0] >= T[1] && T[1] >= T[2]);
}

7.寻找最大值

Status Max(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;
}

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;
}

void PrintE(ElemType e)
{
	printf("%d\n", e);
	//printf("%f\n",e);
}

void PrintT(Triplet T)
{
	printf("%d,%d,%d\n", T[0], T[1], T[2]);
	//printf("%f,%f,%f", T[0], T[1], T[2]);
}


主函数

#if 0

#include "C1.H"

int main()
{
	Triplet T;
	ElemType m;
	Status i;
	i = InitTriplet(T, 5, 7, 9);
	printf("调用初始化函数成功,i = %d(1成功)。T的3个值为:", i);
	PrintT(T);

	i = Put(T, 2, 6);
	if (i == OK)
	{
		printf("将T的第二个值改为6,三个值为:");
		PrintT(T);
	}

	i = IsAscending(T);
	printf("调用测试升序的函数之后,i = %d(0否1是)\n", i);

	i = IsDscending(T);
	printf("调用测试降序的函数之后,i = %d(0否1是)\n", i);


	if ((i = Max(T, m)) == OK)
	{
		printf("T中最大值为:");
		PrintE(m);
	}

	if ((i = Min(T, m)) == OK)
	{
		printf("T中最小值为:");
		PrintE(m);
	}
	DestoryTriple(T);
	printf("T销毁之后,T = %u\n", T);
	return 0;
}
#endif

头文件c1.h

// c1.h (文件名)
#pragma once
#ifndef C1_H
#define C1_H
#include<string.h> // 字符串函数头文件
#include<ctype.h> // 字符函数头文件
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include<stdlib.h> // atoi(),exit()
#include<io.h> // eof()
#include<math.h> // 数学函数头文件,包括floor(),ceil(),abs()等
#include<sys/timeb.h> // ftime()
#include<stdarg.h> // 提供宏va_start,va_arg和va_end,用于存取变长参数表
// 函数结果状态代码。在教科书第10页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
// #define INFEASIBLE -1 没使用
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第7、8章用到



typedef int ElemType;
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);
Status DestoryTriple(Triplet &T);
Status Get(Triplet T, int i, ElemType &e);
Status Put(Triplet T, int i, ElemType e);
Status IsAscending(Triplet T);
Status IsDscending(Triplet T);
Status Max(Triplet T, ElemType &e);
Status Min(Triplet T, ElemType &e);
void PrintE(ElemType e);
void PrintT(Triplet T);

#endif

1.2算法和算法分析

计算的是1-1/x+1/(x*x)…
头文件c1.h

#ifndef C1_H
#define C1_H
#include<string.h> // 字符串函数头文件
#include<ctype.h> // 字符函数头文件
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include<stdlib.h> // atoi(),exit()
#include<io.h> // eof()
#include<math.h> // 数学函数头文件,包括floor(),ceil(),abs()等
#include<sys/timeb.h> // ftime()
#include<stdarg.h> // 提供宏va_start,va_arg和va_end,用于存取变长参数表
// 函数结果状态代码。在教科书第10页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
// #define INFEASIBLE -1 没使用
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第7、8章用到



typedef int ElemType;
typedef ElemType *Triplet;

#endif

ftime(timeb*)

获取当前的时间,这里t1.time跟t2.time表示的是秒,t1.millitm跟t2.millitm表示的是毫秒

主函数

#include"C1.h"

int main()
{
	timeb t1, t2;
	long t;
	double x, sum = 1, sum1;
	int i,n;
	printf("输入x n:");
	scanf("%lf%d", &x, &n);

	ftime(&t1);
	for (i = 1; i <= n; i++)
	{
		sum1 = -1.0/x;
		sum += sum1;
	}
	ftime(&t2);

	t = (t2.time - t1.time) * 1000 + (t2.millitm - t1.millitm);
	printf("sum = %lf,用时 %ld 毫秒\n", sum, t);
}
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值