大话数据结构之线性表

本文围绕线性表展开,介绍了其顺序存储和链式存储两种物理结构。顺序存储涉及地址计算、数组插入删除及时间复杂度;链式存储包含单链表的读取、插入、删除等操作。还阐述了静态链表、循环链表和双向链表的定义、操作及优缺点,对线性表进行了全面总结。

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


线性表概述

  • 最常用和最简单的数据结构
  • 类似排队的组织方式
  • 线性表,顾名思义,具有像线一样性质的表
  • 强调元素间的有序性(只有一个前驱和只有一个后继)和有限序列

在这里插入图片描述在这里插入图片描述

实例

在这里插入图片描述

线性表的抽象数据类型

在这里插入图片描述在这里插入图片描述在这里插入图片描述

线性表的顺序存储结构

  • 两种物理结构其一:顺序存储
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • 分清:线性表容量与线性表当前长度
  • 描述顺序存储结构的三个属性
    • 存储空间起始位置
    • 线性表的最大存储容量
    • 当前长度

地址计算方法

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

数组插入和删除

在这里插入图片描述在这里插入图片描述

时间复杂度

在这里插入图片描述

顺序存储结构总结

在这里插入图片描述在这里插入图片描述

链式存储结构

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

头结点与头指针

  • 头结点:单链表的第一个节点前的节点,数据域不存储任何信息,指针域存储指向第一个节点的指针
  • 无论链表是否为空,头指针均不为空

在这里插入图片描述

单链表的读取

在这里插入图片描述在这里插入图片描述

插入

  • p和p.next间插入节点s
    在这里插入图片描述在这里插入图片描述

删除

在这里插入图片描述在这里插入图片描述在这里插入图片描述

单链表的整表创建

在这里插入图片描述- 顺序存储结构的创建:初始化数组

  • 链式存储结构:动态生成链表的过程

头插法和尾插法

在这里插入图片描述

public class InitializeLinkedList {

    void createList_headInsert(int num){

        ListNode pHead = new ListNode(-1);
        pHead.next = null;
        for(int i=0;i<num;i++){
            ListNode node = new ListNode(i);
            node.next= pHead.next;
            pHead.next = node;
        }
        print(pHead.next);

    }
    void createList_tailInsert(int num){

        ListNode pHead = new ListNode(-1);
        ListNode head = pHead;
        pHead.next = null;

        for(int i=0;i<num;i++){
            ListNode node = new ListNode(i);
            head.next = node;
            head = node;
        }
        print(pHead.next);

    }

//just for test
    @Test
    public void test(){
        createList_headInsert(5);
        System.out.println();
        createList_tailInsert(5);
    }

    void print(ListNode head){
        while(head!=null){
            System.out.println(head.val);
            head = head.next;
        }
    }

}

在这里插入图片描述

单链表的整表删除

  • 释放链表占据的空间
    在这里插入图片描述

两种存储结构对比

在这里插入图片描述在这里插入图片描述在这里插入图片描述

静态链表

概述

在这里插入图片描述

定义

在这里插入图片描述

  • 用数组描述的链表
  • 未被使用的数组元素称为备用链表

在这里插入图片描述

实例

在这里插入图片描述

插入操作

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 代码略

在这里插入图片描述

静态链表的删除

在这里插入图片描述
在这里插入图片描述

优缺点

在这里插入图片描述在这里插入图片描述

  • 理解思想,改变下标而不用移动元素

循环链表

在这里插入图片描述

定义

在这里插入图片描述

循环判断条件

在这里插入图片描述

O(1)时间访问头尾结点(使用尾指针)

在这里插入图片描述

在这里插入图片描述

尾指针实例

  • 合并循环链表

在这里插入图片描述在这里插入图片描述

双向链表

概述

在这里插入图片描述

双向循环链表

在这里插入图片描述

双向的代价

  1. 遍历,求长度,获得位置仍然只涉及一个方向的指针
  2. 增删时要更改两个指针变量

插入操作

在这里插入图片描述
在这里插入图片描述

删除操作

在这里插入图片描述

小结

在这里插入图片描述

线性表总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值