当前位置: 首页 > 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/a/302216.html

相关文章:

  • 【QSS样式表 - ⑥】:QPushButton控件样式
  • 亚远景-SO 21434标准下的汽车网络安全:风险评估与管理的关键实践
  • 解释下什么是面向对象?面向对象和面向过程的区别?
  • MySQL数据库——复制表数据与结构
  • 2、光同步数字传送网的特点
  • 《计算机组成及汇编语言原理》阅读笔记:p48-p81
  • 小红书品牌商家怎么接入三方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)查漏补缺
  • 交换两实数的整数部分