C语言基础(二十)

news2024/9/21 14:30:43

链表是一种常见的数据结构,通常用来存储一系列元素,每个元素由一个节点来表示。在链表中,每个节点包含两部分:数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的,而是通过指针连接起来。链表可以分为单向链表和双向链表两种类型。在单向链表中,每个节点只有一个指向下一个节点的指针;而在双向链表中,每个节点有一个指向前一个节点的指针和一个指向后一个节点的指针。

测试代码1:

#include "date.h"
#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
typedef struct ListNode {
    int val;
    struct ListNode* next;
} ListNode;

// 创建新节点
ListNode* createNode(int val) {
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    if (newNode == NULL) {
        printf("Memory allocation failed!n");
        exit(1);
    }
    newNode->val = val;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾添加节点
void appendNode(ListNode** head, int val) {
    ListNode* newNode = createNode(val);
    if (*head == NULL) {
        *head = newNode;
    } else {
        ListNode* temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}
// 打印链表节点地址的函数  
void printListAddress(ListNode* head) {  
    ListNode* current = head;  
  
    while (current != NULL) {  
        printf("Node value: %d, Address: %p\n", current->val, (void*)current);  
        current = current->next;  
    }  
}  
  
// 遍历链表并打印每个节点的值
void printList(ListNode* head) {
    ListNode* temp = head;
    while (temp != NULL) {
        printf("%d -> ", temp->val);
        temp = temp->next;
    }
    printf("NULL\n");
}

// 主函数
int main() {
	
	int time = getTime();
    ListNode* head = NULL; // 初始化链表为空

    // 向链表添加节点
    appendNode(&head, 1);
    appendNode(&head, 5);
    appendNode(&head, 0);
    appendNode(&head, 9);
    appendNode(&head, 3);
    appendNode(&head, 8);
    // 遍历并打印链表
    printList(head);
    // 打印链表节点地址
    printListAddress(head);
   
    // 释放链表内存
    ListNode* current = head;
    ListNode* next;
    while (current != NULL) {
        next = current->next;
        free(current);
        current = next;
    }
    head = NULL;  // 将头指针置为空,防止野指针访问
    
    return 0;
}

运行结果如下:

测试代码2:

#include "date.h"
#include <stdio.h>  
#include <stdlib.h>  
  
// 定义链表节点结构体  
typedef struct ListNode {  
    int val;            // 链表节点值 
    struct ListNode* next; // 指针域,指向下一个节点  
} ListNode;  
  
// 创建新节点  
ListNode* createNode(int val) {  
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));  
    if (newNode == NULL) {  
        printf("Memory allocation failed!\n");  
        exit(1); // 终止程序  
    }  
    newNode->val = val;  
    newNode->next = NULL;  
    return newNode;  
}  
  
// 遍历链表并打印信息  
void printList(ListNode* head) {  
    ListNode* current = head;  
    while (current != NULL) {  
        printf("Node Address: %p, Value: %d, Next Node Address: %p\n",  
               (void*)current, current->val, (void*)(current->next));  
        current = current->next;  
    }  
}  
  
// 主函数  
int main() { 
    int time = getTime(); 
    // 创建链表节点  
    // 创建链表节点  
    ListNode* head = createNode(1); // 头结点  
    ListNode* current = head; // 用于遍历链表的指针  
  
    // 将剩余节点添加到链表中  
    current->next = createNode(2);  
    current = current->next;  
    current->next = createNode(3);  
    current = current->next;  
    current->next = createNode(4);  
    current = current->next;  
    current->next = createNode(5);  
  
  
    // 打印链表信息  
    printf("Linked List:\n");  
    printList(head);  
  
    // 释放链表内存
    ListNode* temp;  
    while (head != NULL) {  
        temp = head;  
        head = head->next;  
        free(temp);  
    }  
    head = NULL;  // 将头指针置为空,防止野指针访问
    return 0;  
}

运行结果如下:

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

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

相关文章

可拖拽表单设计器都有哪些突出特点?

为了提高效率、降低开发成本&#xff0c;利用低代码技术平台的优势特点可以实现这一目标。究竟什么是低代码技术平台&#xff1f;都有哪些值得夸耀的特点和优势&#xff1f;今天&#xff0c;我们就带着这些问题&#xff0c;一起来了解低代码技术平台、可拖拽表单设计器的多个优…

香港站群服务器优势

香港站群服务器因其独特的地理位置和网络连接优势&#xff0c;在SEO优化、网站群管理和网络营销等方面受到广泛关注。其优势主要体现在以下几个方面&#xff0c;rak小编为您整理发布。 地理位置优越 连接亚洲国际市场&#xff1a;香港作为亚太地区的重要经济中心&#xff0c;具…

华为2024年秋招-结构与材料工程师-结构方向-机试题(四套)(每套四十题)

华为2024年招聘-结构与材料工程师-结构方向-机试题&#xff08;四套&#xff09;&#xff08;每套四十题&#xff09; 岗位——结构与材料工程师 岗位意向——结构 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff…

详细了解如何设计和实现一个SSO系统?

一、SSO系统有什么好处&#xff1f; 1、用户角度&#xff1a;一次登录多次使用&#xff0c;无需记录多套用户名和密码&#xff0c;省事省心。 2、系统管理员角度&#xff1a;管理员只需要维护好一个统一的账号中心就可以了&#xff0c;方便 3、新系统开发角度&#xff1a;新系统…

(二十六)STL vector容器(动态数组)

动态数组vector是标准模版库&#xff08;STL, Stardard Template Library&#xff09;中的模版&#xff0c;它有着节省空间和使用方便的优势&#xff0c;我们用一个形象的例子来说明&#xff1a; 开学了&#xff0c;有40个学生来报名&#xff0c;想要存储每个同学的姓名&#…

数字验证:一文弄懂UVM的factory机制

如果我们用SystemVerilog构建验证平台&#xff0c;构建好了之后&#xff0c;想改变平台中的某个组件&#xff0c;例如将driver改成driver_new&#xff0c;我们需要重新定义一下driver_new&#xff0c;当然也可以直接从driver继承。但是我们还需要在driver对象例化的地方将drive…

PHP同城派送多区域运营配送小程序源码

&#x1f69a;&#x1f4a8;「同城派送多区域运营小程序」——让每一份需求快速触达&#xff01;&#x1f308;&#x1f680; &#x1f525; 开篇燃爆&#xff1a;同城生活新风尚&#xff0c;一键速达不是梦&#xff01; Hey小伙伴们&#xff0c;你还在为找不到合适的同城服务…

WEB渗透Win提权篇-PowerUp

提权工具合集包&#xff08;免费分享&#xff09;&#xff1a; 夸克网盘分享 往期文章 WEB渗透Win提权篇-提权工具合集-CSDN博客 WEB渗透Win提权篇-RDP&Firewall-CSDN博客 WEB渗透Win提权篇-MSSQL-CSDN博客 WEB渗透Win提权篇-MYSQL-udf-CSDN博客 WEB渗透Win提权篇-Acc…

02-03:原理图与PCB交互以及快速模块化

1原理图与PCB交互 ①在PCB界面&#xff0c;点击工具, 勾选交叉选择模式 ②过滤器只选择元器件 2.按页快速模块化 配合F9快捷键

运放阻抗和噪声(同相放大器的输入/输出阻抗 + 电压跟随器阻抗 + 噪声 +信噪比)

2024-8-27&#xff0c;星期一&#xff0c;21:03&#xff0c;天气&#xff1a;阴雨&#xff0c;心情&#xff1a;晴。培训终于结束啦&#xff0c;开始轮岗了&#xff0c;看了两天PPT&#xff0c;加油加油&#xff0c;继续学习。 今天继续学习第六章运算放大器&#xff0c;主要学…

修改SpringBoot项目中MyBatis的mapper.xml文件的位置

由于MyBatis默认的mapper.xml的扫描位置是resource文件下&#xff0c;但是不可能整个项目的mapper.xml文件都放在resource下&#xff0c;如果文件较少还行&#xff0c;但是如果文件比较多&#xff0c;虽然有插件可以点击跳转&#xff0c;但是每次都这样也太麻烦了&#xff0c;所…

浙商之源——龙游商帮丨龙游商帮的具象文化符号之建筑篇

编撰者&#xff1a;袁勇 [三门源村] 三门源村位于浙江省龙游县石佛乡北部&#xff0c;距县城约28公里。因为进出村庄要经过三道屏障&#xff0c;且穿村而过的溪水又为塔石溪的源头&#xff0c;故称三门源。三门源群山环绕&#xff0c;仅有南面与金衢盆地相接&#xff0c;一泓溪…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发&#xff1a;指令&#xff08;字符串&#xff09;订阅功能 指令&#xff08;字符串&#xff09;订阅功能代码测试 指令&#xff08;字符串&#xff09;订阅功能 为了通过键盘触发mavros 的不同功能&#xff0c;需要实现一个订阅字符串的功能 该…

【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现

Socket套接字 现有计算机网络体系结构有三种划分形式&#xff1a;OSI七层协议、TCP/IP四层协议结构、五层协议结构。具体介绍参考&#xff1a;【嵌入式开发之网络编程】网络分层、OSI七层模型、TCP/IP及五层体系结构 网络的体系结构 (Network Architecture) 是计算机网络的各…

MySQL索引(二)

MySQL索引(二) 文章目录 MySQL索引(二)MySQL有哪些索引&#xff1f;MySQL的主键是聚簇索引吗&#xff1f;聚簇索引和非聚簇索引的区别什么是覆盖索引什么是回表主键问题 外键约束什么是外键什么是外键约束外键带来的问题 联合索引最左匹配原则如何建立联合索引索引下推 学习地址…

适合 Spring Boot 3.0x的Redis 分布式锁

Spring Boot 中的 Redis 分布式锁 在分布式系统中&#xff0c;多个进程同时访问共享资源时&#xff0c;很容易出现并发问题。为了避免这些问题&#xff0c;我们可以使用分布式锁来保证共享资源的独占性。Redis 是一款非常流行的分布式缓存&#xff0c;它也提供了分布式锁的功能…

Ai+若依(页面调整--去除若依的各种痕迹,采用自己的):【07篇】

页面调整 如果使用若依框架项目做为脚手架,那么我们肯定需要在页面显示中,符合自己公司或者项目的标识才行,需要更换的地方很多,我们依次来解决它 浏览器标签页logo标识、标题 系统页面中的logo标识、标题 去除源码地址 & 文档地址 主题风格和菜单图标 登录名称及背景…

Java GIS开发工具包-GeoTools浅谈

目录 前言 一、关于Geotools 1、GeoTools简介 2、官方仓库 3、使用Geotools的一些项目 二、Geotools架构 1、功能架构 2、Geotools支持的数据格式 三、Geotools科研热点 1、知网信息 2、百度学术 四、总结 前言 地理信息&#xff0c;智联万物。地理信息在我们的生活中…

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数&#xff0c;用于对图像进行均值模糊处理。这个函数通…

【Mysql】通过Keepalived搭建mysql双主高可用集群

一、环境信息 主机名ip操作系统mysql版本VIP&#xff08;虚拟ip&#xff09;hadoop01192.168.10.200centos7_x865.7192.168.10.253hadoop03192.168.10.202centos7_x865.7 二、mysql集群搭建 两台节点&#xff0c;如果未部署mysql服务&#xff0c;部署文档请看【Mysql】mysql…