线性表(线性表的类型定义)
Posted 大扑棱蛾子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性表(线性表的类型定义)相关的知识,希望对你有一定的参考价值。
线性表: (linear_list)是最常用且最简单的一种数据结构。简言之一个线性表是n( n ≥ 0 n \\ge 0 n≥0)个数据元素的有限序列。其中 n n n为表长,当 n = 0 n=0 n=0时,该表为空表。
在稍微复杂的线性表中,一个数据元素可以由若干个数据项(item)组成。在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表又称文件。
在同一线性表中的元素必定具有相同的特性,即属于同一数据对象。
在Java等高级语言中虽然可以存储不同类型的数据,但是底层的抽象数据类型是相同的。以
LinkedList
为例,最终存储在线性表中的结构如下:
private static class Node<E>
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next)
this.item = element;
this.next = next;
this.prev = prev;
这里的E
为泛型,但对于线性表来说存储的实际上是Node
这个抽象数据类型。
若
L
L
L命名为线性表,则一般表示为:
L
=
(
a
1
,
a
2
,
.
.
.
,
a
i
−
1
,
a
i
,
a
i
+
1
,
.
.
.
,
a
n
)
L = (a_1, a_2,... \\;,a_i-1, a_i,a_i+1,... \\;, a_n)
L=(a1,a2,...,ai−1,ai,ai+1,...,an)
其中
a
1
a_1
a1称为首项,
a
n
a_n
an称为尾项,
a
i
−
1
a_i-1
ai−1称为
a
i
a_i
ai的直接前驱,
a
i
+
1
a_i+1
ai+1称为
a
i
a_i
ai的直接后驱。
在非空表中每个数据元素都有一个确定的位置。
线性表的特点
- 表中的元素个数是有限的
- 表中元素具有逻辑上的顺序性,在序列中各个元素排序有其先后次序
- 表中元素都是数据元素,每个元素都是单个元素
- 表中元素的数据类型都相同
- 表中元素具有抽象性,即讨论元素间一对一的逻辑关系,而不考虑元素酒精表示的内容
- 线性表是一种逻辑结构,表示元素之间一对一相邻的关系
线性表抽象数据类型的定义:
ADT List
数据对象: D = a_i | a_i ∈ ElemSet, i=1,2,3,...,n, n ≥ 0
数据关系: R1 = <a_i-1, a_i> | a_i-1,a_i ∈ D, i=1,2,3,...,n
基本操作:
InitList(&L):构造一个空的线性表L
DestroyList(&L):销毁线性表,并释放线性表L所占用的内存空间。
ClearList(&L):将L重置为空
ListEmpty(L):判断线性表释放为空
ListLength(L):返回L中数据元素的个数
GetElem(L, i, &e):用e返回L中第i个数据元素的值
LocateElem(L, e, compare()):返回L中第1个与e满足关系compare()的数据元素的位序。若这样的数据不存在,则返回值为0。(简单的理解就是获取元素e在链表L中的位置,如果不存在则返回0。)
PriorElem(L, cur_e, &pre_e):若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。
NextElem(L, cur_e, &next_e):若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。
ListInsert(&L, i, e):在L中第i个位置之前插入新的数据元素e,L的长度加1
ListDelete(&L, i, e):删除L中的第i个数据元素,并用e返回其值,L的长度减1
ListTraverse(L, visit()):依次对L的每个数据元素调用函数visit()。一旦visit()失败,则操作失败。
ADT List
&
表示引用类型。这里链表的索引位置是从1开始的,但是在程序中一般索引位置是从0开始的,所以这里要做好区分。
以上是关于线性表(线性表的类型定义)的主要内容,如果未能解决你的问题,请参考以下文章