数据结构-线性表(数组、队列、栈、串)(Java)

本文详细介绍了线性表的基本概念,包括数组、队列和栈的定义及其实现方式,如顺序储存结构和链式储存结构。同时,文章深入探讨了栈和队列的操作,以及数组的特殊矩阵压缩存储。此外,还讨论了串的顺序和块链存储,并介绍了暴力匹配和KMP算法的匹配原理和Java实现。
摘要由CSDN通过智能技术生成

一、定义

1.线性表定义(数组、队列、栈、串)

在这里插入图片描述

2.线性表的顺序储存结构和链式储存结构

在这里插入图片描述
顺序:数组
链式:单双链,循环单双链,静态链
顺序结构元素存储时物理单元必须连续,链式存储则不需要

注:引用传参"&"(C)
在基本操作创建、销毁、CRUD传入的参数若带有&则为引用参数
即相当于commit的作用,如:
ListInsert(L,i,e)表示执行在表L的第i个元素增加e这个操作,然后回滚。
ListInsert(&L,i,e)表示执行增加操作后然后提交。

二、栈(顺序栈、链式栈)

定义:只允许一端进行插删操作的线性表

  1. 顺序栈:数组,数组的第一个元素作为栈底
  2. 链式栈:单链表,链表的头节点作为栈顶

三、队列(顺序队列、链式队列)

定义:只允许一端(rear )进行增加,一端(front)进行减少的线性表

  • 顺序队列:数组,设数组中的第一个有效元素为头指针front,最后一个元素的位置称为尾指针rear;(若尾指针指向队尾而头指针前还有空间未利用称为假溢出)

    • 循环队列:为解决假溢出,当尾指针指向末端时可以自动使其指向下标为0的地方检测
      Insert:移动尾指针,rear=(rear+1)%size
      Delelte:移动头指针,front=(front+1)%size
      当 rear=front 时,则循环队列可能空或满(不采取任何操作)
      可执行操作预留一个位置不插入数据,这样
      队列为空时 rear = front
      队满时 front = (rear + 1)%size

四、数组(顺序)

特殊矩阵的压缩存储

  • 对称矩阵 :压缩后占用n(1+n)/2,第i行j列元素按行优先 [ i(i-1)/2 + (j-1)]*L
  • 三角矩阵 :压缩后占用n(1+n)/2 + 1,第i行j列元素按行优先 [ i(i-1)/2 + (j-1)]*L
  • 三对角矩阵 :压缩后占用3n-2,第i行j列元素按行优先 [3(i-1)-1 + (j-i+1)]*L在这里插入图片描述
  • 稀疏矩阵 :在这里插入图片描述

五、串(顺序,块链)

前缀后缀部分匹配
在这里插入图片描述

1.暴力匹配算法

i,j分别位父,子字符串的索引值

  • 每次比对失败i,j都无条件回溯,i回溯至上次比对处加1,j回溯至起点
  • 时间复杂度T(n) = O(m*n)

java实现:

while (i < father.length()&&j < son.length
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值