2015-11-04 25 views
0

我想實現一個像這樣的數據結構。如何實現這一點將是一個好的方法 。如何實現帶有兩個結構的鏈表

enter image description here

好吧,我想實現鏈表的信號

結構消息數據

struct dbcMsg_t 
{ 
unsigned char* message_id; 
unsigned char* message_name; 
unsigned char* message_len; 
unsigned char* message_sender; 
unsigned char* message_comment; 
unsigned char* message_attribute_list; 
unsigned char* message_transmitter_list; 
struct sigMsg_t *SIG_INFO; 
}; 

結構信號數據

struct sigMsg_t 
{ 
unsigned char* signal_name; 
unsigned int  signal_bit_start; 
unsigned char signal_bit_len; 
unsigned char signal_endianess; 
unsigned char signal_signedness; 
struct sigMsg_t *SIG_INFO_NEXT; 
}*start=NULL; 

會有一個陣列MSG DATA

struct dbcMsg_t *new_node[MAX_DBC]; 

的我是如何實現這種困惑?我的意思是如何插入以及如何顯示?

+0

味精數據結構有一個指針指向另一個味精的數據,而不是信號數據。我不確定這是否是你的意圖,因爲圖片說,否則 – Lukas

+1

你不只是實現它?我不明白問題 –

+0

消息數據可能包含許多信號。這就是爲什麼我創建這樣的圖像。不,我還沒有實現它。結構設計是否正確? – ganeshredcobra

回答

1

實現信號數據節點的標準鏈表,並在消息數據節點中保存頭節點的指針。

typedef struct sigMsg_t *Sig_ptr; 
typedef struct sigMsg_t { 
    unsigned char* signal_name; 
    unsigned int  signal_bit_start; 
    unsigned char signal_bit_len; 
    unsigned char signal_endianess; 
    unsigned char signal_signedness; 
    Sig_ptr SIG_INFO_NEXT; 
}Sig_node; 

typedef struct dbcMsg_t { 
    unsigned char* message_id; 
    unsigned char* message_name; 
    unsigned char* message_len; 
    unsigned char* message_sender; 
    unsigned char* message_comment; 
    unsigned char* message_attribute_list; 
    unsigned char* message_transmitter_list; 
    Sig_ptr SIG_INFO_HEAD; 
} Message; 

既然你問到如何實現插入和打印功能:

void insert_to_list_end(Sig_ptr *list, Sig_node data) { 
    Sig_ptr newnode, last = *list; 
    newnode = (Sig_ptr)malloc(sizeof(Sig_node)); 
    /* fill the new load with new data here 
    newnode->message_id = data.message_id; 
    ... 
    */ 
    newnode-> SIG_INFO_NEXT = NULL; 
    if (last == NULL){ 
     *list = newnode; 
    }//first node 
    else{ 
     while (1) { 
      if (last-> SIG_INFO_NEXT == NULL) { 
       last-> SIG_INFO_NEXT = newnode; 
       break; 
      } 
      last = last-> SIG_INFO_NEXT; 
     } 
    } 
} 

和打印:

//prints whole list using printItem extern function 
void print_list(Sig_ptr list) { 
    //implement this print func for a node in your main file 
    extern void PrintItem(Sig_node c); 

    Sig_ptr aux1, aux2; 

    aux1 = list; 
    while (aux1 != NULL) { 
     PrintItem(aux1); 
     aux2 = aux1->SIG_INFO_NEXT; 
     aux1 = aux2; 
    } 
} 
+0

將插入功能正常工作? newnode的類型是Sig_ptr esp newnode-> message_id = data.message_id; – ganeshredcobra

+0

我的不好,我會解決這個問題。它應該附加一個Sig_node,而不是Message – Lukas