#include <string.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct NAME{
char *name;
struct NAME *pre;
struct NAME *next;
}T_Name,*PT_Name;
static PT_Name g_ptNameHead;
void add_name_to_link(PT_Name ptnew)
{
PT_Name PT_Cur;
if(g_ptNameHead == NULL)
{
g_ptNameHead = ptnew;
}
else
{
PT_Cur = g_ptNameHead;
while(PT_Cur->next)
{
PT_Cur = PT_Cur->next;
}
PT_Cur->next = ptnew;
ptnew->pre = PT_Cur;
}
}
void add_one_name(void)
{
PT_Name ptnew;
char *str;
char name[128];
printf("Enter the name: ");
scanf("%s",name);
str = malloc(strlen(name) + 1);
strcpy(str,name);
ptnew = malloc(sizeof(T_Name));
ptnew->name = str;
ptnew->next = NULL;
ptnew->pre = NULL;
add_name_to_link(ptnew);
}
PT_Name get_name(char *name)
{
PT_Name ptCur;
if(g_ptNameHead==NULL)
{
return NULL;
}
else
{
ptCur = g_ptNameHead;
do
{
if(strcmp((ptCur->name),name)==0)
{
return ptCur;
}
else
ptCur = ptCur->next;
}while(ptCur);
}
return NULL;
}
void del_name(PT_Name ptDel)
{
PT_Name ptCur;
PT_Name ptPre;
PT_Name ptNext;
if(g_ptNameHead == ptDel)
{
g_ptNameHead = ptDel->next;
//释放
free(ptDel->name);
free(ptDel);
return;
}
else
{
ptCur = g_ptNameHead->next;
while(ptCur)
{
if(ptCur == ptDel)
{
ptPre = ptCur->pre;
ptNext = ptCur->next;
ptPre->next = ptNext;
if(ptNext)
{
ptNext->pre = ptPre;
}
break;//切记删除之后直接返回
}
else
{
ptCur = ptCur->next;
}
}
}
free(ptDel->name);
free(ptDel);
return ;
}
void del_one_name(void)
{
PT_Name ptFind;
char name[128];
printf("Enter the del name: ");
scanf("%s",name);
ptFind = get_name(name);
if(ptFind==NULL)
{
printf("Can't find the del name\n");
return ;
}
del_name(ptFind);
}
void list_all_name()
{
int i = 0;
PT_Name ptCur;
ptCur = g_ptNameHead;
while(ptCur)
{
printf("%02d : %s\n",i++,ptCur->name);
ptCur = ptCur->next;
}
}
int main()
{
char c;
while(1)
{
printf("<l>: List all the names\n");
printf("<a>: add one name\n");
printf("<d>: del one name\n");
printf("<q>: exit\n");
printf("\nEnter the choice: ");
c = getchar();
switch(c)
{
case 'l':
{
list_all_name();
break;
}
case 'a':
{
add_one_name();
break;
}
case 'd':
{
del_one_name();
break;
}
case 'q':
{
return 0;
break;
}
default:
break;
}
}
return 0;
}
双向链表
最新推荐文章于 2023-12-20 13:35:53 发布