阅读提示
建议先通读一遍,再回看题目、开头、过渡和结尾,更容易提炼出可借鉴的写作框架。
实验名称: 单链表的基本操作实现
实验日期: 2023年10月15日
实验人员: 张明(学号20230105)
一、实验目的
1. 理解单链表的存储结构和特点。
2. 掌握单链表的创建、插入、删除、查找等操作的实现方法。
3. 通过代码编写调试,加深对链式存储的理解。
二、实验环境
操作系统:Windows 10
编程语言:C语言
开发工具:Dev-C++ 5.11
三、实验内容与步骤
1. 定义单链表结构
typedef struct Node {
int data;
struct Node next;
} ListNode;
2. 实现单链表创建函数
通过动态内存分配生成头结点,并初始化为空链表。
3. 实现插入操作
编写函数 `insertNode(ListNode head, int pos, int value)`,在指定位置插入新节点。注意处理头插、中间插入和尾插情况。
4. 实现删除操作
编写函数 `deleteNode(ListNode head, int pos)`,删除指定位置节点并释放内存。
5. 实现遍历与查找
编写函数 `searchNode(ListNode head, int value)`,查找链表中是否存在指定值。
6. 测试代码
在主函数中调用上述操作,输入测试数据并输出链表状态,验证正确性。
四、实验结果与分析
1. 测试数据
初始链表:空链表
操作序列:
2. 输出结果
插入后链表:10 -> 20
删除后链表:20
查找值20:存在,返回节点地址
3. 问题与解决
解决:增加条件判断,更新头指针指向。
解决:加入位置有效性检查,返回错误提示。
五、实验总结
本次实验完成了单链表的基本操作实现。通过动手编码,明确了链表指针操作的细节,如节点连接与内存管理。实验过程中,对边界条件的处理尤为重要,例如空链表或越界位置需单独判断。链表的动态扩展性优于数组,但失去了随机访问能力。后续可进一步实现双向链表或循环链表以扩展应用场景。
附录:核心代码(部分)
ListNode createList {
ListNode head = (ListNode)malloc(sizeof(ListNode));
head->next = NULL;
return head;
void insertNode(ListNode head, int pos, int value) {
ListNode p = head;
int i = 0;
while (p != NULL && i < pos>
p = p->next;
i++;
if (p == NULL) {
printf("插入位置无效
);
return;
ListNode newNode = (ListNode)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = p->next;
p->next = newNode;
指导教师评语:
(此处留空)
成绩:
(此处留空)