2012-12-18 23 views
7

Tôi là người mới bắt đầu trong lập trình, hãy dễ dàng với tôi và tôi cảm thấy khó khăn để có được câu trả lời cho câu hỏi của mình. Tôi không thể có được đầu của tôi xung quanh các mã phức tạp. Có thể một số xin vui lòng giải thích cho tôi với mã hóa đơn giản như thế nào là generic list manipulation function written which accepts elements of any kind? Cảm ơn trước.Chức năng thao tác danh sách chung được viết như thế nào?

+1

C không phải là ngôn ngữ rất tốt cho chương trình chung không may – Pubby

+0

[BOOK] này (http://www.cs.rit.edu/) ~ ats/books/ooc.pdf) có thể giúp bạn rất nhiều, cũng là một [code] (http://www.linuxcandy.com/2011/11/week-4-introduction-to-generic.html) –

+1

@GrijeshChauhan Cảm ơn bạn rất nhiều – Korhan

Trả lời

1

Có vẻ như bạn cần một danh sách không đồng nhất. Một số con trỏ bên dưới:

Làm cho phần tử dữ liệu của nút danh sách dưới dạng cấu trúc chung, có chứa chỉ báo cho kiểu dữ liệu và dữ liệu.

/** This should be your data node **/ 
    struct nodedata 
    { 
     int datatype; 
     void *data; 
    };  

    /** This should be your list node **/ 
    struct listnode 
    { 
     struct nodedata *data; 
     struct listnode *next; 
    }; 

Sử dụng cấu trúc bên trên, bạn có thể lưu trữ các loại dữ liệu khác nhau. Sử dụng các con trỏ hàm cho các hàm so sánh hoặc gọi các hàm khác nhau tùy thuộc vào kiểu dữ liệu.

+1

Cảm ơn bạn. +1 cho thời gian của bạn. – Korhan

1

này thường được thực hiện bằng con trỏ void:

typedef struct node { 
    struct node *next; 
    void *data; 
} node; 

node *insert(node *list, void *data) { 
} 

node *delete(node *list, node *to_delete) { 
} 

chức năng thao tác đó không phụ thuộc vào loại thực tế của dữ liệu để họ có thể được thực hiện quát. Ví dụ: bạn có thể có cấu trúc kiểu dữ liệu cho trường dữ liệu ở trên:

typedef struct data { 
    int type; 
    void *data; 
} data; 

/* .... */ 
data d; 
d.type = INT; 
d.data = malloc(sizeof(int)); 
node n = {NULL, (void*)&data); 
+0

Cảm ơn bạn. +1 cho thời gian của bạn. – Korhan

Các vấn đề liên quan