电话号码本算法问题中一人多号码问题的解决方案

电话号码本算法问题中一人多号码问题的解决方案

问题描述:

设计一个电话号码本算法,要求人物有两个及以上的电话号码的情况的C语言代码实现

如果你不考虑可扩展性和内存的浪费问题,那么下面这个基本符合你的要求,注意:这里没有进行错误检测,和内存回收,这个自己可以稍加修改

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

typedef struct _CallBookMark
{
    char name[30];  //名字
    char* telephone[10];    //电话号码,可存入10个,可根据需要添加或者减少 
    int count;  //当前存储多少个电话号码 
}CallBookMark, *PCallBookMark;

void Init(PCallBookMark contact, const char* name)  //初始化个人电话普,只存入姓名 
{    
    strcpy(contact->name, name);                    
    contact->count = 0; 
}

void Insert(PCallBookMark contact, const char* callNumer)
{
    unsigned int numlength = strlen(callNumer) + 1; //
    contact->telephone[contact->count] = (char*) malloc(numlength);
    strcpy(contact->telephone[contact->count++], callNumer);
}

void Display(PCallBookMark contact)
{
    unsigned count = 0;
    printf("Name: %s\n", contact->name);
    while(count < contact->count)
    {
        printf("\t%s\n", contact->telephone[count++]);
    }
}


int main(void)
{
    CallBookMark contact;
    Init(&contact, "王小二");
    Insert(&contact, "13123454435");
    Insert(&contact, "13123454123");        
    Insert(&contact, "13123454356");
    Display(&contact);

    return 0;               
}

用链表,创建一个数组,数组存储人,然后指向一个号码链表,号码链表存储此人对应的号码

楼上的解决方案 很好了,但是如果楼主只是实现 的玩玩 的话,嫌弃链表复杂,可以试试
全部用 自定义类型数组
就是你自己定义一个 类型 里面有 姓名 号码 号码 用 字符 数组存储 且 这个数组的大小设置成你允许的最大号码数N*13+1
号码数组+1 是留下一个标志位。
这样做 很浪费 内存