数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科
数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称
数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理
数据对象(data object)是性质相同的数据元素的集合,是一个数据的子集
计算机操作的对象是对弈过程中可能出新的棋盘状态–称为格局
数据结构(data structure)是相互之间存在一种 或多种特定关系的数据元素的集合
数据元素之间的相互关系称为结构
四类基本数据结构:集合、线性结构、树形结构、图状结构或网状结构
数据元素之间的逻辑关系又称为数据的逻辑结构
数据结构在计算机中的表示称为数据的物理结构,又称为存储结构
计算机中表示信息的最小单位是二进制数的一位,叫做位(bit)
计算机中用若干位组合起来形成一个位串表示一个数据元素,通常称这个位串为元素(element)
当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域(data filed)
数据元素之间的关系在计算机中有两种不同的表示方式:顺序映像和非顺序映像
两种不同的存储结构:顺序存储结构和非顺序存储结构
假如把C语言看成一个执行C指令和C数据类型的虚拟处理器,那么本书讨论的存储结构是数据结构在C虚拟处理器中的表示,称为虚拟存储结构
数据类型(data type)最早出现在高级程序语言中,用以刻画操作对象的特性
数据类型可分为两类:原子类型和结构类型
抽象数据类型(abstract data type)是指一个数学模型以及定义在该模型上的一组操作
抽象数据类型可分为原子类型(atomic data type)、固定聚合类型(fixed-aggregate data type)、可变聚合类型(variable-aggregate data type)
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
数据操作:<基本操作的定义>
}ADT 抽象数据类型名
//抽象数据类型三元组的定义
ADT Triplet{
数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}
数据关系:R1={<e1,e2>,<e2,e3>}
基本操作:
InitTriplet(&T,v1,v2,v3)
DestroyTriplet(&T)
Get(T,i,&e)
Put(&T,i,e)
IsAscending(T)
IsDecending(T)
Max(T,&e)
Min(T,&e)
}ADT Triplet
//(1)预定义常量和类型
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
/*(2)数据结构的表示用类型定义(typedef)描述.数据元素
类型约定为 ElemType,由用户在使用该数据类型时自行定义*/
//(3)基本操作的算法的形式
//(4)赋值语句 简单赋值 串联赋值 成组赋值 交换赋值 条件赋值
//(5)选择语句
//(6)循环语句
//(7)结束语句
//(8)输入语句和输出语句
//(9)注释
//(10)基本函数有 max() min() abs() 求不足整数值floor() 求仅为整数值ceil() eof() eoln()
//(11)逻辑运算约定
//抽象数据类型Triplet的表示和实现
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3);
Status DestroyTriplet(Triplet &T);
Status Get(Triplet T,int i,ElemType &e);
Status Put(Triplet &T,int i,ElemType e);
Status IsAscending(Triplet T);
Status IsDescending(Triplet T);
Status Max(Tripelt T,ElemType &e);
Status Min(Tripelt T,ElemType &e);
基本操作的实现
Status InitTriplet(Tripelt &T,ElemType v1,ElemType v2,ElemType v3)
{
T=(ElemType *)malloc(3*sizeof(ElemType));
if(!T)exit(OVERFLOW);
T[0]=v1;
T[1]=v2;
T[3]=v3;
return OK;
}
Status DestroyTriplet(Triplet &T)
{
free(T); T=NULL;
return OK;
}
Status Get(Tripelt T,int i,ElemType &e)
{
if(i<1||i>3)return ERROR;
e=T[i-1];
return OK:
}
Status Put(Triplet &T,int i,ElemType e)
{
if(i<1||i>3)return ERROR;
T[i-1]=e;
return OK;
}
Status IsAscending(Triplet T)
{
return(T[0]<=T[1])&&(T[1]<=T[2]);
}
Status IsDeScending(Triplet T)
{
return(T[0]>=T[1])&&(T[1]>=T[2]);
}
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]);
}
Status Min(Triplet T,ElemType &e)
{
e=(T[0]
算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作
算法具有五个重要特性:(1)有穷性、(2)确定性、(3)可行性、(4)输入、(5)输出
算法设计的要求(1)正确性(correctness)、(2)可读性(readablity)、(3)健壮性(robustness)、(4)效率与低存储量需求
算法效率的度量(1)事后统计的方法(2)事前分析估算的方法
渐进时间复杂度asymptotic time complexity
语句的频度frequency count 指的是该语句重复执行的次数
空间复杂度space complexity
参考文献:严蔚敏.数据结构.北京:清华大学出版社,2018