您的位置:首页 > 新闻 > 资讯 > 嵌入式开发培训机构排名_汕头网站建设推广厂家_自己做网站建设_刷百度指数

嵌入式开发培训机构排名_汕头网站建设推广厂家_自己做网站建设_刷百度指数

2025/6/2 22:13:46 来源:https://blog.csdn.net/weixin_48850734/article/details/146361792  浏览:    关键词:嵌入式开发培训机构排名_汕头网站建设推广厂家_自己做网站建设_刷百度指数
嵌入式开发培训机构排名_汕头网站建设推广厂家_自己做网站建设_刷百度指数

C语言-单链表的结构体定义 ⭐️

一、单链表的结构体定义 🍭

在这里插入图片描述

typedef struct LNode {  // 定义结构体 LNode,表示链表中的一个结点int data;           // 数据域,存储结点的值struct LNode *next; // 指针域,指向下一个结点
} LNode, *LinkList;     // 为结构体 LNode 定义两个别名:LNode 和 LinkList

代码功能说明: 🎀

  • 定义链表结点结构体:🍉
    • LNode 是链表中的一个结点,包含两个成员:👇🏻
      • data:存储结点的值(整数类型)。
      • next:指向下一个结点的指针。
  • 定义别名:🍉
    • LNode:表示一个链表结点。
    • LinkList:表示指向链表结点的指针(通常用于表示链表的头指针)。

代码逻辑详解: 🎀

  • 结构体定义:🍉
    • struct LNode 定义了一个链表结点的结构体。
    • data 是结点的数据域,用于存储整数值。
    • next 是结点的指针域,指向下一个结点。
  • 别名定义:🍉
    • typedefstruct LNode 定义了两个别名:
    • LNode:表示一个链表结点。
    • LinkList:表示指向链表结点的指针(通常用于表示链表的头指针)。

在这里插入图片描述

#include <stdio.h>  // 包含标准输入输出库,用于使用printf等函数
#include <stdlib.h> // 包含标准库函数,用于使用malloc等函数// 定义链表结点的结构体
typedef struct LNode {int data;           // 数据域,存储结点的值struct LNode *next; // 指针域,指向下一个结点
} LNode, *LinkList;     // 为结构体 LNode 定义两个别名:LNode 和 LinkList// 创建一个新结点
LNode *createNode(int data) {LNode *newNode = (LNode *)malloc(sizeof(LNode));  // 动态分配内存,创建一个新结点newNode->data = data;  // 设置新结点的数据域newNode->next = NULL;  // 设置新结点的指针域为NULLreturn newNode;        // 返回新结点的指针
}// 打印链表
void printList(LinkList L) {LNode *p = L;  // 定义指针p,指向链表的头结点while (p != NULL) {  // 遍历链表,直到p为NULLprintf("%d -> ", p->data);  // 打印当前结点的值p = p->next;  // 移动到下一个结点}printf("NULL\n");  // 打印链表结束标志
}int main() {// 创建链表 1 -> 2 -> 3 -> NULLLinkList L = createNode(1);  // 创建头结点,值为1L->next = createNode(2);     // 创建第二个结点,值为2L->next->next = createNode(3);  // 创建第三个结点,值为3// 打印链表printList(L);  // 调用printList函数,打印链表return 0;  // 程序正常结束
}

在这里插入图片描述

二、LNode *LinkList 的区别 🍭

在这里插入图片描述

// 【写法1】
LNode *p;
p = L -> next;// 【写法2】
LinkList p;
p = L -> next;
  • LNode侧重于表示链表中的每个结点;
  • LinkList侧重于表示一个链表。
    • 一般用头指针表示一个链表,比如:链表L 表示为:LinkList L;

LNode *LinkList 的区别主要体现在 语义 和 用法 上,尽管它们在语法上是等价的(都是指向 LNode 结构体的指针)。以下是它们的详细区别:👇🏻

(一)、 定义 📚
  • LNode *
    • 表示指向 LNode 结构体的指针。
    • 通常用于表示链表中的某个结点。
  • LinkList
    • LNode * 的别名,通过 typedef 定义。
    • 通常用于表示链表的头指针,强调链表的整体性。
(二)、 语义 🌲
  • LNode *
    • 强调指向某个具体的链表结点。
    • 适合用于操作链表中的某个结点(如插入、删除、遍历等)。
  • LinkList
    • 强调指向链表的头结点,表示整个链表。
    • 适合用于表示链表的整体(如创建链表、打印链表等)。
(三)、 用法 🪜

LNode *:用于操作链表中的某个结点。

示例: 🌰

LNode *p = head;  // p 指向链表的头结点
while (p != NULL) {printf("%d ", p->data);  // 打印当前结点的值p = p->next;  // 移动到下一个结点
}

LinkList:用于表示链表的头指针,通常用于函数参数或返回值。

示例: 🌰

LinkList createList() {LinkList L = (LNode *)malloc(sizeof(LNode));  // 创建头结点L->next = NULL;return L;  // 返回链表的头指针
}
(四)、 代码示例 🍪

以下是一个完整的代码示例,展示 LNode *LinkList 的用法: 👇🏻

#include <stdio.h>  // 引入标准输入输出库,用于使用 printf 等函数
#include <stdlib.h> // 引入标准库,用于使用 malloc 和 free 等函数// 定义链表结点结构体
typedef struct LNode {int data;              // 结点的数据域,存储整型数据struct LNode *next;    // 结点的指针域,指向下一个结点
} LNode, *LinkList;        // LNode 是结点类型,LinkList 是指向 LNode 的指针类型// 创建一个新结点
LNode *createNode(int data) {LNode *newNode = (LNode *)malloc(sizeof(LNode)); // 动态分配内存,创建一个新结点newNode->data = data;  // 设置新结点的数据域newNode->next = NULL;  // 初始化新结点的指针域为 NULLreturn newNode;        // 返回新结点的指针
}// 打印链表
void printList(LinkList L) {LNode *p = L;  // 初始化指针 p,指向链表的头结点while (p != NULL) {  // 遍历链表,直到链表结束printf("%d -> ", p->data);  // 输出当前结点的数据p = p->next;  // 移动到下一个结点}printf("NULL\n");  // 输出链表结束标志 NULL
}// 创建链表
LinkList createList() {LinkList L = createNode(0);  // 创建头结点,数据域为 0LNode *p = L;  // 初始化指针 p,指向链表的头结点for (int i = 1; i <= 3; i++) {  // 循环插入 3 个新结点p->next = createNode(i);  // 在链表尾部插入新结点p = p->next;  // 移动指针 p 到新插入的结点}return L;  // 返回链表的头指针
}int main() {LinkList L = createList();  // 创建链表printList(L);  // 打印链表// 释放链表内存LNode *p = L;  // 初始化指针 p,指向链表的头结点while (p != NULL) {  // 遍历链表,释放每个结点的内存LNode *temp = p;  // 临时指针 temp 指向当前结点p = p->next;  // 移动指针 p 到下一个结点free(temp);  // 释放当前结点的内存}return 0;  // 程序正常结束
}
0 -> 1 -> 2 -> 3 -> NULL
(五)、 总结 🌈
特性LNode *LinkList
定义指向 LNode 结构体的指针LNode * 的别名
语义强调指向某个具体的链表结点强调指向链表的头结点,表示整个链表
用法用于操作链表中的某个结点用于表示链表的头指针
适用场景遍历、插入、删除等操作创建链表、返回链表头指针等操作
  • LNode * 更适合用于操作 链表中的某个结点
  • LinkList 更适合用于表示 链表的整体(头指针)

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com