//歌词解析项目曾用到的链表操作函数 贴到这里
TYPE *nod_creat(int n) //创建链表节点
{ TYPE *head,*pf,*pb; int i=0; for(i=0;i<n;i++) { pb=(TYPE *)malloc(sizeof(TYPE)); if(i==0) head=pb; else pf->next=pb; printf("正在创建第%d个人的信息,还有%d个人的信息没有创建\n",i+1,n-i); puts("输入姓名:\n"); scanf("%s",pb->name); pb->id=(stu_ID++); printf("系统给学员分配的ID为: %-8d 输入电话号码 \n",pb->id); scanf("%d",&pb->tel); getchar(); puts("输入性别 f/m \n"); scanf("%c",&pb->sex); pb->next=NULL; pf=pb; } return head; }
TYPE *nod_output(TYPE *p) //遍历输出链表
{ TYPE *p_nod=p; if(p_nod==NULL) puts("error,nod is empty! \n"); else { while(p_nod) { printf("%s,%d,%d,%c\n",p_nod->name,p_nod->id,p_nod->tel,p_nod->sex); p_nod=p_nod->next; } } return p; }
TYPE *nod_check_out(TYPE *p,char *str) //链表节点查询输出
{ TYPE *p_nod=p; if(p_nod==NULL) { puts("error,nodlist is empty! \n"); return NULL; } else { /* 此处输入比较的项目,如果项目匹配则返回匹配项的节点地址 */ /* 该函数只是以字符串比较为例 完全是可以比较数字 字符的 */ while(strcmp(p_nod->name,str)!=0) { p_nod=p_nod->next; } /* 此处可以放置输出项 */ return p_nod; } }
TYPE *nod_insert(TYPE *p,TYPE *pi) //链表节点插入 一次只能插入一个节点
{ TYPE *p_nod=p; if(p_nod==NULL) { puts("error,nodlist is empty! \n"); return NULL; } else { while(p_nod->next!=NULL) { p_nod=p_nod->next; } p_nod->next=pi; pi->next=NULL; } return p; }
TYPE *nod_del(TYPE *head,int ID) //链表节点删除函数
{ TYPE *pf,*pb=head; //删除节点的查找可以有很多方法
if(pb==NULL) //本函数查找ID号来查找要删除的节点
{ puts("error,nodlist is empty! \n"); return NULL; } else { while(pb->id!=ID&&pb->next!=NULL) //查找匹配节点
{ pf=pb; pb=pb->next; } if(pb->id==ID) { if(pb==head) //判断节点是否为头节点
{ head=pb->next; } else { if(pb->next==NULL) //配短节点是否是为尾节点
pf->next=NULL; //尾节点的处理
else //中间节点的处理
pf->next=pb->next; } free(pb); } else puts("nod is not found! \n"); return head; } }
|