#define PHB_NUM_LEN 20
#define MAXSIZE 100
typedef struct LinkMan
{
char name[PHB_NAME_LEN];
char num[PHB_NUM_LEN];
}LinkMan,*pLinkMan;
typedef struct
{
LinkMan data;
int cur;
}OneLinkMan,PhoneBook[MAXSIZE];
/* Function: InitPhoneBook */
/* Description: Init a phonebook */
/* Parameters: */
/* phb: phonebook */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void InitPhoneBook(OneLinkMan *phb)
{
int i = 0;
for (i = 2; i < MAXSIZE-1; ++i)
{
phb[i].cur = i + 1;
}
phb[0].cur = 2;
phb[1].cur = 0;
phb[MAXSIZE-1].cur = 0;
}
/* Function: MallocInsert */
/* Description: Get a spare space index */
/* Parameters: */
/* phb: phonebook */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
int MallocInsert(OneLinkMan *phb)
{
int i = phb[0].cur;
if (i)
{
phb[0].cur = phb[i].cur;
return i;
}
return 0;
}
/* Function: FreeDelete */
/* Description: get back a spare space index */
/* Parameters: */
/* phb: phonebook index: the index give back */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void FreeDelete(OneLinkMan *phb, int index)
{
phb[index].cur = phb[0].cur;
phb[0].cur = index;
}
/************************************************************************/
/* Function: InsertLinkMan */
/* Description: Insert a linkman to a phonebook */
/* Parameters: */
/* phb: phonebook , index: the insert position man: new linkman */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void InsertLinkMan(OneLinkMan *phb, int index, pLinkMan man)
{
int i = MallocInsert(phb);
int j = 0;
int count = 1;
if (index <= 0)
{
printf("The index must be bigger than zero!\n");
}
if (0 == i)
{
printf("There is no spare space!\n");
}
else
{
strcpy(phb[i].data.name,man->name);
strcpy(phb[i].data.num,man->num);
j = 1;
do
{
if (count == index)
{
break;
}
count++;
j = phb[j].cur;
}while (phb[j].cur);
if (count < index)
{
printf("Too big index~!\n");
return;
}
phb[i].cur = phb[j].cur;
phb[j].cur = i;
}
}
/************************************************************************/
/* Function: DeleteLinkManByName */
/* Description: Delete a linkman from a phonebook by name */
/* Parameters: */
/* phb: phonebook , name: the name of linkman will be deleted */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void DeleteLinkManByName(OneLinkMan *phb, char *name)
{
int i = 1;
while (phb[i].cur)
{
if (0 == strcmp((phb[i+1].data).name,name))
{
phb[i].cur = phb[i+1].cur;
FreeDelete(phb,i+1);
return;
}
else
{
i = phb[i].cur;
}
}
printf("Can't find the linkman in phonebook!\n");
}
/************************************************************************/
/* Function: PrintPhb */
/* Description: print the phonebook */
/* Parameters: */
/* phb: phonebook */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void PrintPhb(OneLinkMan *phb)
{
int i = 1;
int j = 0;
while(j = phb[i].cur)
{
printf("%d name: %s\n",j,phb[j].data.name);
printf("%d num: %s\n",j,phb[j].data.num);
i = j;
}
}