数据结构:线性表

1.线性表的类型定义

  • 线性表(linear-list)是最常用且最简单的一种数据结构。一个线性表是n个数据元素的有限序列。每个数据元素的具体 含义,在不同情况下各不相同。

  • 在复杂的线性表中,一个数据元素可以由若干个数据项(itme)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件(file)。

  • 定义:若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。可表示为:(a1,a2,a3,……,an)。

  • 特点

    1. 只有一个首结点和一个尾结点
    2. 除首尾结点外,其他结点只有一个直接前驱和直接后继。

对线性表的元素不仅可以进行访问,还可进行插入删除等操作。

2.线性表的顺序表示

  • 顺序表的表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
  • 假设线性表的每个元素占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置,则线性表中第i+1个数据元素的存储位置LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足下列关系:LOC(ai+1)=LOC(ai)+l,一般来说,线性表的第i个数据元素ai的存储位置为:LOC(ai)=LOC(a1)+(i-1)*l。式中LOC(a1)是线性表的第一个数据元素a1的存储位置,通常称做线性表的起始位置或基地址。
  • 线性表的这种机内表示称做线性表的顺序存储结构顺序映像(sequential mapping),通常,称这种存储结构的线性表为顺序表。线性表的顺序存储结构是一种随机存取的存储结构。
  • 由于高级程序设计语言中的数组类型也有随机存取的特性,因此,通常都用数组来描述数据结构中的顺序存储结构。
  • 当在顺序存储结构的线性表中某个位置上插入一个元素时,一般情况下,在第i(1<=i<=n)个元素之前插入一个元素时,需将第n至第i(共n-i+1)个元素向后移动一个位置。
  • 当在顺序存储结构的线性表中的某个位置上删除一个元素时,一般情况下,删除第i(1<=i<=n)个元素时需将从第i+1个元素至第n(共n-i)个元素依次向前移动一个位置。

3.线性表的链式表示

(1)线性链表(非随机存取的存储结构)
特点:用一组任意的存储单元存储线性表的数据元素。
为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai的存储映像,称为结点(node)。
结点包括两个域:其中存储数据元素信息的域称为数据域,存储直接后继存储位置的域称为指针域
指针域中存储的信息称做指针。n个结点(ai(1<=i<=n)的存储映像)链结成一个链表,即为线性表的链式存储结构。又由于此链表的每个结点中只包含一个指针域,故又称为线性链表单链表
整个链表的存取必须从头指针开始进行,头指针指示链表中第一个结点的存储位置(有时,在单链表的第一个结点之前附设一个结点,称为头结点,头结点的数据域可以不存储任何信息,也可存储如线性表长度等类的附加信息,头结点的指针域存储指向第一个结点的指针,即第一个元素结点的存储位置)。同时,由于最后一个数据元素没有直接后继,则线性表中最后一个结点的指针为“空”(NULL)。
插入数据元素(在a与b之间插入x):插入数据元素x时,首先要生成一个数据域为x的结点,然后插入在单链表中。根据 插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向结点x,而结点x中的指针域应指向结点b,从而实现3个元素a、b、x之间的逻辑关系的变化。
删除数据元素(删除a、b、c中的b):在线性表中删除b时,为在单链表中实现元素a、b、c之间的逻辑关系变化,仅需修改结点a中的指针域。
(2)循环链表
特点:表中最后一个结点的指针域指向头结点,整个链表形成一个环。
(3)双向链表
特点:结点中有两个指针域,其一指向直接后继,另一指向直接前驱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值