带头节点的单链表练习(写加注释花了5小时,已废)

2024-04-18 23:36

本文主要是介绍带头节点的单链表练习(写加注释花了5小时,已废),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.test.c

2.LinList.c

3.LinList.h


1.test.c

单链表的操作

#include "LinList.h"
//head->a0(头节点)->a1->...->ai->...->an
int main()
{SLNode* head;int i;DataType x, y;ListInitiate(&head);//初始化链表for (i = 1; i < 11; i++){ListInsert(head, i, (DataType)i);//在第i个节点前插入i,i>=1}ListDelete(head, 4, &x);//删除第4个节点for (i = 1; i <= ListLength(head); i++)//ListLength(head)当前元素个数{ListGet(head, i, &y);//取元素printf("%d ", y);}Destroy(&head);//撤销单链表return 0;
}

2.LinList.c

单链表函数具体实现

#include "LinList.h"void ListInitiate(SLNode** head)//初始化链表,head的值改变了,所以要传head地址
{*head = (SLNode*)malloc(sizeof(SLNode));assert(*head);(*head)->next = NULL;
}bool ListInsert(SLNode* head, int i, DataType x)//在第i个节点前插入x,i>=1
{SLNode* L = head;int j = 0;//当前L指向的第j个节点while (L->next != NULL&&j<i-1)//循环结束时L指向第i-1个节点{//当L->next = NULL时,L已是最后一个节点,//若j = i-1,在NULL前插入节点,若j != i-1,第i个节点不存在L = L->next;j++;}if (j != i - 1){printf("插入元素的位置参数出错!\n");return false;}SLNode* s = (SLNode*)malloc(sizeof(SLNode));assert(s);s->data = x;s->next = L->next;L->next = s;return true;
}DataType ListDelete(SLNode* head, int i, DataType* x)//删除第i个节点
{SLNode* L = head;int j = 0;//当前L指向的第j个节点while (L->next != NULL&&L->next->next != NULL && j < i-1)//循环结束时L指向第i-1个节点{//L->next->next = NULL时,//若j = i-1,删除最后一个节点,若j != i-1,要删除的节点不存在L = L->next;j++;}if ((j != i - 1)||(L->next == NULL))//当空列表时,return false;{printf("要删除的第%d个节点不存在\n",i);return false;}*x = L->next->data;SLNode* s = L->next;L->next = L->next->next;free(s);s = NULL;return *x;
}int ListLength(SLNode* head)//ListLength(head)当前元素个数
{if (head == NULL){return 0;}SLNode* p = head;//习惯,防止后面找不到头节点int count = 0;while (p->next != NULL){p = p->next;count++;}return count;
}bool ListGet(SLNode* head, int i, DataType* x)//取元素
{SLNode* p = head;//习惯,防止后面找不到头节点if (i<1 || i>ListLength(head)){printf("取元素的位置参数错误!\n");return false;}while (i--){p = p->next;}*x = p->data;return true;
}bool Destroy(SLNode** head)//撤销单链表,head的值改变了,所以要传head地址
{int i = ListLength(*head) + 1;//头节点也要撤销SLNode* p = *head;SLNode* p1 = NULL;while (i--){p1 = p->next;free(p);p = p1;}*head = NULL;return true;
}

3.LinList.h

引入头文件,#deifne定义,typedef定义,函数声明

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>typedef int DataType;
typedef struct Node
{DataType data;struct Node* next;
}SLNode;void ListInitiate(SLNode** head);//初始化链表
bool ListInsert(SLNode* head, int i, DataType x);//在第i个节点前插入x,i>=1
DataType ListDelete(SLNode* head, int i, DataType* x);//删除第i个节点
int ListLength(SLNode* head);//ListLength(head)当前元素个数
bool ListGet(SLNode* head, int i, DataType* x);//取元素
bool Destroy(SLNode** head);//撤销单链表

这篇关于带头节点的单链表练习(写加注释花了5小时,已废)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/916079

相关文章

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*