暴力理解数据结构与算法2------线性表

本文深入解析数据结构核心概念,涵盖线性表、顺序表、链表等基础数据结构及其操作特性,对比分析不同数据结构的优缺点,为算法设计与程序实现提供坚实理论支撑。

数据结构与算法

二.数据结构与算法线性表

1.线性表概念
线性表简称,是零个或多个元素的有穷序列,通常可以表示成K0,k1,…,Kn-1( n ≥ 1)

  • 表目:线性表中的元素(可包含多个数据项,记录)
  • 索引(下标):i称为表目Ki的“索引”或“下标”
  • 表的长度:线性表中所含元素的个数n
  • 空表:长度为零的线性表( n = 0)

线性表特点:操作灵活,其长度可以增长,缩短

线性结构

二元组B=(K,B)K={a0,a1,…,an-1} R={r}

  • 有一个唯一的开始结点,它没有前驱,有一个唯一的直接后继
  • 一个唯一的终止结点,它有一个唯一的直接前驱,而没有后继
  • 其它的结点都叫做内部结点,每一个内部结点都有且仅有一个唯一的直接有前驱,也有一个唯一的直接有后继
  • <ai,ai+1>ai是ai+1的前驱,ai+1是ai的后继
  • 前驱/后继关系r,具有反对称性传递性

结构特点

均匀性:虽然不同线性表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同数据类型长度

有序性:各数据元素在线性表中都有自己的位置,且数据元素之间的相对位置线性

按复杂程度划分

  • 简单的:线性表,栈,队列,散列表
  • 高级的:广义表,多维数组,文件…

按访问方式划分

  • 直接访问型
  • 顺序访问型
  • 目录索引型

在这里插入图片描述
线性表逻辑结构

主要属性包括

  • 线性表的长度
  • 表头
  • 表尾
  • 当前位置

线性表

所有表目都是同一类型结点的线性表
不限制操作形式
根据存储的不同分为:1.顺序表,2.链表

顺序表

按索引值从小到大存放在一片相邻的连续区域
紧凑结构,存储密度为1

链表

单链表
双链表
循环链表

插入删除操作都限制在表的同一端进行(先进后出)

队列

插入操作在表的一端删除操作在另一端(先进先出)

2.顺序表

也称向量,采用定长的一维数组存储结构
主要特性

  • 元素的类型相同
  • 元素顺序地存储在连续存储空间中,每个元素有唯一的索引值
  • 使用常数作为向量长度

数组存储
读写器元素方便,通过下标即可指定位置

3.链表
通过指针把它的一串存储结点链接成一个链
存储结点由两部分组成:
数据域+指针域(后继地址)

单链表

单链表的删除
从链表中删除结点X

  • 1.用p指向元素X的结点的前驱结点
  • 2.删除元素为X的结点
  • 3.释放X占据的空间

双链表
为弥补单链表的不足,而产生双链表

  • 单链表指针域字段仅仅指向后继结点,不能有效地找到前驱,反之亦然
  • 增加一个指向前驱的指针

循环链表
将单链表或者双链表的头尾结点链接起来,就是一个循环链表
不增加额外存储花销,却给不少操作带来了方便

链表边界条件

几个特殊点的处理

  • 头指针处理
  • 非循环链表尾结点的指针域保持为null
  • 循环链表尾结点的指针回指头结点

链表处理

  • 空链表的特殊处理
  • 插入或删除结点时指针勾链的顺序
  • 指针运动的正确性

顺序表的主要优点

  • 没有使用指针,不需要花费额外开销
  • 线性表元素的读访问非常简洁便利

链表的主要优点

  • 无需事先了解线性表的长度
  • 允许线性表的长度动态变化
  • 能够适应经常插入删除内部元素的情况

总结
顺序表是存储静态数据的不二选择
链表是存储动态变化数据的良方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值