# 一,数据结构概述
## 1.1什么是数据结构?
**官方解释:**
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科
**大白话:**
数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据
## 1.2数据结构分类
传统上,我们可以把数据结构分为逻辑结构和物理结构两大类。
**逻辑结构分类:**
逻辑结构是从具体问题中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系分类,也是我们后面课题中需要关注和讨论的问题。
a,集合结构:结合结构中数据元素出了属于同一集合外,他们之间没有任何其他关系
b,线性结构:线性结构中的数据元素之间存在一对一的关系
c,树形结构:树形结构中的数据元素之间存在多对一的层次关系
d,图形结构:图形结构的数据元素是多对多的关系
**物理结构分类:**
逻辑结构在计算机中真正的表示方式(又称映像)称为物理结构,也可以叫做存储结构,常见的物理结构有顺序存储结构、链式存储结构。
``顺序存储结构``
把数据元素放到地址连续的内存单元里面,其数据间的逻辑关系和物理关系是一致的,比如我们常用的数组就是顺序存储结构。
顺序存储结构存在一定的弊端,就想生活中排队时,会有人插队也有可能有人突然离开,这时候整个结构都处于变化之中,此时就需要链式存储结构。
``链式存储结构``
是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的,也可以是不连续的。此时,数据元素之间的关系,并不能反映元素间的逻辑关系,因此链式存储中引进了一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。
## 1.3数据结构术语
**抽象数据类型:**(Abstract Data Type,简称ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。
抽象数据类型和数据类型实质上是一个概念。例如,各个计算机都拥有的“整数”类型是一个抽象数据类型,尽管它们在不同处理器上实现的方法可以不同,但由于其定义的数学特性相同,在用户看来都是相同的。因此,“抽象”的意义在于数据类型的数学抽象特性。
数据结构的表示(存储结构)用类型定义( typedef)描述。数据元素类型约定为Data。
# 二,线性表
**线性结构的特点是:**在数据元素的非空有限集合中
+ 存在唯一的一个被称为"第一个"的数据元素
+ 存在唯一的一个被称为“最后一个”的数据元素
+ 除了第一个之外,结合中的每个数据元素均只有一个前驱
+ 除了最后一个之外,集合中每个数据元素均只有一个后继
线性表示一个相当灵活的数据结构,它的长度可以根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可以进行插入和删除等。
## 1.1顺序表
顺序表是指用一组地址连续的内存单元依次存储线性表的数据元素
通常都用数组来描述数据结构中的顺序存储结构。由于线性表的长度可变,且所需最大存储空间随问题不同而不同,则在C语言中可用动态内存分配一维数组,如下描述: