数据结构概述
概念:
数据结构:计算机存储和组织数据的方式.
分为三层:
抽象层(逻辑结构):数据之间(与计算机无关)的逻辑结构.
分为: 线性结构/非线性结构
其中,非线性结构分为:集合结构/树状结构/网状结构.
A.线性结构(有序性/一对一的前后关系)
结构中必须存在唯一的首元素
结构中必须存在唯一的尾元素
除首元素外,结构中每一个元素有且只有一个前驱元素
除尾元素外,结构中每一个元素有且只有一个后继元素
B.集合结构(无序性/松散的)
确定性:要么属于集合要么不属于集合,不存在可能属于或者可能不属于的情况.
无序性:无前后顺序关系.
唯一性:各元素互不相同.
C.树状结构(一对多的父子关系)
结构中必须存在唯一的根节点
除根元素外,结构中每一元素有且只有一个前驱元素
除叶元素外,结构中每一元素可拥有一个或多个后继元素
D.网状结构(多对多的映射关系)
结构中每一元素都可拥有任意数量的前驱元素和后继元素
结构中任意两个元素之间均可建立关联
逻辑层(物理结构):数据具体在计算机内存中存储方式.
1.顺序存储结构:把逻辑上相邻的元素存储在相邻的物理内存位置中.
优缺点:节省内存空间/方便随机访问/增加或删除元素复杂/降低存储空间的利用率
2.链式存储结构:把逻辑上相邻的元素存储放在不连续的物理内存位置中,通过存放下一数据的链接域连接起来.
优缺点:浪费内存空间/随机访问不方便/增加或删除元素简单/提高存储空间的利用率
实现层(运算结构):数据结构的基本操作.
1.创建/删除结构
2.插入/删除/获取/修改元素
3.排序/查找
对于逻辑结构和物理结构的关系:
每一种逻辑结构具体采用哪种物理结构来实现没有规定.
线性结构的基本实现模型
顺序表:基于顺序存储结构的线性(表)结构
链表:基于链式存储结构的线性(表)结构
分为单向链表和双向链表.
其中单向链表的特征:
每个节点包含存放的数据元素-data
每个节点还需要保存指向下一个节点的链接域
链表尾节点的下一个链接域为空
其中双向链表的特征:
每个节点包含存放的数据元素-data
每个节点还需要保存指向下一个节点的链接域
每个节点还需要保存指向上一个节点的链接域
链表尾节点的下一个链接域为空
链表首节点的上一个链接域为空
线性结构的容器
栈:
几个基本概念:
栈顶和栈底:允许数据元素插入和删除的一端称为栈顶,另一端称为栈底
压入:栈的插入数据操作,也称为入栈/压栈/进栈,常用push
弹出:栈的删除数据操作,也称为出栈/弹栈,常用pop
基本特征:
栈限制只能在栈顶进行数据插入和删除操作
栈中数据元素遵循'后进先出'的原则,也称为FILO结构(First In Last Out)
向满栈中压入数据和从空栈中弹出数据,均视为错误
队列:
几个概念:
后端:插入数据元素的端点
前端:删除数据元素的端点
队首和队尾:最先和最后插入的数据元素在被弹出前作为队首和队尾被外界访问
压入:队列的插入操作,也称为入队列
弹出:队列的删除操作,也称为出队列
基本特征:
队列可以做两端增删数据元素
队列中的数据元素遵循'先进先出'的原则,也称为FIFO结构(First In First Out)
从空队列中弹出数据和向满队列中压入数据,均视为错误
二叉树结构
二叉树是最简单的一种树状结构.
基本特征:
树中每个节点最多关联两个后继节点,也就说,一个节点可能关联的节点数为:0/1/2.
每个节点的后继节点明确分为左右,称为左子节点/右子节点.
想要看更多的课程请微信关注SkrEric的编程课堂