C语言——静态链表和动态链表

news2024/9/20 10:56:24

一、静态链表

创建链表中的一个节点,用struct来创建,其中包含两个部分:数据域和指针域。

创建三个结点,node1、node2、node3,分别赋值,初始化为NULL。接着就是将这些节点进行连接,组成链表。连接是通过指针来进行的。头节点是node1,node1的指针指向node2,也就是取node2的地址,以此类推。

随后,再定义一个可移动的指针,初始化指向头节点。 节点数据的遍历就是通过pCurrent = pCurrent->next;这个语句来移动的。一直到最后一个节点,指向为NULL时才结束遍历。并且,每次遍历都进行打印。

代码如下

#include <stdio.h>
struct LinkNode
{
    int data;
    struct LinkNode *next;
};
int main()
{

    struct LinkNode node1 = { 10,NULL };
    struct LinkNode node2 = { 20,NULL };
    struct LinkNode node3 = { 30,NULL };

    node1.next = &node2;
    node2.next = &node3;

    struct LinkNode* pCurrent = &node1;
    while (pCurrent != NULL)
    {
        printf("%d\n", pCurrent->data);
        pCurrent = pCurrent->next;
    }

    return 0;
}

结果

二、动态链表

动态链表的开辟需要借助malloc函数来实现

首先还是创建节点,一个节点中包括两部分,一部分是数据域,一部分是指针域。

初始化链表。为了能够对实现循环输入,我们利用while(1)来实现死循环

struct LinkNode* pRear = header;同样创建了一个指针,初始化指向头节点

每次创建新的节点执行这句话:struct LinkNode* newnode = malloc(sizeof(struct LinkNode));

记住,每次创建的只是节点,节点的连接需要指针,节点相连就是链表。

pRear->next = newnode;节点的相互连接就是通过这种方式来实现的

pRear = newnode;并且这个可移动的指针会不断的跟新位置。

代码如下:

#include <stdio.h>
#include <stdlib.h>
struct LinkNode
{
    int data;
    struct LinkNode* next;
};
struct LinkNode* Init_LinkList()
{
    struct LinkNode* header = malloc(sizeof(struct LinkNode));
    header->next = NULL;
    header->data = -1;
    struct LinkNode* pRear = header;
    int val = -1;
    while (1)
    {
        printf("请输入要插入的数据:\n");
        scanf_s("%d", &val);
        if (val == -1)
        {
            break;
        }
        struct LinkNode* newnode = malloc(sizeof(struct LinkNode));
        newnode->data = val;
        newnode->next = NULL;

        pRear->next = newnode;

        pRear = newnode;
    }
    return header;
}
void for_each_linklist(struct LinkNode* header)
{
    struct LinkNode* pCurrent = header->next;

    while (pCurrent != NULL)
    {
        printf("%d ", pCurrent->data);
        pCurrent = pCurrent->next;
    }
}
int main()
{
    struct LinkNode* header = Init_LinkList();
    for_each_linklist(header);
    return 0;
}

结果

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

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

相关文章

干货分享|分享一款完全免费的PDF工具箱 PDF24

PDF 24介绍: PDF 24是一个全面的PDF工具包&#xff0c;旨在简化和优化PDF文件的处理和管理。它提供了广泛的功能和工具&#xff0c;包括创建、编辑、转换、合并、拆分、加密、解密、压缩、优化、签名、水印等。 主要特点&#xff1a;完全免费&#xff0c;轻量便捷&#xff0c;…

现货黄金避险属性是怎么来的?

众所周知&#xff0c;黄金是一种可以规避风险的品种&#xff0c;当地缘局势冲突、经济下行&#xff0c;甚至是出现军事摩擦等等情况&#xff0c;黄金都会受到避险情绪支撑而上涨。典型的例子&#xff0c;我们可以看俄乌冲突&#xff0c;还有中东的地缘局势等&#xff0c;这些事…

TS 常用类型

我们经常说TypeScript是JavaScript的一个超级 TypeScript 常用类型 TypeScript 是 JS 的超集&#xff0c;TS 提供了 JS 的所有功能&#xff0c;并且额外的增加了&#xff1a;类型系统 所有的 JS 代码都是 TS 代码 JS 有类型&#xff08;比如&#xff0c;number/string 等&…

OPENAIGC开发者大赛企业组AI黑马奖 | 包你面-AI面试助手

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给您…

Linux基础知识之用户和组

Linux基础知识之用户和组 01 1.什么是用户 用户账户为不同人员和运行的程序之间提供安全边界 用户使用 username 进行标识&#xff0c;操作系统为其分配唯一标识号&#xff08;UID&#xff09;&#xff0c;用户可能含有密码 系统中的每个程序都以一个特定用户运行&#xff…

上/下三角矩阵的压缩存储

1.给自己出题&#xff1a;自己动手创造&#xff0c;画一个5行5列的下三角矩阵 2.画图&#xff1a;按“行优先”压缩存储上述矩阵&#xff0c;画出一维数组的样子 3.简答&#xff1a;写出元素 i,j 与 数组下标之间的对应关系 4.画图&#xff1a;按“列优先”压缩存储上述矩阵…

【卷起来】VUE3.0教程-06-组件详解

各位看官&#xff0c;点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的…

ssrf漏洞利用+CTF实例

引发ssrf漏洞的几个函数 file_get_contents() 把整个文件读入一个字符串中&#xff0c;获取本地或者远程文件内容fsockopen() 获得套接字信息curl_exec() 执行一个curl会话&#xff0c;由curl_init()初始化一个新的会话&#xff0c;返回一个curl句柄fopen() 打开文件或者URLre…

【数据结构与算法 | 灵神题单 | 插入链表篇】力扣2807, LCR 029, 147

1. 力扣2807&#xff1a;在链表中插入最大公约数 1.1 题目&#xff1a; 你一个链表的头 head &#xff0c;每个结点包含一个整数值。 在相邻结点之间&#xff0c;请你插入一个新的结点&#xff0c;结点值为这两个相邻结点值的 最大公约数 。 请你返回插入之后的链表。 两个…

前端开发macbook——NVM环境配置以及git配置流程

本文主要针对前端使用mac电脑时需要安装nvm对应环境&#xff0c;一文解决环境安装问题 主要步骤如下&#xff1a; 安装homebrew 安装nvm 安装git 第一步&#xff1a;安装homebrew /bin/bash -c "$(curl -fsSL https:/raw.githubusercontent.com/Homebrew/install/HE…

C++基础(七):类和对象之深浅拷贝问题(中-3)

在C编程中&#xff0c;拷贝构造函数是对象复制的核心机制&#xff0c;尤其是在处理对象间的值传递时。当一个对象通过拷贝另一个对象来初始化时&#xff0c;浅拷贝只是简单地复制对象的成员变量的值。如果对象包含指针成员&#xff0c;浅拷贝只复制指针地址&#xff0c;这可能会…

基于matlab交通标志识别系统用的APP designer设计的gui界面 交互原理:bp神经网络-训练好图像处理有灰度化-二值化-颜色区域定位识别

基于MATLAB的交通标志识别系统是一个实用的工具&#xff0c;用于识别道路交通标志。该系统结合了图像处理技术和BP神经网络模型&#xff0c;可以在给定的图像中定位并识别交通标志。通过使用MATLAB的App Designer工具&#xff0c;系统还提供了一个交互式的图形用户界面&#xf…

【idea-安装】

JetBrains官⽹ : https://www.jetbrains.com/ 1.下载idea安装包&#xff0c;下载旧一些的版本&#xff0c;避免新版本的不稳定。 下载下来的安装包是exe格式的&#xff0c;直接点击运行。 点击Next 2.选择要下载的位置&#xff0c;点击下一步。 3.选择⽣成快捷⽅式和建⽴⽂件…

从头开始学MyBatis—01搭建基础框架

首先对mybatis进行一个简单的介绍&#xff0c;然后从最基础的准备工作开始搭建一个mybatis的开发 环境&#xff0c;最后通过简单的增删改查来熟悉配置文件和映射文件的编写。 目录 1.Mybaits简介 2.开发环境和准备工作 2.1开发环境 2.2pom文件 2.3数据库和表 2.4对应实体…

探索Python世界的隐藏宝石:Pika库的神秘力量

文章目录 探索Python世界的隐藏宝石&#xff1a;Pika库的神秘力量背景&#xff1a;为何选择Pika&#xff1f;Pik库简介如何安装Pika&#xff1f;简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python世界的隐藏宝石&#xff1a;Pika库的神秘力量 背景&#xff1a;为何…

【机器学习】8 ——朴素贝叶斯

机器学习 8 ——朴素贝叶斯 特征条件独立假设 朴素是指每个特征独立地影响结果&#xff0c;整个假设在实际应用中不成立&#xff0c;主要是思想 输入输出的来拟合概率分布&#xff0c;贝叶斯定理&#xff0c;后验概率最大 文章目录 机器学习 8 ——朴素贝叶斯前言贝叶斯定理先…

vue2使用ag-grid表格

ag-grid官网&#xff1a;Vue Grid: Custom Components | AG Grid 根据官方文档说的AG Grid no longer supports Vue 2. The last version to support Vue 2 is AG Grid v31.3.&#xff0c;目前只有v31.3.版本支持vue2。 以下是官方给的demo Vue Grid: Get Started with AG G…

C# WPF编程-串口通信

C# WPF编程-串口通信 串口通信1. NuGet安装System.IO.Ports2. 界面布局XAML3. C#代码4. 运行效果源码下载 串口通信 1. NuGet安装System.IO.Ports 2. 界面布局XAML <Window x:Class"BlocksTools.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006…

Python 从入门到实战15(字符串其它操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们通过举例学习了字符串一些操作说明。今天继续讨论字符…

Java数组08:ArrayList简介

本节内容视频链接&#xff1a; Java关于ArrayList的简单用法与介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1CC4y177CW/?spm_id_from333.337.search-card.all.click&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5Java的ArrayList简介_哔哩哔哩_bilibilihttps:…