数据结构-学习笔记

这篇具有很好参考价值的文章主要介绍了数据结构-学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


 注意:该文章摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除!


什么是数据结构?

数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 结构包括逻辑结构和物理结构。

数据的逻辑结构包括4种 

(1)集合:数据元素之间除了有相同的数据类型再没有其他的关系

(2)线性结构:数据元素之间是一对一的关系 —— 线性表、栈、队列

(3)树形结构:数据元素之间是一对多的关系

(4)图状结构:数据元素之间是多对多的关系。 物理结构包括顺序存储结构和链式存储结构。

 解释一下顺序存储与链式存储

顺序存储结构是用一段连续的存储空间来存储数据元素,可以进行随机访问,访问效率较高。 链式存储结构是用任意的存储空间来存储数据元素,不可以进行随机访问,访问效率较低。

 头指针和头结点的区别?

头指针:是指向第一个节点存储位置的指针,具有标识作用,头指针是链表的必要元素,无论链表是否为空,头指针都存在。 头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除的操作, 头结点不是链表的必须元素,可有可无,头结点的数据域也可以不存储任何信息。

 线性结构的特点

(1)集合中必存在唯一的一个"第一个元素"; (2)集合中必存在唯一的一个"最后的元素"; (3)除最后元素之外,其它数据元素均有唯一的"后继"; (4)除第一元素之外,其它数据元素均有唯一的"前驱"。

数组和链表的区别? 

从逻辑结构来看:数组的存储长度是固定的,它不能适应数据动态增减的情况。 链表能够动态分配存储空间以适应数据动态增减的情况,并且易于进行插入和删除操作。 从访问方式来看:数组在内存中是一片连续的存储空间,可以通过数组下标对数组进行随机访问,访问效率较高。 链表是链式存储结构,存储空间不是必须连续的,可以是任意的,访问必须从前往后依次进行,访问效率较数组来说比较低。 如果从第i个位置插入多个元素,对于数组来说每一次插入都需要往后移动元素,每一次的时间复杂度都是O(n), 而单链表来说只需要在第一次寻找i的位置时时间复杂度为O(n),其余的插入和删除操作时间复杂度均为O(1),提高了插入和删除的效率。

 单链表结构和顺序存储结构的区别?

当进行插入和删除操作时,顺序存储结构每次都需要移动元素,总的时间复杂度为O(n), 而链式存储结构确定i位置的指针后,其时间复杂度仅为O(1)。 由于顺序存储结构需要进行预分配存储空间,所以容易造成空间浪费或者溢出。 链式存储结构不需要预分配存储空间,元素个数不受限制。

 栈和队列的区别

队列是允许在一段进行插入另一端进行删除的线性表,对于进入队列的元素按“先进先出”的规则处理,在表头进行删除在表尾进行插入。 栈是只能在表尾进行插入和删除操作的线性表。 对于插入到栈的元素按“后进先出”的规则处理,插入和删除操作都在栈顶进行。 由于进栈和出栈都是在栈顶进行,所以要有一个size变量来记录当前栈的大小, 当进栈时size不能超过数组长度,size+1,出栈时栈不为空,size-1。

 介绍一下深度优先搜索和广度优先搜索是如何实现的?

深度优先搜索: (1)访问起始点v0 (2)若v0的第一个邻接点没有被访问过,则深度遍历该邻接点; (3)若v0的第一个邻接点已经被访问,则访问其第二个邻接点,进行深度遍历;重复以上步骤直到所有节点都被访问过为止

广度优先搜索: (1)访问起始点v0 (2)依次遍历v0的所有未访问过得邻接点 (3)再依次访问下一层中未被访问过得邻接点;重复以上步骤,直到所有的顶点都被访问过为止 

 各种排序算法(各方法如何实现要会用语言描述)

内部排序包括:插入排序、选择排序、交换排序、归并排序、基数排序。

其中插入排序包括:直接插入排序、折半插入排序、希尔排序;

选择排序包括:简单选择排序,堆排序;

交换排序包括:冒泡排序、快速排序。

(1)直接插入排序(稳定):基本思想为:将序列分为有序部分和无序部分,从无序部分依次选择元素与有序部分比较找到合适的位置,将原来的元素往后移,将元素插入到相应位置上。时间复杂度为:O(n^2),空间复杂度为O(1)

(2)折半插入排序(稳定):基本思想为:设置三个变量low high mid,令mid=(low+high)/2,若a[mid]>key,则令high=mid-1, 否则令low=mid+1,直到low>high时停止循环,对序列中的每个元素做以上处理,找到合适位置将其他元素后移进行插入。 比较次数为O(nlog2n),但是因为要后移,因此时间复杂度为O(n^2),空间复杂度为O(1)。 优点是:比较次数大大减少。

(3)希尔排序(不稳定):基本思想为:先将序列分为若干个子序列,对各子序列进行直接插入排序, 等到序列基本有序时再对整个序列进行一次直接插入排序。 优点是:让关键字值小的元素能够很快移动到前面,且序列基本有序时进行直接插入排序时间效率会提升很多,空间复杂度为O(1)。

(4)简单选择排序(不稳定):基本思想为:将序列分为2部分, 每经过一趟就在无序部分找到一个最小值然后与无序部分的第一个元素交换位置。 优点是:实现简单,缺点是:每一趟只能确定一个元素的位置,时间效率低。时间复杂度为O(n^2),空间复杂度为O(1)。

(5)堆排序(不稳定):设有一个任意序列,k1,k2,…,kn,当满足下面特点时称之为堆:让此序列排列成完全二叉树, 该树具有以下特点,该树中任意节点均大于或小于其左右孩子,此树的根节点为最大值或者最小值。 优点是:对大文件效率明显提高,但对小文件效率不明显。时间复杂度为O(nlog2n),空间复杂度为O(1)。

(6)冒泡排序(稳定):基本思路为:每一趟都将元素进行两两比较,并且按照“前小后大”的规则进行交换。 优点是:每一趟不仅能找到一个最大的元素放到序列后面,而且还把其他元素理顺,如果下一趟排序没有发生交换则可以提前结束排序。

(7)快速排序(不稳定):基本思路为:在序列中任意选择一个元素作为中心,比它大的元素一律向后移动,比它小的元素一律向前移动, 形成左右两个子序列,再把子序列按上述操作进行调整,直到所有的子序列中都只有一个元素时序列即为有序。 优点是:每一趟不仅能确定一个元素,时间效率较高。时间复杂度为O(nlog2n),空间复杂度为O(log2n).

(8)归并排序(稳定):基本思想为:把两个或者两个以上的有序表合并成一个新的有序表。 时间复杂度为O(nlogn),空间复杂度和待排序的元素个数相同。文章来源地址https://www.toymoban.com/news/detail-818184.html

到了这里,关于数据结构-学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【雨学习】数据结构入门---线性结构的笔记及代码实现

    数组元素类型相同,大小相等 定义:         n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,且只有一个后续节点         首节点前没有前驱节点,尾节点没有后续节点 专业术语:         首节点:第一个有效节点         尾节点:最后

    2024年01月23日
    浏览(55)
  • 数据结构学习笔记——二叉排序树

    查找算法中,基于树这种数据结构进行查找即为树形查找,可将其分为 二叉排序树 、 平衡二叉树 和 B树 三种树形查找方法: 二叉排序树也称为二叉查找树或二叉搜索树(注意:与二分查找的判定树不同),其中各结点值的大小关系是: 左子树根结点右子树 ,且左、右子树

    2024年02月09日
    浏览(56)
  • 区块链学习笔记(2)BTC数据结构

    1.哈希指针(hash pointers):一般的指针存储的是某个结构体在内存中的地址,哈希指针除了要保存结构体的地址外,还要保存这个结构体的哈希值。 通过哈希指针,我们不但可以找到结构体在内存中的位置,同时还可以检测出结构体的内容是否遭到了篡改。 因为我们记录了

    2023年04月16日
    浏览(56)
  • 【学习笔记】数据结构算法文档(类C语言)

    1.1.1 线性表的顺序存储表示 1.1.2 顺序表中基本操作的实现 1.1.2.1 初始化 1.1.2.2 取值 1.1.2.3 查找 1.1.2.4 插入 1.1.2.5 删除 1.1.2.6 计数 1.2.1 单链表的定义和表示 ★ 关于结点 1.2.2 单链表基本操作的实现 1.2.2.1 初始化 1.2.2.2 取值 1.2.2.3 查找 1.2.2.4 插入 1.2.2.5 删除 1.2.2.6 前插法创建单

    2024年02月07日
    浏览(44)
  • Python学习笔记(三) 数据结构与常用方法

    数据结构是计算机内部对数据按一定的结构进行排列组织的存放,以达到快速查找,提取但目的 常见的数据结构有:列表、字典、元组、集合、双端队列、区间 通过键值对key=value的形式保存元素的一种数据结构 一种不可变的数据结构,一旦创建不能添加、删除与修改 出于数

    2024年02月04日
    浏览(51)
  • Halcon学习笔记(二)数据结构、通道+XLD

    图像(Image):图像是Halco中最基本的数据结构,用于表示二维图像。它包含了图像的像素值、尺寸、颜色模式等信息。图像可以是灰度图像(单通道图像)或彩色图像(多通道图像),颜色通道可以是RGB、HSV等。图像可以通过读取文件、采集设备或者算法生成。 区域(Regi

    2024年02月22日
    浏览(35)
  • C#学习笔记--复杂数据类型、函数和结构体

    特点:多个数据变量地一个集合体,可以自己命名 种类:枚举、数组和结构体 枚举:整型常量的集合 数组:任意变量类型的顺序存储的数据集合 结构体:任意变量类型的数据组合成的数据块 枚举 : 枚举可以方便表示对象的各种状态,本质还是一种变量。 例如我们可以用

    2024年02月08日
    浏览(44)
  • 区块链技术与应用 - 学习笔记3【比特币数据结构】

    大家好,我是比特桃。 本系列笔记只专注于探讨研究区块链技术原理,不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划,在“加快数字发展 建设数字中国”篇章中,区块链被列为“十四五”七大数字经济重点产业之一,迎来创新发展新机遇。 经科技部批

    2024年02月09日
    浏览(46)
  • 【软考程序员学习笔记】——数据结构与算法基础

    目录  🍊一、数据结构概念和分类 🍊二、数组特点存储方式 🍊三、矩阵 特殊矩阵 非特殊矩阵 🍊四、栈和队列 🍊 五、二叉树的性质 🍊六、二叉树的遍历 (1)前序遍历(先根遍历,先序遍历) (2)中遍历(中根遍历) (3)后序遍历(后根遍历,后序遍历) 🍊七、二叉排序树 🍊八、

    2024年02月12日
    浏览(62)
  • C#学习笔记--数据结构、泛型、委托事件等进阶知识点

    ArrayList 元素类型以Object类型存储,支持增删查改的数组容器。 因而存在装箱拆箱操作,谨慎使用。 ArrayList和数组区别? ArrayList使用不用说明固定长度,数组则需要 数组存储的是指定类型的,ArrayList是Object ArrayList存在装箱拆箱,数组不存在 ArrayList数组长度用Count获取 而数组

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包