首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言在链表中存储日期和时间

链表是一种常用的数据结构,用于存储和操作数据。在C语言中,可以使用结构体来表示日期和时间,并通过链表的方式来存储和管理多个日期和时间。

首先,我们可以定义一个结构体来表示日期和时间:

代码语言:txt
复制
typedef struct DateTime {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
} DateTime;

接下来,我们可以定义一个链表节点的结构体,其中包含一个DateTime结构体和一个指向下一个节点的指针:

代码语言:txt
复制
typedef struct Node {
    DateTime data;
    struct Node* next;
} Node;

然后,我们可以实现一些基本的链表操作,例如插入节点、删除节点和遍历链表等:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

Node* createNode(DateTime data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insertNode(Node** head, DateTime data) {
    Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        Node* current = *head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = newNode;
    }
}

void deleteNode(Node** head, DateTime data) {
    if (*head == NULL) {
        return;
    }
    Node* current = *head;
    Node* previous = NULL;
    if (current->data.year == data.year &&
        current->data.month == data.month &&
        current->data.day == data.day &&
        current->data.hour == data.hour &&
        current->data.minute == data.minute &&
        current->data.second == data.second) {
        *head = current->next;
        free(current);
        return;
    }
    while (current != NULL &&
           (current->data.year != data.year ||
            current->data.month != data.month ||
            current->data.day != data.day ||
            current->data.hour != data.hour ||
            current->data.minute != data.minute ||
            current->data.second != data.second)) {
        previous = current;
        current = current->next;
    }
    if (current == NULL) {
        return;
    }
    previous->next = current->next;
    free(current);
}

void printList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        printf("%d-%02d-%02d %02d:%02d:%02d\n",
               current->data.year, current->data.month, current->data.day,
               current->data.hour, current->data.minute, current->data.second);
        current = current->next;
    }
}

void freeList(Node* head) {
    Node* current = head;
    while (current != NULL) {
        Node* temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
    Node* head = NULL;

    DateTime dt1 = {2022, 1, 1, 0, 0, 0};
    DateTime dt2 = {2022, 1, 1, 12, 0, 0};
    DateTime dt3 = {2022, 1, 2, 0, 0, 0};

    insertNode(&head, dt1);
    insertNode(&head, dt2);
    insertNode(&head, dt3);

    printf("Inserted nodes:\n");
    printList(head);

    DateTime dt4 = {2022, 1, 1, 12, 0, 0};
    deleteNode(&head, dt4);

    printf("\nAfter deleting a node:\n");
    printList(head);

    freeList(head);

    return 0;
}

上述代码演示了如何使用链表存储日期和时间,并进行插入和删除操作。在主函数中,我们创建了一个空链表head,然后插入了三个日期和时间节点。接着,我们打印出插入的节点,并尝试删除一个节点。最后,我们释放了链表的内存。

这是一个简单的示例,你可以根据实际需求扩展链表的功能和操作。在实际开发中,可以根据具体的场景和需求选择合适的数据结构和算法来存储和处理日期和时间数据。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅作为示例,具体的产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

6分41秒

033_先有操作系统还是先有编程语言_c语言是怎么来的

1.4K
11分33秒

061.go数组的使用场景

6分48秒

032导入_import_os_time_延迟字幕效果_道德经文化_非主流火星文亚文化

1.1K
1时8分

TDSQL安装部署实战

26分40秒

晓兵技术杂谈2-intel_daos用户态文件系统io路径_dfuse_io全路径_io栈_c语言

3.4K
8分7秒

06多维度架构之分库分表

22.2K
5分33秒

JSP 在线学习系统myeclipse开发mysql数据库web结构java编程

22分1秒

1.7.模平方根之托内利-香克斯算法Tonelli-Shanks二次剩余

48秒

手持读数仪功能简单介绍说明

1分7秒

贴片式TF卡/贴片式SD卡如何在N32G4FR上移植FATFS,让SD NAND flash读写如飞

8分3秒

Windows NTFS 16T分区上限如何破,无损调整块大小到8192的需求如何实现?

14分30秒

Percona pt-archiver重构版--大表数据归档工具

领券