c语言数据结构 单循环链表设计(完整代码)

单链表的增删查改代码:

1.创建结构体

// 结构体类型的创建
struct node
{int data;          // 数据域struct node *next; // 指针域
};

2.创建节点,节点的存储在malloc申请的空间内,也就是堆空间。

// 创建节点
struct node *create_node(int data)
{struct node *xnew = malloc(sizeof(struct node));if (xnew == NULL){perror("创建失败\n");}xnew->data = data;xnew->next = xnew;return xnew; // 返回xnew的地址
}

3.头插入节点,先让节点指向头,在让头节点指向新节点

// 头插入节点
void top(struct node *head, struct node *xnew)
{xnew->next = head->next;head->next = xnew;
}

4.尾插法,定义一个游走的节点,让该节点偏移到单链表的最后一个节点,再让该游走节点指向新节点,并且使新的节点指向头节点,实现单链表循环

// 尾插法
void wei(struct node *head, struct node *xnew)
{struct node *pos = head->next;// 让节点走起来 不断地走到下一位while (pos->next != head){pos = pos->next;}pos->next = xnew;xnew->next = head;
}

5.显示节点数据函数,同样定义一个游走的节点,先让其指向头节点的下一位,再让其走过单链表的每个一个节点,并答应出来

// 显示节点
void show_node(struct node *head)
{struct node *pos = head->next;while (pos != head){printf("%d ", pos->data);pos = pos->next;}printf("\n");
}

6.删除节点,我们同意定义一个游走的节点指针,让该节点走过单链表并逐一判断是否是我们要删除的节点,如果是则退出来,并用一个新的节点指针p来指向该地址,在设计游走节点的时候使用pos->next-data,这样可以让节点始终停留在节点p的上一位,并让该指针pos指向节点p的下一位,然后让节点p指向NULL,并释放堆内存

// 删除节点
void delete_node(struct node *head, int data)
{struct node *pos = head->next;while (pos->next->data != data){pos = pos->next;}struct node *p = pos->next;pos->next = p->next;p->next = NULL;free(p);
}

7.修改节点,定义一个游走的节点指针,让该节点游走单链表,如果找到了我们要的数据,那就赋值进行修改。

// 修改节点
void modify_node(struct node *head, int data, int new_data)
{struct node *pos = head->next;while(pos->data != data){pos = pos->next;}pos->data = new_data;}

完整代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 结构体类型的创建
struct node
{int data;          // 数据域struct node *next; // 指针域
};// 创建节点
struct node *create_node(int data)
{struct node *xnew = malloc(sizeof(struct node));if (xnew == NULL){perror("创建失败\n");}xnew->data = data;xnew->next = xnew;return xnew; // 返回xnew的地址
}
// 头插入节点
void top(struct node *head, struct node *xnew)
{xnew->next = head->next;head->next = xnew;
}
// 尾插法
void wei(struct node *head, struct node *xnew)
{struct node *pos = head->next;// 让节点走起来 不断地走到下一位while (pos->next != head){pos = pos->next;}pos->next = xnew;xnew->next = head;
}
// 显示节点
void show_node(struct node *head)
{struct node *pos = head->next;while (pos != head){printf("%d ", pos->data);pos = pos->next;}printf("\n");
}
// 删除节点
void delete_node(struct node *head, int data)
{struct node *pos = head->next;while (pos->next->data != data){pos = pos->next;}struct node *p = pos->next;pos->next = p->next;p->next = NULL;free(p);
}
// 修改节点
void modify_node(struct node *head, int data, int new_data)
{struct node *pos = head->next;while(pos->data != data){pos = pos->next;}pos->data = new_data;}
//主函数
int main()
{struct node *head = create_node(0);for (int i = 1; i < 10; i++){top(head, create_node(i));}show_node(head);delete_node(head, 3);show_node(head);modify_node(head,2,999);show_node(head);
}

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

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

相关文章

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…

Pytest基础使用

概述 Pytest是Python里的一个强大的测试框架,灵活易用,可以进行功能,自动化测试使用,可以与Requests,Selenium等进行结合使用,同时可以生成Html的报告。 一、Pytest的基本使用 在未指定Pytest的配置文件时,会对以下文件进行执行: test_*.py,如:test_1.py*_test.py…

服务的拆分数据的迁移

参考&#xff1a; 数据迁移调研

【动态规划篇】91. 解码方法

91. 解码方法 题目链接&#xff1a; 91. 解码方法 题目叙述&#xff1a; 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而&#xff0c;在解码已编码的消息时&#xff0c;你…

使用【docker】+【shell】脚本半自动化部署微服务项目

一.前言 以下是一个基于 ‌Docker Shell脚本‌ 的半自动化部署方案&#xff0c;包含镜像构建、容器管理、网络配置和日志监控等核心功能&#xff0c;适用于大多数Web应用或微服务项目。 二‌.目录结构 三.脚本代码实现 1.‌Shell脚本实现 (deploy.sh) #!/bin/bash# 设置颜…

每天一道算法题-两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

win10搭建opengl环境搭建并测试--输出立方体球体和碗型并在球体上贴图

参照本文档可以完成环境搭建和测试&#xff0c;如果想要快速完成环境的搭建可以获取本人的工程&#xff0c;包括所用到的工具链和测试工程源码获取&#xff08;非免费介意务下载&#xff09;&#xff1a;链接: https://pan.baidu.com/s/1H2ejbT7kLM9ore5MqyomgA 提取码: 8s1b …

CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)

摘要 问题一&#xff1a;自模态注意力优化单元和跨模态加权优化单元什么意思&#xff1f; 1 优化中间件结构的作用 位置&#xff1a;位于编码器和解码器之间 输入&#xff1a;编码器提取的RGB特征&#xff0c;深度特征以及RGB-D特征。 输出&#xff1a;经过优化的RGB&…

LS-NET-004-简单二层环路解决(华为锐捷思科)

LS-NET-004-简单二层环路解决&#xff08;华为锐捷思科&#xff09; 以下是为您准备的二层环路示意图及解决方案&#xff0c;包含四大厂商配置对比&#xff1a; 一、Mermaid 二层环路示意图 graph TD SW1 -->|Gi0/1| SW2 SW2 -->|Gi0/2| SW3 SW3 -->|Gi0/3| SW1 SW1…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

火绒终端安全管理系统V2.0——行为管理(软件禁用+违规外联)

火绒终端安全管理系统V2.0&#xff1a;行为管理策略分为软件禁用和违规外联两部分&#xff0c;能够管理终端用户软件的使用&#xff0c;以及终端用户违规连接外部网络的问题。 l 软件禁用 软件禁用策略可以选择软件名单的属性、添加软件名单以及设置发现终端使用禁用软件时的…

FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍

FastJson&#xff1a;JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍 FastJson是阿里巴巴开发的一款专门用于Java开发的包&#xff0c;实现Json对象&#xff0c;JavaBean对&#xff0c;Json字符串之间的转换。 文章目录 FastJson&#xff1a;JSON JSONObje…

DEFI币生态重构加速,XBIT去中心化交易所引领DEX安全新范式

2025年3月18日&#xff0c;全球加密市场在监管与技术共振下迎来结构性变革。去中心化金融&#xff08;DeFi&#xff09;代币DEFI币因跨链流动性协议升级引发社区热议&#xff0c;而币应XBIT去中心化交易所&#xff08;以下简称XBIT&#xff09;凭借其链上透明验证机制、无需下载…

解析漏洞总结

首先说下为什么要写着篇文章&#xff0c;之前学习倒是学过&#xff0c;学完就忘啊&#xff0c;tmd iis 5.x/6.0 这个版本有两种解析姿势  一.两种解析漏洞 1.目录解析 2./xxx.asp/xx.jpg 简单说一下是什么意思&#xff0c;这里是先在他服务器跟目录创建一个名为 xxx.…

前端小食堂 | Day18 - 身份认证の八卦阵

&#x1f510; 今日秘术&#xff1a;JWT/OAuth2 攻防奥义 1. JWT 安全の六合阵法 // &#x1f6ab; 危险操作&#xff1a;未验证签名 const decodeUnsafe (token) > JSON.parse(atob(token.split(.)[1])); // ✅ 安全姿势一&#xff1a;严格签名验证 import jwt fro…

将bin文件烧录到STM32

将bin文件烧录到STM32 CoFlash下载生成hex文件hex2bin使用下载bin到单片机 CoFlash下载 选择需要安装的目录 在Config中可以选择目标芯片的类型 我演示的是 stm32f103c8t6 最小系统板 Adapter&#xff1a;烧录器类型 Max Clock&#xff1a;下载速度 Por&#xff1a;接口类型&am…

【Embedded World 2025:边缘 AI、存储革新与 1X nm 工艺重塑嵌入式未来】

Embedded World 2025于3月11-13日在德国纽伦堡举办&#xff0c;作为全球嵌入式系统领域顶级盛会&#xff0c;汇聚超千家展商与3万专业观众&#xff0c;聚焦嵌入式智能、安全管理及行业解决方案。展会呈现边缘AI、低功耗MCU、5G RedCap、新型存储及车规级技术等前沿方向&#xf…

3.19刷题

P6443 [COCI 2010/2011 #1] TIMSKO - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n,m,k,maxp0;cin>>m>>n>>k;for(int i0;i<n;i){//男生参加人数if(k3*i<mn&&2*i<m) maxpi;}cout<<maxp;return 0; }P645…

Android NDK --- JNI从入门到基础的全面掌握 (上)

引言 先问 jni是什么&#xff1f; jni和ndk 的关系&#xff1f; 答&#xff1a; java调用 C、C 的代码。 两者一个是调用&#xff0c;一个是用c 、c 写 。 这两个问题问出来似乎知道又好像不知道。 正文 jni 概述 定义&#xff1a;java Native Interface 即 java本地接口 …

爬虫 crawler 入门爬取不设防网页 并实现无限增生

基础版本 爬取网页后直接将前端html代码不加处理的输出 # pip3 install requests import requests# request the target URL def crawler():response requests.get("https://www.scrapingcourse.com/ecommerce/")response.raise_for_status()print(response.text)…