考研数据结构学习Day1 类C语言说明

简介

严蔚敏的《数据结构(第二版)》采用一种介于伪码和 C 语言之间的类 C 语言作为描述工具,与 Weiss 的《数据结构与算法分析——C 语言描述》相似。使用类 C 语言可以使数据结构与算法的描述与讨论简明清晰,不拘泥于 C 语言的细节,又容易转换成 C 或 C++程序。

类 C 语言的简要说明

预定义常量及类型

// 函数结果状态代码
#define OK 1
#define ERROR 0
#define OVERFLOW -2
// Status是函数返回值类型,其值是函数结果状态代码。
typedef int Status;

数据结构的表示

数据结构的表示(存储结构)用类型定义(typedef)描述;数据元素类型约定为 ElemType,由用户在使用该数据类型时自行定义。

基本操作

基本操作的算法都用如下格式的函数来描述:

函数类型 函数名 (函数参数表) {
	// 算法说明
	语句序列
} // 函数名

当函数返回值为函数结果状态代码时,函数类型定义为Status
为了便于描述算法,除了值调用方式外,增加了 C++语言引用调用的参数传递方式。在形参表中,以“&”打头的参数即为引用参数。传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化,但引用使用起来比指针更加方便、高效。

内存的动态分配与释放

使用 new 和 delete 动态分配和释放内存空间:

//分配空间
指针变量 = new 数据类型;
// 释放空间
delete 指针变量;

赋值语句

// 简单赋值
变量名 = 表达式; 
// 串联赋值
变量名1 = 变量名2 = ... = 变量名n = 表达式; 
// 成组赋值
(变量名1, ..., 变量名n) = (表达式1, ..., 表达式n); 
// 结构赋值
结构名1 = 结构名2;
结构名 = (1,2, ..., 值n);
// 条件赋值
变量名 = 条件表达式 ? 表达式T: 表达式F;
// 交换赋值
变量名1 <-->变量名2;

疑问:交换赋值是什么

选择语句

// 条件语句 1
if (表达式) 语句;
// 条件语句 2 
if (表达式) 语句;
else 语句;
// 开关语句
switch (表达式) {
	case1: 语句序列1; break;
	case2: 语句序列2; break;
	...
	case 值n: 语句序列n; break;
	default: 语句序列n+1;
}

循环语句

// for语句
for (表达式1; 条件; 表达式2) 语句;
// while语句
while (条件) 语句;
// do-while语句
do {
	语句序列
} while (条件);

结束语句

// 函数结束语句
return 表达式;
return;
case 或循环结束语句 break;
异常结束语句 exit (异常代码);

输入输出语句

输入输出语句使用 C++流式输入输出的形式:

// 输入语句
cin>>变量1>>...>>变量n;
// 输出语句
cout<<表达式1<<...<<表达式n;

基本函数

// 求最大值
Max (表达式1, ..., 表达式n)
// 求最小值
Min (表达式1, ..., 表达式n)

抽象数据类型的定义、表示和实现

以复数为例,给出一个完整的 ADT 定义、表示和实现。

定义部分

ADT Complex {
	数据对象:D = {e1,e2|e1,e2∈R, R是实数集}
	数据关系:S = {<e1,e2>|e1是复数的实部,e2是复数的虚部}
	基本操作:
		Create (&C, x, y)
			操作结果:构造复数C,其实部和虚部分别被赋以参数x和y的值。
		GetReal (C)
			初始条件:复数C已存在。
			操作结果:返回复数C的实部值。
		GetImag (C)
			初始条件:复数C已存在。
			操作结果:返回复数C的虚部值。
		Add (C1, C2)
			初始条件:C1, C2是复数。
			操作结果:返回两个复数C1和C2的和。
		Sub (C1, C2)
			初始条件:C1, C2是复数。
			操作结果:返回两个复数C1和C2的差。
} ADT Complex

表示部分

typedef struct { // 复数类型
	float Realpart; // 实部
	float Imagepart; // 虚部
} Complex;

实现部分

// 构造一个复数
void Create (&Complex C, float x, float y) {
	C.Realpart = x;
	C.Imagepart = y;
}
// 取复数的实部
float GetReal (Complex C) {
	return C.Realpart;
}
// 取复数的虚部
float GetImage (Complex C) {
	return C.Imagepart;
}
// 求两个复数C1和C2的和sum
Complex Add (Complex C1, Complex C2) {
	Complex sum;
	sum.Realpart = C1.Realpart + C2.Realpart;
	sum.Imagepart = C1.Imagepart + C2.Imagepart;
	return sum;
}
// 求两个复数的差difference
Complex Sub (Complex C1, Complex C2) {
	Complex difference;
	difference.Realpart = C1.Realpart + C2.Realpart;
	difference.Imagepart = C1.Imagepart + C2.Imagepart;
	return difference;
}
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值