数据结构学习笔记day3

1.3 抽象数据类型的表示与实现
抽象数据类型可通过固有数据类型来表示和实现,即利用处理器中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的操作。
(1)预定义常量和类型:
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
(2)数据结构的表示(存储结构)用类型定义(typedef)描述。数据元u尿素类型约定为ElemType,由用户在使用该数据类型时自行定义。
(3)基本操作的算法都用以下形式的函数描述:
函数类型 函数名(函数参数表){
//算法说明
语句序列
}//函数名
除了函数的参数需要说明类型外,算法中使用的辅助变量可以不作变量说明,必要时对其作用给予注释。一般而言,a、 b、 c、 d、 e等用作数据元素名,I、 j、 k、 l、 m、 n等用作整型变量名,p、 q、 r等用作指针变量名。当函数返回值为函数结果状态代码时,函数定义为Status类型。未来便于算法描述,除了值调用方式外,增添了c++语言的引用调用的参数传递方式。在形参表,以&打头的参数即为引用参数。
(4)赋值语句有
简单赋值 变量名 = 表达式;
串联赋值 变量名1 = 变量名2 = … = 变量名k = 表达式;
成组赋值 (变量名1,…,值k) = (表达式1,…,表达式k);
结构名 = 结构名;
结构名 = (值1,…,值k);
变量名 [ ] = 表达式;
变量名 [ 起始下标..终止下标 ] = 变量名 [ 起始下标..终止下标 ];
变换赋值 变量名 <–> 变量名;
条件赋值 变量名 = 条件表达式 ? 表达式T : 表达式F;
(5)选择语句有
条件语句1 if(表达式) 语句;
条件语句2 if(表达式)语句;
else 语句;
开关语句1 switch(表达式){
case 值1:语句序列1;break;

case值 n:语句序列n ; break;
default : 语句序列 n+1;
}
开关语句2 switch {
case 条件1:语句序列1;break;

case条件n:语句序列n ; break;
default : 语句序列 n+1;
}
(6)循环语句有
for 语句 for(赋初值表达式序列;条件;修改表达式序列)语句;
while语句 while(条件)语句;
do-while语句 do{
语句序列;
}while(条件);
(7)结束语句有
函数结束语句 return 表达式;
return;
case结束语句 break;
异常结束语句 exit(异常代码);
(8)输入和输出语句有
输入语句 scanf([ 格式串 ],变量1,…,变量n );
输出语句 printf([ 格式串 ],表达式1,…,表达式n );
通常省略格式串。
(9)注释
单行注释 // 文字序列
(10)基本函数有
求最大值 max( 表达式1,…,表达式n )
求最小值 min( 表达式1,…,表达式n )
求绝对值 abs( 表达式 )
求不足整数值 floor( 表达式 )
求进位整数值 ceil( 表达式 )
判定文件结束 eof( 文件变量 )或 eof
判定行结束 eoln( 文件变量 )或 eoln
(11)逻辑运算约定
与运算 && : 对于 A && B,当A的值为0时,不再对B求值。
或运算 || :对于 A || B,当A的值为非0时,不再对B求值额
例 1 抽象数据类型Triplet的表示和实额
//—- 采用动态分配的顺序存储结构 —-
typedef ElemType *Triplet; //由InitTriplet分配3个元素存储空间

//—- 基本操作的函数原型说明 ——–
Status InitTriplet( Triplet &T,ElemType v1, ElemType v2, ElemType v3);
//操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值。
Status DestroyTriplet( Triplet &T);
//操作结果:三元组被销毁。
Status Get( Triplet &T, int i,ElemType &e);
//初始条件:三元组T已存在,1≤ i ≤ 3.
//操作结果:用e返回T的第 i 元的值。
Status Put( Triplet &T, int i,ElemType &e);
//初始条件:三元组T已存在,1≤ i ≤ 3.
//操作结果:改变T的第 i 元的值为e。
Status IsAscending( Triplet T);
//初始条件:三元组T已存在。
//操作结果:如果T的3个元素按升序排列,则返回1,否则返回0
Status IsDescending( Triplet T);
//初始条件:三元组T已存在。
//操作结果:降3个元素按降序排列,则返回1,否则返回0。
Status Max( Triplet T, ElemType &e);
//初始条件:三元组T已存在。
//操作结果:用e返回T的3个元素中的最大值。
Status Min( Triplet T, ElemType &e);
//初始条件:三元组T已存在。
//操作结果:用e返回T的3个元素中的最小值。

// — 基本操作的实现 —0
Status InitTriplet( Triplet &T,ElemType v1,ElemType v2,ElemType v3){
//构造三元组T,依次置T的3个元素的初值为v1,v2和v3。
T = ( ElemType * ) malloc( 3 * sizeof(ElemType));//分配3个元素的存储空间
if ( !T )exit (OVERFLOW); //分配存储空间失败
T [0] = v1; T [1] = v2; T [3] = v3;
return OK;
} //InitTriplet
Status DestroyTriplet (Triplet &T ) {
//销毁三元组T。
free (T); T = NULL;
return OK;
}//DestroyTriplet
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;
}//Get
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;
}//Put

Status IsAscending (Triplet T) {
//如果T的3个元素按升序排列,则返回1,否则返回0。
return (T[0] < = T[1]) && (T[1] < =T[2]);
}//IsAscending
Status IsDescending (Triplet T) {
//如果T的3个元素按降序排列,则返回1,否则返回0。
return (T[0] > = T[1]) && (T[1] > =T[2]);
}//IsDescending
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;
}//Max
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;
}//Min

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价】:项目具有较高的学习借鉴价,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价】:项目具有较高的学习借鉴价,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价】:项目具有较高的学习借鉴价,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价】:项目具有较高的学习借鉴价,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价】:项目具有较高的学习借鉴价,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值