从零开始学习数据结构

本文从零开始介绍数据结构中的线性表,详细讲解了顺序表和链表的区别,包括单链表、双向链表的概念、优缺点及应用。线性表在动态数组和链式存储中的实现各有特点,链表在插入和删除操作上具有优势,而顺序表在存储密度上较高。最后探讨了线性表在实际应用中的场景,如有序表的合并。
摘要由CSDN通过智能技术生成

线性结构

目录

  • 线性表
  • 线性链表
  • 循环链表
  • 双向链表

线性表(linear list)

线性表:一个线性表是n个数据元素的有限序列
线性表的定义

  • 存在唯一一个被称为“第一个”的数据元素
  • 存在唯一一个被称为“最后一个”的数据元素
  • 除了第一个元素之外,每一个数据元素均只有一个前驱
  • 除了最后一个元素之外,每一个数据元素均只有一个后继

一、单链表顺序存储结构(顺序表)

顺序表的基本概念

用一组地址连续的存储单元依次存储线性表的数据元素,在计算机中经常用数组来存储,但普通数组容量有限,所以可以采用动态数组来存储,动态数组先申请初始容量,当内容不断增加时,可以不断的扩大容量
优点改查元素容易,存储密度大
缺点增删元素时,需要移动大量元素

二、单链表链式存储结构(链表)

链表的基本概念
一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
为了表示元素直接的逻辑关系,除了本身数据元素存储,还有节点存储来表示元素后继的信息
数据域存储数据元素
指针域存储后继节点的存储位置
单链表

  • 结点:数据元素存储的地址
  • 链表:n个结点由指针链接成链表
    单链表:结点只有一个指针域,指针指向后继数据元素存储位置
    循环链表:首尾指针相连的链表为循环链表
    双向链表:一个元素有两个指针域,指针分别指向前驱和后继
    头指针:是指向链表中第一个结点的指针
    首元结点:第一个元素的存储的数据位置
    头结点:在第一个元素之前设计的结点,其指针指向第一个元素的结点
    头结点作用:是使所有链表(包括空表)的头指针非空,并使对单链表的插入、删除操作不需要区分是否为空表或是否在第一个位置进行,从而与其他位置的插入、删除操作一致。便于首元结点的处理
    当头结点指向的指针域为空时,可得知为空表
    结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上可以不相邻
    这种存取元素的方法为顺序存取法
    优点:添加和删除元素只需要修改指针指向即可,效率高
    缺点:储存密度小,顺序存储法存储,存取效率不高

三、双向链表

双向链表的基本概念

即每个结点都有两个指针,指向各自的前驱和后继,相较于单向的表更便于遍历

//定义结点类
public class Link {
   
	public int data;	//数据域
	public Link next;	//后继
	public Link previous;//前驱
	public Link(int data){
   
this.data=data;
}
}

双向链表的插入和删除

只需要更新结点的前驱和后继即可

插入

link.previous=new
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值