数据结构的基础知识点

本文介绍了数据结构中的关键概念,包括数组、链表(单向、双向和循环)、栈、队列以及它们的区别,还涵盖了二叉树的定义、特点和常见分类。重点强调了数组和链表的存储方式、栈和队列的操作特点以及二叉树的遍历方法。
摘要由CSDN通过智能技术生成

作为新手学习数据结构的学习笔记,仅为自用,欢迎交流,不喜勿喷哦



前言

本文主要是针对数据结构知识点的总结,方便后续的回顾。


1.数组

数组是一种常见的数据结构,用于存储相同类型的数据项。

  1. 数组是由相同类型的元素组成的有序集合;
  2. 数组的每个元素都有一个唯一的索引(通常从0开始),用于标识该元素在数组中的位置;
  3. 数组的大小在创建时就确定,并且通常是固定的,尽管某些编程语言允许动态调整数组大小。

2.链表

链表是一种基本的线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。

  1. 链表是由节点组成的数据结构,每个节点包含数据以及指向下一个节点的引用(指针或链接);
  2. 链表中的节点在内存中不一定是连续存储的,相邻节点通过指针连接;
  3. 链表通常由头节点(指向链表的第一个节点)和尾节点(指向链表的最后一个节点)来定义。

链表的分类

  1. 单向链表:每个节点只有一个指针,指向下一个节点;
  2. 双向链表:每个节点有两个指针,分别指向前一个节点和后一个节点,这样可以双向遍历链表;
  3. 循环链表:链表的尾节点指向头节点,形成一个闭环。循环链表可以是单向的或双向的。

3.数组和链表的区别

  1. 存储方式:

数组:数组在内存中是连续存储的,所有元素的地址在内存中是紧邻着的。
链表:链表中的节点在内存中不一定是连续存储的,每个节点都有指向下一个节点的指针,因此节点可以分散在内存中的任何位置。

  1. 大小调整:

数组:数组的大小通常是固定的,一旦分配了内存空间,其大小就无法动态调整。
链表:链表的大小可以动态增长或缩小,可以根据需要动态地分配或释放内存空间。

  1. 插入和删除操作:

数组:在数组中插入或删除元素通常需要移动其他元素,特别是在中间或开头位置,这可能导致较高的时间复杂度,最坏情况下为O(n)。
链表:在链表中插入或删除元素通常只需要调整节点的指针,不需要移动其他节点,因此这些操作的时间复杂度是常数时间,即O(1)。

4.栈

  1. 定义:

栈是一种线性数据结构,它是一系列元素的集合,具有后进先出的特点。这意味着最后入栈的元素最先出栈,而最先入栈的元素最后出栈。

  1. 结构特点:

栈通常由数组或链表实现。
栈具有一个指向栈顶的指针,指示当前栈顶元素的位置。
栈的操作主要包括入栈(push)和出栈(pop)两种基本操作。

  1. 基本操作:

入栈(push):将元素压入栈顶,栈的大小加一。
出栈(pop):将栈顶元素移出栈,并返回该元素,同时栈的大小减一。

5.队列

  1. 定义:

队列是一种线性数据结构,类似于现实生活中排队的概念。它是一个元素的集合,具有先进先出的特点,即最先进队列的元素最先出队列。

  1. 结构特点:

队列通常由数组或链表实现。
队列有两个指针,一个指向队头,用于出队列操作,另一个指向队尾,用于入队列操作。
入队列操作(enqueue)是在队尾添加元素,出队列操作(dequeue)是从队头移除元素。

  1. 基本操作:

入队列(enqueue):将元素添加到队列的末尾。
出队列(dequeue):从队列的头部移除并返回元素。
查看队头元素(peek):查看队列头部的元素,但不移除它。

6.栈和队列的区别

  1. 元素进出顺序:

栈:采用后进先出的方式,最后入栈的元素最先出栈,类似于一摞盘子,取盘子时总是取最上面的。
队列:采用先进先出的方式,最先入队列的元素最先出队列,类似于排队等候服务的顾客,先来的先被服务。

  1. 基本操作:

栈:主要操作包括入栈(push)和出栈(pop)。
队列:主要操作包括入队列(enqueue)和出队列(dequeue)。

  1. 实现方式:

栈可以用数组或链表实现,常见的实现方式有数组模拟栈和链式栈。
队列也可以用数组或链表实现,常见的实现方式有数组模拟队列和链式队列。

7.二叉树

  1. 定义:

二叉树是一种树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树的子节点的顺序是有意义的,通常称为左子树和右子树。

  1. 特点:

每个节点最多有两个子节点,分别称为左子节点和右子节点。
左子树和右子树也是二叉树,可以为空(即节点没有子节点)。
二叉树的节点可以包含额外的信息,如值、指针等。
二叉树的节点具有递归结构,即每个节点都可以看作是根节点,其左右子节点也分别是左右子树的根节点。

  1. 分类:

满二叉树:除了叶子节点外,每个节点都有两个子节点的二叉树。
完全二叉树:除了最后一层外,每一层都被完全填满,且最后一层从左到右填入,缺失的位置都集中在树的右侧。
平衡二叉树:每个节点的左子树和右子树的高度差不超过1。
二叉搜索树:一种有序的二叉树,对于每个节点,其左子树的所有节点值都小于该节点的值,而右子树的所有节点值都大于该节点的值。
线索二叉树:对普通二叉树的叶子节点进行特殊的处理,使得每个节点都含有一个额外的指针,指向该节点在某种遍历顺序下的前驱或后继节点。
哈夫曼树:一种特殊的二叉树,用于数据压缩,树中的叶子节点对应着待压缩的字符,而非叶子节点对应着字符的编码。
二叉堆:一种特殊的完全二叉树,满足堆的性质,常用于实现优先队列等数据结构。

  1. 存储方式:

链式存储:存储依靠指针将各个节点串联起来,不需要连续的存储空间。
顺序存储:利用数组进行存储,数组中的每一个位置仅存储节点的 data,不存储左右子节点的指针,子节点的索引通过数组下标完成。

  1. 遍历方式:

前序遍历:首先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。
中序遍历:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。
后序遍历:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。


总结

以上是今天要讲的内容。本文仅仅简要介绍了数据结构的一些基础知识点,详细的内容需要在后续深入学习和探索。

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值