数据结构学习之路-第一章:绪论

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:[email protected]


正如很多专业教材一样,绪论是少不了的,自然这本书也不例外。

绪论中概括了我们整本书所将要学习的内容,也就是数据结构这本书所探寻的几大重点:集合,线性表,树,森林,图。

很多理论的东西,书本已经解释的很详细了,我在这里就不必再多废话了。

我只讲一些自己的看法。

首先,只要是写程序的人,都应该知道一个式子“程序=数据结构+算法”,数据结构的重要性不言而喻。

而如果有搞ACM的同学的话,那么对于各种数据结构都不会陌生,数据结构可是算法竞赛中的一大核心,没有被各种数据结构虐过,就不算是真正搞过ACM的人了。

本人其实也只是个渣渣,由于就读的学校属于二流中的二流,老师们的水平也比较有限,数据结构这门课讲的并不深入,自己当时学的也不彻底,在搞ACM的过程中,数据结构这方面也十分的不扎实,所以带着要复习巩固提升自己数据结构这方面的能力,于是才开始了写这连载性的博文了。


进入重点,首先绪论中先给我们来个热身,那就是三元组的建立。

这算是一个最简单的集合吧,那么我们就按照书本的步骤来进行


第一步:三元组的创建

所谓的集合,通俗而言就是以数组形式来保存的了,所以我们可以定义一个数组,所以我们在一开始,先来定义几个类型

typedef int* Triplet;//整型指针,作为数组的起始地址,可以在使用的时候再申请内存
typedef int ElemType;//集合中元素的类型
typedef int Status;//函数的类型


第二步:三元组的操作

Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
{
    //操作结果:构造三元组(v1,v2,v3)
    *T = (ElemType*)malloc(3*sizeof(ElemType));//分配3个元素的存储空间
    if(!(*T)) exit(OVERFLOW);//分配存储空间失败
    (*T)[0] = v1;
    (*T)[1] = v2;
    (*T)[2] = v3;
    return OK;
}

Status DestoryTriplet(Triplet *T)
{
    //操作结果:三元组被销毁
    free(*T);
    *T = NULL;
    return OK;
}

Status Get(Triplet T,int i,ElemType *e)
{
    //初始条件:三元组T已经存在,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)
{
    //初始条件:三元组T已经存在,1<=i<=3
    //操作结果:改变T的第i元值为e
    if(i<1||i>3) return ERROR;
    T[i-1] = e;
    return OK;
}

Status IsAscending(Triplet T)
{
    //初始条件:三元组T已存在
    //操作结果:如果T的三个元素按升序排列,则返回1,否则返回0
    return (T[0]<=T[1])&&(T[1]<=T[2]);
}

Status IsDescending(Triplet T)
{
    //初始条件:三元组T已存在
    //操作结果:如果T的三个元素按降序排列,则返回1,否则返回0
    return (T[0]>=T[1])&&(T[1]>=T[2]);
}

Status Max(Triplet T,ElemType *e)
{
    //初始条件:三元组T已存在
    //操作结果:用e返回T的3个元素中最大的值
    (*e) = T[0]>T[1]?T[0]:T[1];
    (*e) = (*e)>T[2]?(*e):T[2];
    return OK;
}

Status Min(Triplet T,ElemType *e)
{
    //初始条件:三元组T已存在
    //操作结果:用e返回T的3个元素中最小的值
    (*e) = T[0]

第三步:完整代码实现

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1


typedef int* Triplet;//整型指针,作为数组的起始地址,可以在使用的时候再申请内存
typedef int ElemType;//集合中元素的类型
typedef int Status;//函数的类型

Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
{
    //操作结果:构造三元组(v1,v2,v3)
    *T = (ElemType*)malloc(3*sizeof(ElemType));//分配3个元素的存储空间
    if(!(*T)) exit(OVERFLOW);//分配存储空间失败
    (*T)[0] = v1;
    (*T)[1] = v2;
    (*T)[2] = v3;
    return OK;
}

Status DestoryTriplet(Triplet *T)
{
    //操作结果:三元组被销毁
    free(*T);
    *T = NULL;
    return OK;
}

Status Get(Triplet T,int i,ElemType *e)
{
    //初始条件:三元组T已经存在,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)
{
    //初始条件:三元组T已经存在,1<=i<=3
    //操作结果:改变T的第i元值为e
    if(i<1||i>3) return ERROR;
    T[i-1] = e;
    return OK;
}

Status IsAscending(Triplet T)
{
    //初始条件:三元组T已存在
    //操作结果:如果T的三个元素按升序排列,则返回1,否则返回0
    return (T[0]<=T[1])&&(T[1]<=T[2]);
}

Status IsDescending(Triplet T)
{
    //初始条件:三元组T已存在
    //操作结果:如果T的三个元素按降序排列,则返回1,否则返回0
    return (T[0]>=T[1])&&(T[1]>=T[2]);
}

Status Max(Triplet T,ElemType *e)
{
    //初始条件:三元组T已存在
    //操作结果:用e返回T的3个元素中最大的值
    (*e) = T[0]>T[1]?T[0]:T[1];
    (*e) = (*e)>T[2]?(*e):T[2];
    return OK;
}

Status Min(Triplet T,ElemType *e)
{
    //初始条件:三元组T已存在
    //操作结果:用e返回T的3个元素中最小的值
    (*e) = T[0]


总体来说,绪论没有什么好讲的,关键只是让大家熟悉数据结构,好了,这次就到此为止吧。


你可能感兴趣的:(数据结构学习之路,数据结构学习之路,数据结构)