浅析线性表的链式存储结构——链表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
插入算法 :
St at us I ns er t L (L i n k L i s t& L , { p = L ; j = 0 ; w h i l e (P & &j < i 一 1 ) {p = p 一 ) n e x t ; j + + ;} i f( P& &j := i 一 1 ) { s = ( L i n k L i s t )m a l l o c( s i z e o f( L N o d e ))
—
S - > d a t a= e ;s - > n e x t = p 一 > n e x t ;
p - > n e x t : s ;r e t u r n o k ; ) r e t u r n e r r o r ;} ( 二) 删 除。 在一个链表 中存在三个相邻 的数据域分别为 a ,b和 C的结点 ,通过删 除数据元素 b实现数据 元素 a ,b和 C 之间逻辑关系的变化 。 我们只需要改变结点 a中指针 的指 向, 让其指 向结点 c即可 。 假设 P为指 向结点 a的指针 ,则删 除过 程 的语 句为 :q = p 一 > n e x t ;p - > n e x t = q一 > n e x t ;f r e e ( q ) ; 删 除算 法: S t a t u s D e l e t eL (L i n k L i s t& L ,i n t i , E l e m T y p e& e ) { p = L ; j = 0 ;
消费 电子
计 算机科学
C o n s u me r E l e c t r o n i c s Ma g a z i n e 2 0 1 3年 4月 下
浅析线性表的链式存储结构
— —
链表
万 淑 兰
( 1 . 中国海洋大学 ,山东青岛 2 6 6 1 0 0 ;2 . 潍坊科技 学院 ,山 东寿光 2 6 2 7 0 0 ) 摘 要 :线性表是一种线性结构 ,是数据结构 中最常用且最 简单的一种数据结构。采用顺序存 储结构的线性表 称之为顺序表 ,采用链 式存储 结构 的线性表称之为链表。线性表 采用不 同的存储 结构 , 对应 的算法操作过程也不 同, 实现起来效率也就有差异。通 过对线性表 的链式存储 结构进行分析与研究 ,进一步加 深广大学习者对链表 的理解 。 关键词 :线性表 ;数据结构 ;链表 ;存储 结构 中图分类号 :T P 3 3 3 文献标识码 :A 文章编号 :1 6 7 4 — 7 7 1 2( 2 0 1 3 )0 8 — 0 1 0 2 — 0 1
— —
个数据域为 x的结点 。为插入元素 X ,首先要找到指 向结点 a 的指针 P ,然 后再为元 素 x申请 一个存储空问 ,假设 S是指 向 该空 问的地址指针 。实现插入过程 的语 句依 次为 :s 一 ) n e x t = p
> n ex t; p -) ne xt =s;
一
、
线性结构
线性表是一种 数据 元素之 间具有 1 : 1的线 性关系的数据 结构,每个线性表都是 由 n个数据元素组成的。 采用顺序存储结构 的线性表称之为顺序表 , 顺序表所具有 的逻辑 结构特 点是 : 用一组地址连续的存储 单元, 依次存储线 性表 中的数据元素 , 逻辑关系上相邻的两个 数据元 素在存储 的 物 理位 置上 一定也要相邻 。因此 , 线性表 的顺序存储 结构是一 种 可 以 随机 存 取 的存 储 结 构 。 顺序表 中任何一个数据元素 a j的存储位置 L O C( a j )都 可 以用一个简单 、直观 的公式:L O C( a j )= L O C( a 1 ) + ( j - 1 ) 木 L 来表示 。 采用链式存储结构 的线性表称之为链表 , 链表所具有 的逻 辑 结构特 点是 : 用一组任意的存储单元来存储线性表 中的数据 元素 , 这些存储 单元 的地 址可 以是连续 的, 也可 以是不连 续的。 二 、链表 ( 一 )链表的相关概念 。在链表 中, 用来表示一个数据元 素 的结构称之为结点 。 每个结点结构都含有两个域 , 一个用来 存储数据元素 自身 的信息 , 称之为数据域 ; 另一个用来存储其 直接后继 的存储位置 , 称之 为指针域 。在链表中,一个数据元 素与其直接后继之间的逻辑关系 , 是通过指针域 中存储 的信息 指针来实现 的。 为 了便于操作, 有 时在单链表 的第一个结 点之前增加一个被称为头结点的结点 。 链表 中的每个结点结构 中都只含一个指针域 ,所 以称其为单链表 。 ( 二) 链表的结构 。 链表 是一种常见 的且动态分配存储空 间的数据结构 。当用静态的数组来存放数据 时, 我们必须事先 预定义一定 的、 足够大的空间, 以便能存放足够多的数据元素 。 链表则不需要预定义一定 的空间 , 它是根据 需要开辟 内存空 间
—
w h i l e (p - > n e x t& &j < i 一 1 )
{ p = p 一 > n e x t ; j + + ; ) i f (! (p - ) n e x t l j > i — 1 )r e t u r n e r r o r ;
q = p 一 > n e x t ;p - > n e x t = q 一 > n e x t ;
的。
ቤተ መጻሕፍቲ ባይዱ
e = q 一 > d a t a ;f r e e ( q ) ; r e t u r n o k ;} 综上所述 ,在链表 中某一指定位置插 入一个元素或删 除
头指针是用来存放第一个数据元素的存储地址 的, 它代表 了整个单链表 的开始 , 因此, 在单链表 中读取每个数据元素时 , 必须从它 开始 。 最后一个数据元素之后不再有其它元素, 它代 表 了整个单链表 的结束 , 因此称它为尾结点。 在单链表 中要找 到某一个数据元素 , 必须先找到它的直接前驱, 所 以线性表 的 链式存储结构是一种顺序存取的存储结构。 由此可 见,如果没有头指针 ,则整个链条都将无法访问 。 所 以单链表是 由头指针唯一确定 的。 ( 三 )链表 的分类 。( 1 )单向链表 。在单 向链表 中,每个 结点包含两个域 ,一个是数据域 ,一个是指针域。( 2 )双 向链 表 。在双 向链表 中,每个结点都包含三个域,一个 是数据域 , 另外 两个 是指针域 , 其 中一个指 向其直接后继 , 另一个指 向其 直接前驱 。( 3 )循环链表 。链表中 的首尾结点相连接 ,则从链 表 中任意一个结 点出发 , 都能访 问到链表中的所有结点, 它 的 结构特 点是最后一个结点 的指针域指 向头结点 , 使整个链表形 成一个环 。双 向循环链表也有循环结构 。 三、链表 的基本操作 ( 一) 插入 。 假设在一个链表中存在两个相邻 的数据域分 别 为 a和 b的结 点 , 则 通 过 插 入 操 作 实现 在 a 和 b 之 间插 入 一