带头节点的单链表练习(写加注释花了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);//撤销单链表

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于XML配置bean(一)

文章目录 1.获取bean的两种方式1.通过id获取bean&#xff08;前面用过&#xff09;2.通过类型获取bean&#xff08;单例时使用&#xff09;1.案例2.代码1.beans.xml2.SpringBeanTest.java3.结果 3.注意事项 2.三种基本依赖注入方式1.通过属性配置bean&#xff08;前面用过&…

DDoS攻击趋势分析及防御建议:网络安全新挑战与应对策略

在数字化日益普及的今天&#xff0c;网络安全问题日益凸显。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击以其巨大的破坏力和难以防范的特性&#xff0c;发起简单、效果显著、难以追踪等特点&#xff0c;因此被黑客广泛使用&#xff0c;已经成为网络安全领…

Python(九十四)变量的作用域

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

CSS 设置空格原样显示 white-space:pre-wrap;

CSS 设置空格原样显示 问题描述 html 渲染内容时&#xff0c;对于 空格、回车、Tab 键的 默认处理方式是 &#xff1a; 无论存在多少个连续的空格&#xff0c;都只会保留一个。 结论 由于以上的特性&#xff0c;导致了我们无法直接渲染出原格式的文本。pre 标签 了解一下 &…

element-plus中的图标和文字水平对齐

<span><el-icon size"14px"><Delete /></el-icon> <span>删除</span> </span>解决方法&#xff1a;加上vertical-align: middle样式就可以了 <span><el-icon size"14px" style"vertical-align: …

【STM32CubeIDE 1.15.0】汉化包带路径配置过程

一、IDE软件下载 二、汉化版包路径 三、IDE软件板载汉化包 一、IDE软件下载 ST官网IDE下载链接 二、汉化版包路径 https://mirrors.ustc.edu.cn/eclipse/technology/babel/update-site/ 找不到就到.cn后面一级一级进 三、IDE软件板载汉化包 https://mirrors.ustc.edu…

数据库工具解析之 OceanBase 数据库导出工具

背景 大多数的数据库都配备了自己研发的导入导出工具&#xff0c;对于不同的使用者来说&#xff0c;这些工具能够发挥不一样的作用。例如&#xff1a;DBA可以使用导数工具进行逻辑备份恢复&#xff0c;开发者可以使用导数工具完成系统间的数据交换。这篇文章主要是为OceanBase…

​波士顿动力发布全新人形机器人:Atlas

4月16日&#xff0c;波士顿动力&#xff08;Boston Dynamics&#xff09;发布了《再见&#xff0c;液压Atlas》视频&#xff0c;正式宣告其研发的液压驱动双足人形机器人Atlas退役。 在视频的结尾&#xff0c;Atlas深深鞠躬&#xff0c;之后还有一句话“直到我们再次相遇&…

第十六届“华中杯”大学生数学建模挑战赛A题思路

A题 太阳能路灯光伏板的朝向设计问题 太阳能路灯由太阳能电池板组件部分(包括支架)、LED 灯头、控制箱(包含控制器、蓄电池)、市电辅助器和灯杆几部分构成。太阳能电池板通过支架固定在灯杆上端。太阳能电池板也叫光伏板, 它利用光伏效应接收太阳辐射能并转化为电能输出,…

B1098 岩洞施工

solution #include<iostream> using namespace std; int main(){int n, x, top 1000, down 0;//管道水平放入>顶部最低点和底部最高点之间的距离就是能够承担的最大宽度scanf("%d", &n);for(int i 0; i < n; i){scanf("%d", &x);i…

3D模型处理的多进程并行【Python】

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息&#xff0c;并分享我发现的一些小技巧&#xff0c;例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生…

SHELL编程----Nginx日志分析2-统计某个时间段的IP访问量

描述 假设 Nginx 的日志存储在 nowcoder.txt 里&#xff0c;内容如下&#xff1a; 192.168.1.20 - - [21/Apr/2020:14:27:49 0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 F…

AI论文速读 | 2024[VLDB]TFB:全面与公正的时间序列预测方法基准测试研究

论文标题&#xff1a;TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 作者&#xff1a;Xiangfei Qiu ; Jilin Hu&#xff08;胡吉林&#xff09; ; Lekui Zhou ; Xingjian Wu ; Junyang Du ; Buang Zhang ; Chenjuan Guo&#xff08;郭…

【贪心算法经典应用】哈夫曼编码原理与算法详解 python

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

【软件】如何下载谷歌安装包?

1、访问谷歌浏览器官网&#xff1a;https://www.google.cn/chrome/index.html 2、在浏览器地址栏最后添加?standalone1&#xff0c;按回车&#xff0c;重新加载页面。页面和之前的一样&#xff0c;点击下载 完整地址&#xff1a;https://www.google.cn/chrome/index.html?…

2024年第十六届“华中杯”(A题)大学生数学建模挑战赛| 物理建模,多目标优化| 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看华中杯 (A题&#xff09;&#xff01; CS团队倾…

c++学习笔记1,c的扩充

目录 命名空间与c标准库的使用 非面向对象方面的扩充 输入输出方面 引用 结构体、枚举、联合 重载函数 默认参数的函数 作用域运算符 动态内存分配 命名空间与c标准库的使用 为了将c标准库兼容进入std命名空间&#xff0c;c使用c库时要在原名前加c来和c标准库加以区分…

Java面试八股之Iterator和ListIterator的区别是什么

Iterator和ListIterator的区别是什么 这道题也是考查我们对迭代器相关的接口的了解程度&#xff0c;从代码中我们可以看出后者是前者的子接口&#xff0c;在此基础上做了一些增强&#xff0c;并且只用于List集合类型。 定义与基本概念 Iterator&#xff1a; 定义&#xff1a…

虚拟人多元化互动玩法,助力各领域发布会/直播活动“玩转”营销新高度

在数字新科技推动下&#xff0c;各地方文旅、品牌纷纷在发布会、展会、行业峰会论坛、推广直播等场景中&#xff0c;融入虚拟人IP&#xff0c;将虚拟人IP作为虚拟主播、虚拟主持人、虚拟嘉宾、虚拟推荐官、AI数字迎宾员、AI播报员等多重身份&#xff0c;与观众实时互动交流&…

A24 STM32_HAL库函数 之 I2s通用驱动 -- A-- 所有函数的介绍及使用

A24 STM32_HAL库函数 之 I2s通用驱动 -- A-- 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_I2S_Init1.2 HAL_I2S_DeInit1.3 HAL_I2S_MspInit1.4 HAL_I2S_MspDeInit1.5 HAL_I2S_Transmit1.6 HAL_I2S_Receive1.7 HAL_I2S_Transmit_IT1.8 HAL_I2S_Receive_IT1.9 HAL_I2S_Transmi…