数据结构 链表学习总结
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
前言
线性表是数据结构中最基础也是最常见的一种结构,它像一根“线”把数据像“串珠子”一样串联了起来。根据数据在内存中是否连续,可以把线性表分为:顺序表和链表 ,本文详细介绍链表。
1. 链表介绍
1.1 什么是链表
链表(linked list),将数据如同锁链一样串联起来,每一个存储数据的节点不仅存储的数据(数据域)还存储着下一个节点的内存地址(地址域)。因此,各个节点可以保存在内存中的不连续地址上。
如同这个示意图,所有节点的地址域中只保存了下一个节点的地址并且尾节点的地址域中保存的是NULL的链表称为:单链表。在单链表的基础上,尾节点保存了首节点地址的链表叫做“循环链表“;每个节点不仅保存了下一个节点的地址,还保存了上一个节点的地址的链表叫做”双向链表“。
单链表是链表的基础形式,本文着重介绍单链表。
1.2 链表的性质
-
链表在内存中可以是连续的,也可以是不连续的。
-
链表通过数据域中的地址访问节点,因此不同节点的数据域中的数据类型可以是不同的。
-
相较于顺序表,链表的存储空间内既有数据又有地址,因此它的存储密度小于1.
1.3 链表的构成
链表主要由两部分组成:
- 节点
- 首节点的地址
1.4 单链表的框架代码(C++版)
#include <iostream>
#include<iostream>
using namespace std;
// 节点
template <typename Type> class Node {
public:
Type data; // 数据域
Node<Type> *next; // 地址域
Node(const Type &_data) {
// 通过构造函数初始化一个节点
data = _data;
next = NULL;
}
};
// 链表
template <typename Type> class LinkedList {
private:
Node<Type> *head; // 首节点的地址
public:
LinkedList() // 构造函数
~LinkedList() // 析构函数
bool insert(Node<Type> *node, int index) // 在链表中插入节点
void output() // 输出链表中所有节点的数据
bool delete_node(int