链表: 用一组任意的存储单元来存储线性表中的数据元素,并用指针域实现逻辑上相邻的关系
特点:
相关术语:
判断一个链表是否为空的条件有以下两种情况:
单链表的结点示意图
typedef int Type;
typedef struct node_s
{
Type data;
struct node_s* next;
};
node_t* p = calloc(1,sizeof(node_t)); // p ──> ┌─────┬───┐
p->data=20; // │ 20 │ ^ │
p->next = NULL; // └─────┴───┘
操作前 操作后
//---------------------------------------------------------------------
(1) q=p;
// p ──> ┌───┬─┐ | p ──> ┌───┬─┐
// ...──>│ a │ ┼──>... | ...──>│ a │ ┼──>...
// └───┴─┘ | q ──> └───┴─┘
//---------------------------------------------------------------------
(2) q=p->next;
// p ──> ┌───┬─┐ ┌───┬─┐ | p ──> ┌───┬─┐ q ──> ┌───┬─┐
// ...──>│ a │ ┼─>│ b │ ┼──>... | ...──>│ a │ ┼───────>│ b │ ┼──>...
// └───┴─┘ └───┴─┘ | └───┴─┘ └───┴─┘
//---------------------------------------------------------------------
(3) p=p->next;
// p ──> ┌───┬─┐ ┌───┬─┐ | ┌───┬─┐ p ──> ┌───┬─┐
// ...──>│ a │ ┼─>│ b │ ┼──>... | ...──>│ a │ ┼───────>│ b │ ┼──>...
// └───┴─┘ └───┴─┘ | └───┴─┘ └───┴─┘
//---------------------------------------------------------------------
(4) p->next=q;
// q ──> ┌───┬─┐ | q ──> ┌───┬─┐
// │ c │ ┼─>... | ┌─>│ c │ ┼─>...
// └───┴─┘ | │ └───┴─┘
// p ──> ┌───┬─┐ ┌───┬─┐ | p ──> ┌───┬─┐ │ ┌───┬─┐
// ...──>│ a │ ┼─>│ b │ ┼──>... | ...──>│ a │ ┼─┘ │ b │ ┼──>...
// └───┴─┘ └───┴─┘ | └───┴─┘ └───┴─┘
//---------------------------------------------------------------------
(5) p->next=q->next;
// q ──> ┌───┬─┐ ┌───┬─┐ | q ──> ┌───┬─┐ ┌───┬─┐
// ...──>│ x │ ┼─>│ y │ ┼──>... | ...──>│ x │ ┼───>│ y │ ┼──>...
// └───┴─┘ └───┴─┘ | └───┴─┘ ┌─>└───┴─┘
// p ──> ┌───┬─┐ ┌───┬─┐ | p ──> ┌───┬─┐ │ ┌───┬─┐
// ...──>│ a │ ┼─>│ b │ ┼──>... | ...──>│ a │ ┼─┘ │ b │ ┼──>...
// └───┴─┘ └───┴─┘ | └───┴─┘ └───┴─┘
//---------------------------------------------------------------------
待写
原文:http://blog.csdn.net/liudglink/article/details/45268501