c语言单链表基本操作
时间: 2023-11-07 20:57:07 浏览: 112
单链表的基本操作包括插入、删除和查找等。在C语言中,可以通过定义结构体和指针来实现单链表的操作。
1. 插入操作:
在单链表的第i个位置插入一个元素e,可以分为带头结点和不带头结点两种情况。
带头结点的插入操作(ListInsert(&l, i, e)):
- 如果输入的i小于1,则i的值不合法,返回false。
- 定义指针p指向当前扫描到的结点,初始化j为0,表示当前指针p指向的是第几个结点。
- 将指针p指向头结点L,头结点是第0个结点(不存储数据)。
- 循环找到第i-1个结点,即p指向第i-1个结点,直到p为空或者j为i-1为止。
- 如果p为空,则i的值不合法,返回false。
- 定义新的结点s,并申请一个结点空间。
- 将元素e存储在新结点s的数据域中。
- 将新结点s的指针域指向p指针指向的下一个结点。
- 将p指针指向的下一个结点的指针域指向新结点s,即将新结点插入到p之后。
- 返回true,表示插入成功。
不带头结点的插入操作(ListInsert(&l, i, e)):
- 如果输入的i小于1,则i的值不合法,返回false。
- 如果i等于1,表示要在第1个位置插入元素,特殊处理:
- 定义新的结点s,并申请一个结点空间。
- 将元素e存储在新结点s的数据域中。
- 将新结点s的指针域指向头指针L。
- 头指针L指向新结点s。
- 返回true,表示插入成功。
- 定义指针p指向当前扫描到的结点,初始化j为0,表示当前指针p指向的是第几个结点。
- 将指针p指向头指针L,p指向第一个结点。
- 循环找到第i-1个结点,即p指向第i-1个结点,直到p为空或者j为i-1为止。
- 如果p为空,则i的值不合法,返回false。
- 定义新的结点s,并申请一个结点空间。
- 将元素e存储在新结点s的数据域中。
- 将新结点s的指针域指向p指针指向的下一个结点。
- 将p指针指向的下一个结点的指针域指向新结点s,即将新结点插入到p之后。
- 返回true,表示插入成功。
2. 删除操作:
在单链表中删除第i个位置的元素,同样分为带头结点和不带头结点两种情况。
带头结点的删除操作(ListDelete(&l, i, e)):
- 如果输入的i小于1,则i的值不合法,返回false。
- 定义指针p指向当前扫描到的结点,初始化j为0,表示当前指针p指向的是第几个结点。
- 将指针p指向头结点L,头结点是第0个结点(不存储数据)。
- 循环找到第i-1个结点,即p指向第i-1个结点,直到p为空或者j为i-1为止。
- 如果p为空,则i的值不合法,返回false。
- 如果第i-1个结点的下一个结点为空,表示第i-1个结点后已无其他结点,返回false。
- 定义指针q指向第i-1个结点的下一个结点。
- 用变量e返回被删除的元素的值,即e等于q指针指向的结点的数据域。
- 将第i-1个结点的指针域指向q指针指向的下一个结点,即将q结点从链中断开。
- 释放q结点的存储空间。
- 返回true,表示删除成功。
不带头结点的删除操作(ListDelete(&l, i, e)):
- 如果输入的i小于1,则i的值不合法,返回false。
- 如果i等于1,表示要删除第1个位置的元素,特殊处理:
- 定义指针q指向头指针L,q指向第一个结点。
- 用变量e返回被删除的元素的值,即e等于q指针指向的结点的数据域。
- 头指针L指向q指针指向的下一个结点。
- 释放q结点的存储空间。
- 返回true,表示删除成功。
- 定义指针p指向当前扫描到的结点,初始化j为0,表示当前指针p指向的是第几个结点。
- 将指针p指向头指针L,p指向第一个结点。
- 循环找到第i-1个结点,即p指向第i-1个结点,直到p为空或者j为i-1为止。
- 如果p为空,则i的值不合法,返回false。
- 如果第i-1个结点的下一个结点为空,表示第i-1个结点后已无其他结点,返回false。
- 定义指针q指向第i-1个结点的下一个结点。
- 用变量e返回被删除的元素的值,即e等于q指针指向的结点的数据域。
- 将第i-1个结点的指针域指向q指针指向的下一个结点,即将q结点从链中断开。
- 释放q结点的存储空间。
- 返回true,表示删除成功。
3. 查找操作:
在单链表中查找某个元素的位置或者判断单链表是否为空。
查找
阅读全文