链表因其出题灵活、代码量适中成为面试时常考数据结构之一,而我本身对它的理解模棱两可,所以有必要对其进行集中学习整理。
链表和数组一样属于线性表,但相比于数组,链表在内存中的存储不需要申请连续空间。因为链表本身的节点包括了一个用于存放数据的数据域和一个指向下一个节点地址的指针域。
建立一个简单的节点
# include <iostream>
using namespace std;
typedef struct linknode
{
int data; // 要存放在节点中的数据
linknode *next; // 指向下一个与该节点有相同结构节点的指针
}linknode;
这个节点还可以这样扩充
/* 创建结构体,用来创建数据,该例中即创建了有学号、姓名、性别信息的数据 */
typedef struct data // 创建数据结构,用来创建数据
{
int number;
string name;
string sex;
}data;
typedef struct linknode
{
data *information;
linknode *next; // 添加后向指针
linknode *pre; // 添加前向指针
}linknode;
因此,我们可以创建一个基础链表
typedef struct data
{
int number;
string name;
string sex;
}data;
typedef struct linknode
{
data *information;
linknode