打印
[软件资料]

无数据域双向链表代码

[复制链接]
140|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jf101|  楼主 | 2024-3-26 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

下面是一个简单的示例,演示了如何使用无数据域双向链表进行插入和访问操作:


#include <stdio.h>
#include <stddef.h> // 包含offsetof宏

// 定义节点结构体
struct Node
{
    struct Node* prev;
    struct Node* next;
};

// 定义测试结构体
struct Data
{
    int data;
    struct Node list;
};

// 插入节点到链表尾部
void insert(struct Node* head, struct Node* newNode)
{
    struct Node* current = head;

    while (current->next != NULL)
    {
        current = current->next;
    }

    newNode->prev = current;
    newNode->next = NULL;
    current->next = newNode;
}

// 打印链表内容
void printList(struct Node* head)
{
    printf("List: ");
    struct Node* current = head->next;

    while (current != NULL)
    {
        // 通过偏移量找到Test结构体的地址
     struct Data* test = (struct Data*)((char*)current - offsetof(struct Data, list));

        printf("%d -> ", test->data);
        current = current->next;
    }

    printf("NULL\n");
}

int main()
{
    // 创建链表头节点
    struct Node head;
    head.prev = NULL;
    head.next = NULL;

    // 创建并插入节点
    struct Data test1 = {1, {NULL, NULL}};
    struct Data test2 = {2, {NULL, NULL}};
    struct Data test3 = {3, {NULL, NULL}};

    // 插入节点到链表
    insert(&head, &test1.list);
    insert(&head, &test2.list);
    insert(&head, &test3.list);

    // 打印链表内容
    printList(&head);

    return 0;
}


在这个示例中,我们定义了一个包含指向前一个节点和后一个节点的结构体 Node,以及一个包含整数数据和 Node 结构体的结构体 Data。然后实现了插入和打印链表的函数。在打印链表内容的函数中,通过 offsetof 宏获取 Data 结构体中 listNode 成员的偏移量,从而得到节点所在的地址,进而访问节点中存储的数据。

通过这个示例,我们可以看到如何使用无数据域双向链表进行插入和访问操作,以及如何使用 offsetof 宏来方便地获取结构体中成员的偏移量。

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 11:12 | 只看该作者
这个示例,我们可以看到如何使用无数据域双向链表进行插入和访问操作,非常适合新手学习

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-4-10 13:40 | 只看该作者
使用 offsetof 宏来方便地获取结构体中成员的偏移量

使用特权

评论回复
地板
szt1993| | 2024-4-10 17:15 | 只看该作者
链表的样例属具,方便获取结构体偏移量

使用特权

评论回复
5
jf101|  楼主 | 2024-4-14 15:41 | 只看该作者
中国龙芯CDX 发表于 2024-4-10 11:12
这个示例,我们可以看到如何使用无数据域双向链表进行插入和访问操作,非常适合新手学习 ...

是的

使用特权

评论回复
6
jf101|  楼主 | 2024-4-14 15:41 | 只看该作者
szt1993 发表于 2024-4-10 17:15
链表的样例属具,方便获取结构体偏移量

链表其实是指针的一种实例化

使用特权

评论回复
7
小小蚂蚁举千斤| | 2024-4-15 09:43 | 只看该作者
无数据域双向链表进行插入和访问操作是最基本的操作

使用特权

评论回复
8
OKAKAKO| | 2024-4-19 18:50 | 只看该作者
使用无数据域双向链表进行插入和访问操作的例子很实用

使用特权

评论回复
9
星辰大海不退缩| | 2024-4-21 11:36 | 只看该作者
使用 offsetof 宏来方便地获取结构体中成员的偏移量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

184

主题

1220

帖子

2

粉丝