计算机基础——数据结构篇概览

本文介绍了数据结构的基础知识,包括线性结构如数组、链表、栈和队列的特点及应用。数组支持随机访问但插入删除效率低,链表反之。栈遵循先进后出原则,常用于括号匹配和浏览器历史操作;队列则是先进先出,常见于任务调度。非线性结构中,树和图的特点和存储方式被提及,堆作为特殊的树形结构,用于优先级队列和排序。堆操作包括插入和删除,堆排序通过建立堆并不断调整实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构:

1. 线性结构:数组、链表、栈、队列

(特点原理等了解清楚)

  1. 数组(基本数据结构)

    特点:支持随机访问,访问速度快,连续存储对CPU缓存机制友好,插入删除速度慢,不支持扩展

  2. 链表(基本数据结构)

    特点:不支持随机访问,访问速度慢,插入删除较快,支持长度扩展

    分类:单链表,循环链表,双向链表,双向循环链表。

  3. 特点:先进后出,只能在栈顶删除和插入元素

    分类:顺序栈(数组实现),链式栈(链表)

    应用:括号匹配、浏览器回退前进(两个栈实现)、反转字符串、维护函数调用(最后调用的先执行完)

  4. 队列

    特点:先进先出,在队尾(rear)入队,在队头(front)出队,维护两个指针

    分类【顺序队列(数组)、链式队列(链表)】:单队列,循环队列(解决假溢出问题)

2. 非线性结构:树、图、堆
    • 特点:树形结构的元素之间有着明显的层次关系
    • 扩展结构:二叉树、B树、B+树、红黑树
    • 存储:使用数组或链表
    • 树形结构应用较多,且每一种都有点复杂,后面单独补充这部分内容
    • 特点:关系复杂,无序

    • 分类:无向图和有向图、无权图和带权图

    • 存储方式:

      邻接矩阵:底层是一个二维数组,访问高效速度快,但浪费空间

      邻接表:底层是数组+链表,节省空间

    • 搜索方式:

      • 广度优先搜索:访问的顶点放入队列,先访问到的先出队。每次访问时取出队首结点,再访问该结点的所有后继结点,将未访问过的结点入队,继续访问下一个队首结点,重复上述过程,直到队列为空且没有需要入队的结点。

      • 深度优先搜索:访问的顶点放入栈中,先访问到的后出栈。每次访问时取出栈顶结点,再访问该节点所有后继结点,将未访问过的结点入栈,继续访问下一个栈顶结点,重复上述过程,直到栈为空且没有需要入栈的结点。

  1. 堆(一般用数组实现)

    • 特点:任意一个节点的值都大于等于或小于等于它所有子节点的值;堆是一棵完全二叉树
    • 分类:大顶堆、小顶堆
    • 堆操作:
      • 堆化:为了保持堆的性质,对结构进行调整。分为自底向上,和自顶向下。
      • 插入元素:将插入元素放到数组末尾,再自底向上堆化,将该元素放在该放的位置上
      • 删除堆顶元素:
        • ①使用自顶向下(也叫石沉大海):将末尾元素填充到堆顶的位置,不停和左右子节点比较,与较大的结点交换位置,重复此操作,直到无法交换位置。不会产生”气泡“。
        • ②使用自底向上:将堆顶元素的左右子节点进行比较,较大者元素填充到堆顶位置,重复此操作,直到移不了位置(堆底部)。此方法可能会产生”气泡“。
    • 堆排序:
      1. 建堆(数组时无序的,要堆化成小顶堆或大顶堆的性质)
      2. 排序
        1. 先取出堆顶元素;
        2. 将末尾元素放在堆顶,将取出的堆顶元素放在数组末尾;
        3. 采用自顶向下的堆化,继续取出堆顶元素放在末尾,直到所有非叶节点都堆化完成(所有非叶节点的索引是1~n/2)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值