#define PHB_NUM_LEN 20
typedef struct LinkMan
{
char name[PHB_NAME_LEN];
char num[PHB_NUM_LEN];
struct LinkMan *next;
}LinkMan,*pLinkMan;
int GetPhbLength(pLinkMan phb);
/************************************************************************/
/* 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(pLinkMan *phb, int index, pLinkMan man)
{
int i = 0;
pLinkMan pTemp = *phb;
if (index <= 0)
{
printf("The index must be bigger than zero.\n");
return;
}
else if (index > GetPhbLength(*phb) + 1)
{
printf("The index is bigger than the length of phonebook.\n");
return;
}
else
{
if (1 == index)
{
if (pTemp != NULL)
{
man->next = pTemp->next;
*phb = man;
}
else
{
*phb = man;
man->next = NULL;
}
}
else
{
for (i = 2; i < index; ++i)
{
pTemp = pTemp->next;
}
man->next = pTemp->next;
pTemp->next = man;
}
}
}
/************************************************************************/
/* 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(pLinkMan *phb, char *name)
{
int i = 0;
pLinkMan pTemp = *phb;
pLinkMan pPrior = pTemp;
int length = GetPhbLength(*phb);
for(i = 0; i < length; ++i)
{
if (0 == strcmp(pTemp->name,name))
{
if (0 == i)
{
*phb = (*phb)->next;
//栈上的空间不能用free进行释放
free(pTemp);
return;
}
else
{
pPrior->next = pTemp->next;
//栈上的空间不能用free进行释放
free(pTemp);
return;
}
}
else
{
pPrior = pTemp;
pTemp = pTemp->next;
}
}
printf("Can't find the linkman in phonebook!\n");
}
/************************************************************************/
/* Function: GetPhbLength */
/* Description: Get the number of linkman in phonebook */
/* Parameters: */
/* phb: phonebook */
/* Value: the number of linkman */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
int GetPhbLength(pLinkMan phb)
{
int count = 0;
pLinkMan pTemp = phb;
while(pTemp != NULL)
{
pTemp = pTemp->next;
++count;
}
return count;
}
/************************************************************************/
/* Function: DestroyPhb */
/* Description: Destroy the phonebook */
/* Parameters: */
/* phb: phonebook */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void DestroyPhb(pLinkMan *phb)
{
pLinkMan pTemp = *phb;
while (*phb != NULL)
{
*phb = (*phb)->next;
//栈上的空间不能用free进行释放
free(pTemp);
pTemp = *phb;
}
}
/************************************************************************/
/* Function: PrintPhb */
/* Description: print the phonebook */
/* Parameters: */
/* phb: phonebook */
/* Value: void */
/* Author: Hoiman */
/* Date: 2010/11/05 */
/************************************************************************/
void PrintPhb(pLinkMan phb)
{
while(phb != NULL)
{
printf("name: %s\n",phb->name);
printf("num: %s\n",phb->num);
phb = phb->next;
}
}