数据结构基本概念

本文介绍了数据结构的基础知识,包括线性表(顺序表、链表、栈、队列、串和数组)、非线性表(树、二叉树和图),以及相关的存储结构和操作。栈遵循后进先出原则,队列则是先进先出。文章强调了数据结构的选择取决于具体操作需求,如频繁插入删除适合链表,固定大小适合顺序表。此外,提到了二叉树的遍历和图的搜索方法。
摘要由CSDN通过智能技术生成

学习数据结构实例教程书籍,主要是了解数据结构中的一些基本概念,为学习数据结构和算法课程做准备

学习内容

线性表

  1. 顺序表和链表(链表包含了单链表、双向链表、循环链表和静态链表)
  2. 栈和队列
  3. 串(字符串)
  4. 数组和广义表

非线性表

  1. 树和二叉树

算法

  1. 查找(待学习)
  2. 排序(待学习)

概念

数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合,包括三方面内容:数据的逻辑结构、数据的存储结构和数据的操作.

数据的逻辑结构
数据的逻辑结构是指数据元素之间存在的固有的逻辑关系,常简称为数据结构

  1. 集合
    结构中的数据元素之间除了“同属于一个集合”的关系以外,没有其他关系
  2. 线性结构
    结构中的数据元素之间存在“一对一”的关系
  3. 树形结构
    结构中的数据元素之间存在“一对多”的关系
  4. 图形结构
    结构中的数据之间存在“多对多”的关系
    数据的存储结构
    数据元素及其关系在计算机内的表示称为数据的存储结构
  5. 顺序存储结构
    把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系.
  6. 链式存储结构
    借助指针表达数据元素之间的逻辑关系
  7. 索引存储结构
    在存储数据元素的同时,还建立附加的索引表
  8. 散列存储结构
    根据散列函数和处理冲突的方法确定数据元素的存储位置
    数据的操作
    数据的操作是在数据的逻辑结构上定义的操作算法,如插入、删除、检索等.
一. 线性表

线性表是由n(n>=0)个具有相同性质的数据元素a1,a2,…an组成的有穷序列.线性表可以用顺序存储结构和链式存储结构来表示,分别称为顺序表和链表

1. 顺序表

用一组地址连续的存储单元依次存储线性表中的每一个数据元素,这种存储结构称为线性表的顺序存储结构,用这种结构表示的线性表称为顺序表

2. 链表

链式存储结构和顺序存储结构不同的是:它不要求逻辑上相邻的数据元素在物理位置上也相邻(用一组地址任意的存储单元依次存储线性表中的各个数据元素),它通过指针来表示数据元素之间的逻辑关系;包含数据域和指针域.

  1. 单链表
    由于链表中每一个链结点中仅包含一个指针域(指向其后继结点),所以称这样的链表为单链表
  2. 循环链表
    他的特点是链表中的最后一个结点的指针域不为空,而是指向头结点,从而是整个链表形成了一个环
  3. 双向链表
    他的特点是每个结点中既有指向后继结点的指针域,又有志向前驱结点的指针域
  4. 静态链表
    静态链表是一种比较特殊的链表,它用数组的存放线性表中的元素,但并不按数组下标依次存放,而是给每一个元素增加一个“指针域域”,用来存放下一个元素在数组中的位置(数组下标),从而构造一个用数组实现的链表,这种链表称为静态链表.
**顺序表和链表二者优缺点的比较**
顺序存储结构比较适合于长度不经常发生变化,不经常进行插入和删除操作,经常进行存取和查询操作
链式存储结构比较适合于线性表的长度不可以预知,需要频繁的进行插入和删除操作
3. 栈 Stack(后进先出LIFO)

栈是限定只能在一端进行插入和删除的线性表.允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.
根据所采用的存储结构不同,栈分为顺序栈和链栈

  1. 顺序栈
    栈的顺序存储表示称为顺序栈
  2. 链栈
    栈的链式存储表示称为链栈
4. 队列 Queue(先进先出FIFO)

队列是限定在一端进行插入,在另一端进行删除的线性表.队列中运行插入的一端称为队尾,队列中允许删除的一端称为队头.
根据队列采用的存储结构不同,队列也分为顺序队列和链式队列

  1. 顺序队列
    用顺序的存储方式实现的队列称为顺序队列
  2. 链式队列
    队列的链式表示称为链队列
栈和队列是受限制的线性表,他们与线性表的逻辑结构完全相同,所不同的是:
线性表允许在任何位置进行插入和删除操作;
而栈只允许在一端进行插入和删除操作;
队列只允许在一端进入插入操作,在另一端进行删除操作.
5. 串(字符串)

字符串是一种特殊的线性表,串是由n(n>=0)个字符组成的有限序列.

串与线性表比较:
1. 线性表的数据元素可以是任意数据类型,而串的数据元素只能是字符类型;
2. 线性表一次操作一个数据元素,而串一次操作多个数据元素
6. 数组

数组是n(n>=1)个具有相同数据类型数据元素a0,a1,···,an-1构成的有限序列,并且这些数据元素占用一片地址连续的存储单元.

7. 广义表

广义表是n(n>=0)个单个元素或子表组成的有限序列,其中子表又是一个个表.

从某种意义上说,数组和广义表是线性表的推广,即他们的数据元素构成线性表,而数据元素本身又是一个数据结构.
二. 非线性表
1. 树

树是由n(n>=0)个元素构成的有限集合
树的基本术语:

  • 结点的度:结点所拥有的子树的个数
  • 树的度:树中所有结点的度的最大值
  • 叶结点:度为0的结点
  • 分支结点:度不为0的结点称为分支结点
  • 孩子结点和双亲结点:树中一个结点的子树的根结点称为孩子结点.该结点就称为孩子结点的双亲结点
  • 兄弟结点:具有同一双亲的孩子结点互为兄弟结点
  • 结点的祖先:从根到该结点所经分支上的所有结点,称为该结点祖先
  • 结点的子孙:以某结点为根的子树中的任一结点都称为该结点的子孙
  • 结点的层次:树是一种层次结构,树中的每个结点都处于某个层次上.
  • 树的深度:树中所有结点的层次的最大值称为树的深度
  • 有序树:如果树中各结点的子树是按照从左到右有序排列的,即各子树的位置不能交换,这样的树称为有序树.
  • 无序树:如果树中的各个结点的子树排列是无序的,称为无序树
  • 森林:m(m>=0)颗互不相交的树的集合称为森林.
2. 二叉树

二叉树是一类比较特殊的树,他的操作相对简单一些,因此,许多树的问题都转换成二叉树来处理.
二叉树是n(n>=0)个结点构成的有限集合

两种特殊形态的二叉树:

  • 满二叉树
    如果二叉树的所有分支结点都有左子树和右子树,并且所有叶子结点都在二叉树的最下一层,则成这样的二叉树为满二叉树
  • 完全二叉树
    在一颗具有n个结点的二叉树中,如果他的结构与满二叉树的前n个结点的结构相同,则称这样的二叉树为完全二叉树.

二叉树的遍历(参照物是根结点)

  • 前序遍历
    访问根结点,前序遍历根结点的左子树,前序遍历根结点的右子树
  • 中序遍历
    中序遍历根结点的左子树,访问根结点,中序遍历根结点的右子树
  • 后序遍历
    后序遍历根结点左子树,后序遍历根结点右子树,访问根结点
这里的二叉树遍历很容易出错
3. 图

图中的数据元素称为顶点.在顶点集合V中,第i个顶点记作vi.
图中两个顶点vi和vj之间有关联关系,称为顶点vi和vj之间有一条边.在边集合E中,第k条边记作ek,ek=<vi,vj>
图是由顶点的非空有限集合和顶点间关系集合构成的数据结构.记作G=(V,E),其中V为顶点集合,E为顶点间关系/边的集合.

图的遍历方法主要有两种:深度优先搜索遍历(Depth-First Search,DFS)和广度优先搜索遍历(Breadth-First Search,BFS)

树的数据元素之间存在一对多的关系,而图的数据元素之间存在多对多的关系,即图中任意一个结点都有多个前驱结点和多个后继结点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值