[Lập trình C] Cài đặt danh sách liên kết đơn

Tuesday, May 05, 2020
Edit this post


Bài tập này thực hiện:
- Cài đặt cấu trúc danh sách liên kết đơn.
- Cài đặt hàm push() chèn một node vào đầu danh sách.
- Cài đặt hàm append() chèn một node vào cuối danh sách.

#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node* next;
};

typedef struct node node;

void push(node** head, node* p) {
    if (*head == NULL) {
        *head = p;
        return;
    }
    
    p->next = *head;
    *head = p;
}

void append(node** head, node* p) {
    if (*head == NULL) {
        *head = p;
        return;
    }
    
    node* last = *head;
    while (last->next != NULL)
        last = last->next;
    last->next = p;
}

void print_nodes(node* p) {
    while (p != NULL) {
        printf("%3d->", p->data);
        p = p->next;
    }
    printf("NULL\n");
}

node* new_node(int data) {
    node* p = (node*) malloc(sizeof(node));
    p->data = data;
    p->next = NULL;
    return p;
}

int main() { 
    int n = 5;
    node* head = NULL;
    
    for (int i = 0; i < n; i++) {
        append(&head, new_node(i));
        print_nodes(head);
    }
    
    for (int i = 0; i < n; i++) {
        push(&head, new_node(i));
        print_nodes(head);
    }
    
    return 0;
}

Output của chương trình

Chú thích:

- Trong C, chỉ có con trỏ mới được khai báo NULL.
- Để thay đổi nội dung của con trỏ head, chúng ta buộc phải truyền địa chỉ nó vào hàm push() và append() (call by reference). Để "hứng" được địa chỉ này, ta dùng khai báo node** head (con trỏ của con trỏ). Vì sao thì hãy tự suy nghĩ và nghiền ngẫm nhé.
- Trong hàm main, vòng lặp đầu sẽ chèn 5 phần tử có giá trị từ 0 tới 4 vào cuối danh sách liên kết đơn, vòng lặp thứ hai chèn 5 phần tử có giá trị từ 0 tới 4 vào đầu danh sách liên kết đơn.
- Có thể copy đoạn code trên và paste chạy trực tiếp ở https://www.onlinegdb.com/.
- Xem thêm: Cài đặt danh sách liên kết đơn bằng C++

.
Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về

© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...