1. 线性表(重点)
(Linear List):
由同类型数据元素
构成有序序列
的线性结构
- 表中元素个数称为线性表的
长度
- 线性表没有元素时,成为
空表
- 表起始位置称
表头
,结束位置称表尾
※ 线性表的 顺序存储 实现:
利用数组的连续存储空间顺序存放
线性表的各元素
定义一个数组
D
a
t
a
[
]
Data[]
Data[],和
i
n
t
int
int型的变量
L
a
s
t
Last
Last,变量
L
a
s
t
Last
Last的作用为模拟线性表的指针
:
当进行数据插入、删除等基本操作时,需要移动数据元素
。
※ 线性表的 链式存储 实现:
不要求逻辑上相邻的两个元素物理上也相邻
;通过“链”建立起数据元素之间的逻辑关系。
- 插入、删除
不需要移动数据元素
,只需要修改“链”。
关于链表的JAVA
实现如下:
/* 结点 */ public class Node<AnyType> { public AnyType data; public Node<AnyType> next; public Node(AnyType data,Node<AnyType> next){ this.data=data; this.next=next; } } ----- public class MyLinkList<AnyType> { //首元节点 private Node<AnyType> first; //头指针 private Node<AnyType> head; //链表长度 int thesize; //初始化链表 public boolean initlist(){ thesize=0; first=new Node<>(null,null); head=new Node<>(null,first); return true; } //判断链表是否为空 public boolean isEmpty(){ return thesize==0; } //获取节点 public Node<AnyType> getNode(int i){ Node<AnyType> renode=head; for(int j=-2;j<i;j++){ //(去除首元结点的i-1) renode=renode.next; } return renode; } //在末尾添加元素 public void add(AnyType a){ Node<AnyType> renode=new Node<>(a,null); getNode(thesize-1).next=renode; thesize++; } //删除i位置节点,并返回删掉的数据 public AnyType remove(int i){ if(i==thesize-1){ AnyType a=getNode(thesize-1).data; getNode(thesize-2).next=null; return a; } Node<AnyType> prev=getNode(i-1); AnyType a=prev.next.data; prev.next=prev.next.next; thesize--; return a; } //在i位置插入新节点 public void insert(int i,AnyType a){ Node<AnyType> prev=getNode(i-1); Node<AnyType> renode=new Node<>(a,prev.next); prev.next=renode; thesize++; } //获取i位置节点的数据 public AnyType get(int i){ return getNode(i).data; } //为i位置元素重新赋值 public void set(int i,AnyType a){ getNode(i).data=a; } //返回链表节点个数 public int length(){ return thesize; } //清空链表 public void clear(){ initlist(); } //打印链表 public void print(){ for(int i=0;i<thesize;i++){ System.out.println(getNode(i).data); } } }
作者: sang_Mu 出处:https://www.cnblogs.com/sang-bit/p/11609824.html
2. 广义表:
- 广义表是
线性表的推广
- 对于线性表而言,
n
n
n个元素都是基本的
单元素
- 广义表中,这些元素不仅可以是
单元素
也可以是另一个广义表
广义表详细解释及JAVA
实现:优快云
3. 多重链表:
链表中的节点可能同时隶属于多个链
- 多重链表中节点的
指针域会有多个
- 但包含两个指针域的链表并不一定是多重链表,如
双向链表
※多重链表有广泛的用途:基本上树、图
这样相对复杂的数据结构都可以采用多重链表
方式实现存储。
Example: