c中链表的子列表?

时间:2013-05-21 19:09:02

标签: c linked-list

我想使用c在单个列表中创建一个子列表。我有一个名单,姓氏,电话,电子邮件.... 我想在手机下制作一个子列表以保留更多手机。 这是我的结构:

typedef struct ph{
    char * phone;
    ph *next;
}listofphones;

typedef struct client{
    char* name;
    char* surname;
    date birthday;
    char bankaccount[16];
    listofphone phone;
    char* mail;
    struct client *next;
} clientData;    

我想为任何客户提供额外的子列表。问题是手机都在同一个列表中。那么如何创建不同的列表呢?

示例:

name1->surname1->birthday1->bankaccount1->phone1->mail1.......
                                            |
                                          phone2
                                            |
                                          phone3 
                                            .
                                            .                                                     
                                            .

(抱歉画画不好,我希望它足够清楚。)

2 个答案:

答案 0 :(得分:1)

您只需要在此列表的每个节点中保留另一个列表的头部。您的结构定义将类似于:

typedef struct ph{
    char * phone;
    ph *next;
}listofphones;

typedef struct client{
    char* name;
    char* surname;
    date birthday;
    char bankaccount[16];
    ph* phHead;
    char* mail;
    struct client *next;
} clientData;  

现在,您在列表中有一个列表。但是,编写代码来遍历,查找,枚举客户端的电话号码将需要双指针间接,这应该更好地避免。如果客户端的电话号码数量有限,则可以将其更改为:

typedef struct client{
    char* name;
    char* surname;
    date birthday;
    char bankaccount[16];
    char phNumbers[5][10];
    char* mail;
    struct client *next;
} clientData;  

上述结构定义假定每个客户端最多有5个电话号码,每个电话号码最多10个字符。您可以根据需要进行更改。

答案 1 :(得分:0)

为什么要制作另一份清单?管理指针将成为头痛的问题。你不能简单地做

typedef struct client{
char* name;
char* surname;
date birthday;
char bankaccount[16];
int **phone;
char* mail;
struct client *next;
} clientData;