C语言-单链表和双链表

C语言-单链表和双链表

单链表

// 定义单链表结点结构体
typedef struct Node {
    int data; // 数据域
    struct Node* next; // 指针域,指向下一个结点
} ListNode;

// 创建新结点
ListNode* createNode(int data) {
    ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
    if (!newNode) {
        printf("内存分配失败!\n");
        return NULL;
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾插入新结点
void insertNode(ListNode** head, int data) {
    ListNode* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        ListNode* temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}

// 生活案例:
// 假设单链表模拟一条公交线路的各个站牌顺序,每个站牌(节点)只知道下一站(next指针),乘客只能按照规定的路线依次前进。

### 双链表

```c
// 定义双链表结点结构体
typedef struct Node {
    int data;
    struct Node* prev; // 新增的指向前一个结点的指针域
    struct Node* next;
} DListNode;

// 创建新结点
DListNode* createDNode(int data) {
    DListNode* newNode = (DListNode*)malloc(sizeof(DListNode));
    if (!newNode) {
        printf("内存分配失败!\n");
        return NULL;
    }
    newNode->data = data;
    newNode->prev = NULL;
    newNode->next = NULL;
    return newNode;
}

// 在链表末尾插入新结点
void insertDNode(DListNode** head, int data) {
    DListNode* newNode = createDNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        DListNode* temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
        newNode->prev = temp;
    }
}

// 生活案例:
// 双链表可以模拟一条双向通行的道路,每个路口(节点)不仅知道自己前方通往哪个路口(next指针),还知道后方连接哪个路口(prev指针),车辆可以根据道路标志自由选择前进或倒退方向。

相关推荐

  1. C语言-

    2024-05-02 17:56:08       28 阅读
  2. 2024-05-02 17:56:08       25 阅读
  3. C语言实现

    2024-05-02 17:56:08       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 17:56:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 17:56:08       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 17:56:08       87 阅读
  4. Python语言-面向对象

    2024-05-02 17:56:08       96 阅读

热门阅读

  1. spring ioc 容器加载过程 refresh() 方法详解

    2024-05-02 17:56:08       38 阅读
  2. golang:atomic.Pointer

    2024-05-02 17:56:08       35 阅读
  3. 中文输入法导致的高频事件

    2024-05-02 17:56:08       29 阅读
  4. CUDA内存管理

    2024-05-02 17:56:08       29 阅读