结构体
struct node{
int data;
node *next; //这是指针
};
这是结构体,想必大家都不陌生
唉,有人就会问了,为什么里面的参数类型有node,
这是一种C++特有的写法,叫做链表;
如果换成这样,就不行了:
struct node{
int data;
node next; //这是变量(编译错误)
};
链表
以上的结构体就是一种常见的单链表
单链表有以下几种操作:
操作\时间复杂度\对比 | 数组 | 链表 |
插入 | O(n) | O(1) |
删除 | O(1) | O(1) |
读取 | O(1) | O(n) |
长度 | O(n) | O(n) |
怎么样,和数组是不是天差地别。
那我们就来学习链表吧
2.1 单链表
链表的优点在于插入和删除
下面是一个基本链表的样子
head -> 1 -> 2 -> 3 -> NULL
2.1.1 插入
插入非常简单,只需要两行代码就行了(手残党狂喜)
第一行:
p -> next = head -> next
head -> 1 -> 2 -> 3 -> NULL
p ┘
第二行:
head -> next = p -> next
head -> p -> 1 -> 2 -> 3 -> NULL
2.1.2 删除
删除也非常简单,只需要两行代码就行了(手残党又狂喜)
第一行:
head -> next = p -> next
head -> 1 -> 2 -> 3 -> NULL
p ┘
第二行:
delete p;
head -> 1 -> 2 -> 3 -> NULL
2.1.3 读取
读取有点难,需要用到循环,
还要再建一个点位。
int p;
cin >> p;
node *elem = head;
int j = 0;
while(j < p){
elem = elem -> next;
j++;
}
(此时的elem就是读取的数据)