Kiểu cấu trúc tự tham chiếu chính nó (self-reference struct)

trước tiên là em xin đính chính về cái tên bởi chính em còn không hiểu( tra mãi không ra). mà trên group nhà ta vẫn thường có mấy bài " struct tự trỏ".
cho mấy anh chị em chưa rõ thì dạng của hàm này là:

typedef struct ex{
    int a;
    struct ex *next;
}ex;

trông có vẻ giống hàm đệ quy đúng chứ ạ.
ảnh minh hoạ:
struct
hôm nay em xin viết về cấp phát bộ nhớ cho loại này. ( khá hay và khá hữu dụng trong làm việc với file nhị phân)
ta dùng với struct pointer.

ex *head = (ex*)malloc(sizeof(ex));

ở đây head là 1 pointer nên có thể truy cập vào các thành phần của struct được.
lúc này :

head -> a = 10; //gán giá trị cho a
head -> next = NULL; //em hiểu nhưng không diễn tả được cái này ai biết thì cmt hộ em nhé
// nếu head -> next = (ex*)malloc(sizeof(ex)); có nghĩa như hình dưới.


nếu như thế thì sẽ khá tốn thời gian để ghi 1 chuỗi thành 1 list bằng cách này nên có 1 hàm để làm

// nhận chuỗi và tạo thành list 
typdef struct ex{
    char a;
    struct ex *next;
}ex;
typedef ex *LINK; // ai hiểu rõ thì cmt dưới hộ mn nhé chứ em giải thích khá tồi.
LINK string_to_list(char s[]){
    LINK head;
    if (s[0] = '\0')
        return NULL; // gán NULL vào kí tự cuối cùng của chuỗi
    else{
        head = malloc(sizeof(ex)); // không bị lỗi đâu.
        head -> a = s[0]; // gán a với giá trị đầu tiên của chuỗi nhập vào
        head -> next = string_to_list(s +1); 
        return head; // đệ quy . ai biết cách nào không dùng đệ quy thì cmt hộ em nhé
    }
}
// hàm in ra trình tự của hàm string to list làm việc.
void print_list(LINK head){
    if ( head == NULL)
        printf("NULL\n");
    else{
        printf("%c -->" , head -> a);
        print_list(head -> next); // lại đệ quy.
    }
} //còn hàm main thì thôi nhé mn.

ưu điểm: thao tác với file tốt(nhị phân), tối ưu không gian bộ nhớ và NGẦU.
đó là những gì em muốn chia sẻ. hơi dài nhưng khá thú vị để tham khảo ạ.
mọi câu hỏi em đều ghi trong comment khi code rồi ạ.
mn dành chút thời gian vào góp vui tiện vừa chia sẻ kiến thức vừa ôn lại kiến thức ạ.
nguồn ảnh: https://codevkr.tistory.com/48

p/s: em đang làm project nhưng vẫn viết topic này để chia sẻ tới mn. (bên việt nam không nhiều về tài liệu này thì phải). nhân tiện là có ai đang năm 1 mà phải làm project chưa ạ. em mới chuyển sang C từ khi nhập học,mông lung quá chưa kể đề là làm 1 từ điển khá giống với app duolingo. ( viết nghĩa của từ cho trước, game flashcard hay hangman… )

Cái này là danh sách liên kết mà (linked list). :sweat_smile:

Còn cái bạn nói ở đây là danh sách liên kết đơn. (Single linked list).


Cái chỗ comment thì bạn tìm hiểu theo từ khóa trên và tự trả lời nha.

3 Likes

yep… em mới tra lại tìm hiểu thêm thì ra nó được gọi là linked list… kkk

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?