1.2 数据结构的种类
从逻辑上看:
不论是时间关系还是空间关系,数据之间的关系并不只有一种。数据项之间形成的关系几乎是无限的,为了便于研究这些关系,常常将无限多的关系种类里的非关键属性去除,只取其中的共性来设计数据结构,这便是抽象。
按照不同的标准划分将得到不同的结论:
1、从数据结构存放的介质来看:外存数据结构和内存数据结构。
2、从数据结构的维持来看:被动数据结构和主动数据结构。
3、从数据结构存储的时间来看:持久数据结构和即时数据结构。
4、从数据结构整体与部分来看:递归数据结构和非递归数据结构。
5、从数据结构与历史的关系来看:历史独立数据结构和历史痕迹数据结构。
1.3 数据结构与抽象数据类型(ADT)
数据结构与抽象数据类型的概念比较相近。
·抽象数据类型是一组数据值或对象的集合及可以对这些数据值或对象进行的操作
·数据结构则是数据之间的逻辑表述及其可以进行的操作
下面用一幅图说明他们的区别:
1.4 数据结构的特性
· 精确:值是否属于该数据结构很明确
· 独立:它独立与任何具体的实现,我们关心的是逻辑上的数据之间的关系
· 封装:实现细节完全被封装
1.5 基本概念和术语
·数据(data):是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
·数据元素(data element):是数据的基本单位。一个数据元素可以有若干个数据项(Data item),数据项是数据不可分割的最小单位;
·数据对对象(data object):是性质箱相同的数据元素的集合,是数据的一个子集。
·数据结构(data structure):是相互之间存在一种或多种特定关系的数据元素的集合。
·抽象数据类型(abstract data type, ADT):一个数学模型以及定义在改模型上的一组操作。
它的定义取决于它的一组逻辑特性,与其在计算机内部如何表示无关。通常可用一个三元组表示
(D,S,P)
D:数据对象 S:表示D上的关系集 P: 表示对D的基本操作
1.6 数据结构的表现方式
对计算机来说,数据结构的表现方式只有两种:连续和链接
连续:
链接:
下面就用一个简单的例子说明一个简单的链接结构是怎样编程实现的:
比如我们要实现下面的这个结构:
实现代码:
#include <iostream>
using namespace std;
typedef char nodeEntry;
//定义节点通常用struct
struct Node {
//数据成员
nodeEntry data;
Node* next;
//构造函数
Node();
Node(nodeEntry item, Node* link = NULL);
};
//构建一个空节点
Node::Node()
{
next = NULL;
}
//构建一个记录item的节点
Node::Node(nodeEntry item, Node* link)
{
data = item;
next = link;
}
int main()
{
Node first_node('a');//创建一个节点
Node * p0 = &first_node;//p0指向第一个节点
Node * p1 = new Node('b');//创建节点1
p0->next = p1;//节点1挂在节点0后面
Node *p2 = new Node('c', p0);//创建节点2并把它指向节点0
p1->next = p2;//节点2挂在节点1后面形成一个循环链表
//打印元素
cout << "里面的元素为:\n";
while(p0 != NULL){
cout << p0->data << ", ";
p0 = p0->next;
}
return 0;
}
打印的结果是:
a, b, c, a, b, c, a, b, c, a, b, c, a, b, c, a, b, c, a, b, c....
《数据结构:炫动的0、1之弦》读书笔记