#include "stdio.h"#include#include"string.h"typedefstructNAME{char *name;struct NAME *preced; //上个name链表成员
struct NAME *next; //下个name链表成员}T_NAME,*PT_NAME;
PT_NAME g_ptNameListHead=NULL; //链表头
voidadd_LinkList(PT_NAME nameNew)
{
PT_NAME ptTamp;int i=0;if(g_ptNameListHead==NULL) //第一次添加链表{
g_ptNameListHead=nameNew;return;
}else{
ptTamp=g_ptNameListHead;while(ptTamp->next) //下个链表成员是否为空{
ptTamp=ptTamp->next;
}
ptTamp->next=nameNew; //添加下个链表成员
nameNew-> preced= ptTamp; //在下个链表成员里添加上个链表
return;
}
}void add_name(charstr[])
{
PT_NAME ptTamp;char *p;
p=(char *)malloc(strlen(str));
strcpy(p,str);
ptTamp=(PT_NAME)malloc(sizeof(T_NAME));
ptTamp->name=p;
ptTamp-> preced=NULL;
ptTamp-> next=NULL;
add_LinkList(ptTamp);//添加链表}/*从链表里找到name位置*/PT_NAME find_name(charstr[])
{
PT_NAME ptTamp;if(g_ptNameListHead==NULL)returnNULL;
ptTamp=g_ptNameListHead;while(ptTamp)
{if(strcmp(ptTamp->name,str)==0) //find{returnptTamp;
}elseptTamp=ptTamp->next;
}returnNULL;
}int del_name(charstr[])
{
PT_NAME ptTamp;
PT_NAME ptLast;
PT_NAME ptNext;
ptTamp=find_name(str);if(!ptTamp)return -1;if(ptTamp==g_ptNameListHead) //若去掉的是链表头{
g_ptNameListHead=ptTamp->next; //指向下个链表成员}else{/*获取上个链表成员和下个链表成员*/ptLast=ptTamp->preced;
ptNext=ptTamp->next ;/*去掉当前链表成员*/ptLast->next=ptNext;
ptNext->preced=ptLast;
}
free(ptTamp->name);
free(ptTamp);return 0;
}void List_name(void)
{int i=0;
PT_NAME ptTamp=g_ptNameListHead;while(ptTamp)
{
printf(" %s\n",i,ptTamp->name);
ptTamp=ptTamp->next;
i++;
}
}void scanf_name(charcmd)
{char name[128];switch(cmd)
{case 'a': //add{
printf("please enter name:\n");
scanf("%s",name);
add_name(name);
printf("add %s OK\n",name);break;
}case 'd': //del{
printf("please enter name:\n");
scanf("%s",name);if(del_name(name)<0)
{
printf("del %s error\n",name);
}elseprintf("del %s OK\n",name);break;
}case 'l': //listList_name();break;
}
}int main(int argc, char **argv)
{charc;while(1)
{
printf("**********************\n");
printf(" List all the names\n");
printf(" add one name\n");
printf(" del one name\n");
printf(" quit\n");
printf("**********************\n");do{
scanf("%c",&c);
}while(c!='a'&&c!='d'&&c!='q'&&c!='l');switch(c)
{case 'a':case 'l':case 'd':scanf_name(c); break;case 'q':return 0;default : break;
}
}
}