电话号码本算法问题中一人多号码问题的解决方案
问题描述:
设计一个电话号码本算法,要求人物有两个及以上的电话号码的情况的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 是留下一个标志位。
这样做 很浪费 内存