当前位置: 首页 > article >正文

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

一、静态链表

创建链表中的一个节点,用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.kler.cn/news/302216.html

相关文章:

  • 小红书品牌商家怎么接入三方IM服务商?
  • STM32(2)基础介绍及新建工程
  • Ton的编译过程(上)
  • Vue 文件转base64并获取文件编码格式
  • Spring 中使用的设计模式全面解析
  • flink 常见的缩减状态的方式
  • Java并发编程实战 03 | Java线程状态
  • python-pptx在PPT中插入各种形状
  • 【Hadoop|HDFS篇】NameNode和SecondaryNameNode
  • 设计模式学习[5]---装饰模式
  • sqlgun靶场漏洞挖掘
  • 安泰功率放大器有哪些特点呢
  • Linux从入门到开发实战(C/C++)Day13-线程池
  • 滚雪球学SpringCloud[1.1]:Spring Cloud概述与环境搭建(入门章节)
  • QT中使用UTF-8编码
  • Linux echo命令讲解及与重定向符搭配使用方法,tail命令及日志监听方式详解
  • 从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展
  • Docker快速部署Apache Guacamole
  • 前端三件套(HTML,CSS,JS)查漏补缺
  • 交换两实数的整数部分
  • 【数据结构】选择题错题集
  • log4j 的参数配置
  • CUDA-中值滤波算法
  • git标签、repo如何打tag
  • 828华为云征文|基于华为云Flexus云服务器X部署Minio服务
  • 领夹麦克风哪个品牌好?大疆、西圣、博雅无线麦克风在线测评
  • 关于 Embedding 的个人粗略见解
  • cross-plateform 跨平台应用程序-05-Flutter 介绍
  • 【2024 版】最新 kali linux 入门及常用简单工具介绍(非常详细)
  • Unet改进30:添加CAA(2024最新改进方法)|上下文锚定注意模块来捕获远程上下文信息。