所用教材为:数据结构教程第4版 李春葆 主编
数据结构相关概念
数据元素
定义:数据的基本单位(例如,200902班中的每个学生记录都是一个记录元素)
有些情况下,数据元素也称为元素、节点、顶点、记录等
数据项
定义:数据项是具有独立含义的最小数据单位,也称为字段或域
一个数据元素可以由若干个数据项组成,200902班中每个数据元素即学生记录是由学号、姓名、性别和班号等数据项组成。
数据对象
定义:数据对象是性质相同的数据元素的集合,它是数据的子集。
数据结构
定义:所有数据元素以及数据元素之间的关系,可以看作是相互之间存在着某种特定关系的数据元素的集合,即可把数据结构看成是带结构的数据元素的集合。
实例:
存放学生表的结构体数组定义:
struct
{
int no;
char name[8];
char sex[2];
char class[4];
}Stud[7] = {{1,"张斌","男","9901"},...{5,"王萍","女","9901"}};
存放学生表的链表的节点类型StudType定义为:
typedef struct studnode
{ int no;
char name[8];
char sex[2];
char class[4];
struct studnode * next; //存储指向下一个学生的指针
}StudType;
逻辑结构
集合
数据元素之间同属于一个集合的关系外,没有其他关系
线性结构
结构的节点存在一对一的关系
树形结构
结构中的节点存在一对多的关系
图形结构
结构中的节点存在多对多的关系
存储结构类型
(1)顺序存储结构
优点: 分配给数据的存储单元全用于存放节点的数据,节点之间的逻辑关系没有占用额外的存储空间,因此 节省存储空间
可实现对节点的随机存取(每个节点对应一个序号,可由序号直接计算出节点的存储地址)
缺点: 不便于修改,对节点的插入、删除运算时,可能要移动一系列的节点。
(2)链式存储结构
优点:便于修改,在进行插入、删除运算时,仅需要修改相应节点的指针域,不必移动节点。
缺点:分配给数据的存储空间有一部分用来存储节点之间的逻辑关系,存储空间的利用率较低。
由于逻辑上相邻的节点在存储空间中不一定相邻,所以不能对节点进行随机存取。
(3)索引存储结构
在存储节点信息的同时,还建立附加的索引表。表中的每一项称为索引项
索引项的一般形式是:(关键字,地址) 关键字唯一标识一个节点,地址是指向节点的指针。
优点:可以大大提高数据查找的速度。
缺点:增加了索引表,降低了存储空间的利用率。
(4)散列(或哈希)存储结构
基本思想是 根据节点的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该节点的存储地址。
与前3中不同的数,哈希存储方法值存储节点的数据,不存储节点之间的逻辑关系。
优点:查找速度快,只要给出待查节点的关键字,就可计算出该节点的存储地址
缺点:一般只适合要求对数据进行快速查找和插入的场合。
数据类型和数据结构
数据类型
定义
数据类型是一组性质相同的值的集合和定义在此集合上的一组操作的总称。
数据结构是指计算机处理的数据元素的组织形式和相互关系,而数据类型是某种程序设计语言中已实现的数据结构。在程序设计语言提供的数据类型支持下,就可以根据从问题中抽象出来的各种数据模型,逐步构造出描述这些数据模型的新的数据结构。
C/C++中常用的数据类型
(1)基本数据类型:int、char、bool、double、float
(2 )指针类型: 允许直接对存放变量的地址进行操作。
如果定义了 int i,则 &i 表示变量i 的地址,也称作指向变量i的指针。存放地址的变量称作指针变量。
有关指针的两个操作:
1.定义int i, 则 &i操作时取变量i的地址
2.定义int * p(这里的p是指向一个整数的指针),则*p 操作是取p指针所指的值,即取p所指地址的内容。
(3)数组类型
(4)结构体类型
(5)共用体类型
(6)自定义类型
C/C++允许使用typedef关键字来指定一个新的数据类型名。如:typedef char ElemType;
(7)引用运算符