特点:
- 链式存储的线性表,便于插入和删除,但不能随机存储(即根据一定的公式快速定位某个结点,只能从前往后遍历)
- 节点包括:任意元素类型的数据域、结点类型的指针。
- 最好设置一个头结点,这样对第一个结点操作与对其他结点操作一致,对空表的操作和对非空表的操作一致。
单链表结点的描述
typedef struct{
int num;
char data; //这两个都是数据域,也可以单独定义一个结构体将这两个数据域打包
struct Lnode *next; //指针域,一个类型为Lnode的指针
}Lnode ,*LinkList; //定义一个类型为Lnode的指针--LinkList;
一个小小的突发状况:. 和 -> 的区别
先说结论:结构体用点,结构体指针用箭头。 现在编译器优化后,两者可以通用
- ".“直接读做"的”。
->读作"指向的结构体的”- C需要显式区分直接访问与指针间接访问。
应试需要,简单记为,顺序表用 . ,单链表用 ->
头插法插入单链表
-思路:
- 定义一个头结点,包括使用malloc函数给其分配空间
- 头结点初始指向空
- while语句接收数据,插入单链表
- 为待插入的结点分配空间
- 待插入结点获取数据
- 待插入的结点指针域指向下一个结点的数据域,上一个结点的指针域指向待插入结点的数据域。顺序很重要!不能颠倒
- 返回头结点
//头插法
LinkList LHead(LinkList &L){
// 返回值类型为LinkList ,传入的参数:类型为LinkList的单链表,记得带 & 符号,因为会对原有数据修改
Lnode *s; //一个Lnode类型的指针.这个是待插入指针
int x