Loading

数据结构--线性结构和矩阵广义表

数据结构

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

算法是指解题方案准确而完整的描述,是一系列解决问题的清晰指令,算法代表描述解决问题的策略机制。

线性结构

  数组是有序的元素的序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。

  

  数组的特点

    • 初始化内存分配完成,大小确定
    • 内存地址连续
    • 依靠下标寻找元素
    • 支持多维嵌套
    • 仅存储同一类型的数据

  数组的优点

    • 按照下标查找快
    • 遍历方便
    • 定义简单

  数组的缺点

    • 大小恒定,且不能过大
    • 不知索引查找慢
    • 存储类型单一

    数组为什么都从0开始编号?

    数组是一种线性表,它用一组连续的内存空间,来存储一组相同类型的数据。

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

    每个线性表的数据最多只有前后两个方向,与他对立的概念是非线性表,比如二叉树、堆、图。之所以叫非线性,是因为非线性表中,数据之间不是简单的前后关系

    数组支持随机访问,根据下标随机访问的时间复杂度是O(1)

    数组插入和删除的时间复杂度是O(n)

    容器能否替代数组

    Java ArrayList每次存储不够的时候,它将空间自动扩容为1.5倍。

    因为扩容操作涉及内存申请和数据搬移,是比较耗时的。所以,如果事先能确定需要存储的数据大小,最好在创建 ArrayList 的时候事先指定数据大小。

    使用数组优于容器的时候

    • Java ArrayList无法存储基本类型,比如int long,比如 int、long,需要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有一定的性能消耗,所以如果特别关注性能,或者希望使用基本类型,就可以选用数组。
    • 如果数据大小事先已知,并且对数据的操作非常简单,用不到 ArrayList 提供的大部分方法,也可以直接使用数组。
    • 还有看个人喜好

    链表

    链表是一种物理单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表指针次序实现的。

    链表一系列结点(链表每一个元素称为结点)组成,结点可以在运行时动态生成。

    每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

    

    链表的特点

    • 大小可变,方便增删
    • 数据域可存储多种类型变量

    

 

 

    链表的插入删除(先建链再换链)

     

 

    

 

  

   

 

  

 

  栈

  栈又名堆栈,它是一种运算受限的线性表。栈又称为后劲先出的线性表,限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对的,另一端称为栈底

  栈的基本运算

    初始化栈InitStack:创建一个空栈

  判断空isEmpty:当栈S为空时返回"真",否则返回"假"

  入栈Push:将元素x加入栈顶,并且更新栈顶指针

  出栈Pop:将栈顶元素从栈中删除,并更新栈顶指针

  

 

     进栈与出栈可以同时进行

     队列

    队列先进先出,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作

 

 

 

 

  

posted @   DoDo神  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示