数据结构三要素:
链表的分类:
1. 单向链表:
有头的: 第一个节点不存储数据,作为头节点使用
无头的:第一个节点就开始存储数据
循环链表:最后一个节点的指针域指向头节点
2. 双向链表
以下的操作都是单向链表
链表的插入:
头插法:
申请新的节点
将新节点的指针域,指向第一个节点(也就是头节点的下一个节点)
将头节点的指针域指向新申请的节点
尾插法:
申请新的节点
遍历链表找到最后一个节点
让最后一个节点的指针域指向新申请的节点
任意位置插入:
申请新的节点pnew
遍历链表找到带插入位置的上一个节点(ptemp)
让新申请的节点指向ptemp->next,(pnew->next = ptemp->next)
再将ptemp的节点的指针域指向pnew(ptemp->next = pnew)
链表的删除:
头删法:
让指针pdel 指向待删除的节点
然后让头节点的指针域指向待删除的节点的下一个节点(phead->next = pdel->next)
释放带删除节点的指针域(free(pdel))
将pdel制空(pdel = NULL)
尾删法:
遍历链表找到最后一个节点的上一个节点ptemp
释放ptemp
将ptemp置空
任意位置删除:
遍历链表找到待删除节点的上一个节点ptemp
让pdel 指向待删除的节点 pdel = ptemp->next
让ptemp 指向pdel的next(ptemp->next = pdel->next)
释放(pdel)
将pdel 置空
俩个有头的链表合并:
先找到第一个链表的尾节点p1_last
将p1_last->next 指向第二个链表的头节点的下一个节点( p1_last->next = p2head->next)
释放p2链表的头节点free(p2head)
将p2 的头节点置空(p2head = NULL
链表的排序:
1.定义俩个指针分别指向头节点下的第一个节点和第二个节点,(p = phead->next,q = p->next)
2. 比较俩个节点的数据域,如果不符合顺序就交换俩个节点的数据域,交换完以后, p不动,q向后面走,如果符合顺序,p还是不动,q向后面走,直到 q =NULL 为止,
3.然后p向后面移动,在把 q继续移动到p的下一个节点, 重复2的操作,终止条件是,q =NULL && p->next = NULL;
链表的翻转:
如果只有一个头节点无需翻转
只有一个数据节点也无需翻转
定义一个指针指向第二个数据节点,将第一个节点的指针域置空】
将第二个节点和以后的节点,采用头插法,依次插入。