本书为《数据结构》第二版,采用面向对象方法和C++语言讲解数据结构的基本概念与算法设计技巧,适合计算机相关专业学生学习。
### 数据结构核心概念详解
#### 一、基本信息
- **书名**:《数据结构 第二版 用面向对象方法与C++语言描述》
- **作者**:殷人昆
- **标签**:数据结构、第二版、C++
- **部分章节内容**:第一章 绪论
#### 二、关键知识点解析
##### 1.1 数据与信息的关系
- **信息**:广义上讲,信息是指自然界和社会的各种现象和事物通过不同的载体向人们传达的消息。它是宇宙的三大基本要素之一(物质、能量、信息)。信息具有多种特征,如可识别性、可存储性、可变换性、可处理性、可传递性、可再生性、可压缩性、可利用性和共享性。
- **数据**:数据是信息的具体表现形式,用于描述客观事物的符号记录。它可以是数字字符或其他能在计算机中被处理的符号集合。数据作为信息载体,在计算机中需要转换为具体的数据格式才能进行存储和操作。
##### 1.2 数据结构的概念及分类
- **定义**:数据结构是对数据以及其相互关系的一种抽象描述,通常表示为`{D, R}`,其中`D`是数据对象,而`R`代表该对象中所有成员间的关联集合。
- **讨论方面**:
- **逻辑结构**:关注的是数据元素之间的逻辑关系,与存储方式无关。
- **存储结构**:指在计算机内存中的具体实现形式。
- **操作定义**:包括查找、插入和删除等。
##### 1.3 数据的逻辑结构分类
- **线性结构**:成员之间具有一对一的关系。每个元素至多有一个直接前驱和一个直接后继,常见的有数组、链表、栈以及队列。
- **非线性结构**:数据成员间存在一对多或多对一的关系,即一个节点可能没有或拥有多个直接的前后关系。典型的例子包括树形结构与图。
##### 1.4 抽象数据类型的定义及实例——复数
- **抽象数据类型(ADT)**:用户自定义的数据类型,不仅包含数据本身,还包括作用于这些数据的操作集合。它提供了封装和隐藏内部细节的能力。
- **复数类实现**:
- **成员变量**:`Re`(实部) 和 `Im`(虚部),均为`double` 类型。
- **构造函数**:
- 不带参数的构造函数,将实部和虚部分别初始化为0。
- 只设置实部的构造函数:接收一个`double` 参数作为实部,虚部默认为0。
- 设置实部与虚部两个值的构造函数:分别接受两个`double` 类型参数。
```cpp
#ifndef COMPLEX_H_
#define COMPLEX_H_
#include
class Complex {
public:
double Re; // 实部
double Im; // 虚部
Complex() : Re(0), Im(0) {} // 不带参数的构造函数
Complex(double r) : Re(r), Im(0) {} // 只置实部的构造函数
Complex(double r, double i) : Re(r), Im(i) {} // 设置实部和虚部的构造函数
double getRe() const { return Re; } // 获取实部
void setRe(double r) { Re = r; } // 修改实部
double getIm() const { return Im; } // 获取虚部
void setIm(double i) { Im = i; } // 修改虚部
Complex operator+(const Complex& c) const {
return Complex(Re + c.Re, Im + c.Im);
}
Complex operator-(const Complex& c) const {
return Complex(Re - c.Re, Im - c.Im);
}
Complex operator*(const Complex& c) const {
return Complex(Re * c.Re - Im * c.Im, Re * c.Im + Im * c.Re);
}
// 复数除法
Complex operator/(const Complex& c) const {
double denominator = c.Re * c.Re + c.Im * c.Im;
return Complex((Re * c.Re + Im * c.Im)/denominator, (Im * c.Re - Re * c.Im)/denominator);
}
// 重载流输出运算符
friend std::ostream& operator<<(std::ostream& os, const Complex& c);
};
// 流输出运算符的实现
std::ostream& operator<<(std::ostream& os, const Complex& c) {
os << c.Re << + ( << c.Im << )i;
return os;
}
#endif