线性表链式表示详解

线性表的链式表示(链表数据结构):
相对于线性表的顺序存储,线性表的链式存储结构,逻辑上相邻的元素在物理位置上不相邻,便于进行插入和删除操作,但同时也失去了顺序表可以随机存取的优点。
线性表的链式表示分为三种:单链表,循环链表和双向链表
(1) 单链表
元素的存储单元可以是连续的,也可以不是连续的
每一个结点有两部分组成:数据域和指针域
数据域:存储该数据元素的信息
指针域:存储直接后继元素位置的信息
数据类的定义如下:
class Node {
Node next = null;
int data;
public Node(int data){
this.data = data;
}
}
单链表中,第一个结点之前会附设一个结点,称为,头结点;头结点的数据域可以不存储任何信息,也可以存储线性表的长度等附加信息,其指针域存储第一个元素的存储位置
最后一个结点的指针域为null
在进行查找时,循环条件是:p.next != null
插入或删除指定元素或某一位置元素的时间复杂度为O(n)
(2) 循环链表
与单链表的不同之处是:最后一个结点的指针域指向头结点,即存储的是头结点的指针位置,整个链表形成一个环。
在进行查找时,判断的条件是p.next=头结点
(3) 双向链表
除了数据域之外,双向链表有两个指针域,一个指针存储该结点的前一个结点的位置,即,该结点前驱的位置,另一个指针存储该结点后一个结点的位置,即,该结点后继的位置
头结点的前驱为最后一个元素,后继为第一个元素
最后一个结点的后继为头结点
插入或删除指定元素或某一位置元素的时间复杂度为O(n)

猜你喜欢

转载自blog.csdn.net/educationer/article/details/89495079