第十二章 链表
12.1 链表的概述
12.1.1 数组和链表的优缺点
静态数组:int arr[5]; 必须事先确定数组元素的个数,过多浪费过小容易溢出,删除插入数据效率低(需要移动大量的数据)
动态数组:不需要事先知道元素的个数,在使用中动态申请,删除插入数据效率低(需要移动大量的数据)
(数组优点:遍历元素效率高)
链表:不需要事先知道数据的个数,在使用中动态申请,插入删除不需要移动数据
(链表缺点:遍历效率低)
12.1.2 链表的概述
链表是由一个个节点组成,节点没有名字,每个节点从堆区动态申请,节点间物理上是非连续的,但是每个节点通过指针域 保存下一个节点的位置 达到逻辑上连续。
12.2 静态链表
12.2.1 设计链表节点
#include<iostream>
using namespace std;
struct stu
{
//数据域
int num;
char name[32];
//指针域
struct stu *next;
};
int main(int argc, char const *argv[])
{
struct stu node1 = {100,"lucy",NULL};
struct stu node2 = {101,"bob",NULL};
struct stu node3 = {102,"tom",NULL};
struct stu node4 = {103,"jerry",NULL};
struct stu node5 = {104,"jack",NULL};
//定义链表头
struct stu *head = &node1;
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
node5.next = NULL;
//遍历
struct stu *pb = head;
while (pb != NULL)
{
//访问数据
}
}