Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1643946
  • 博文数量: 245
  • 博客积分: 10378
  • 博客等级: 上将
  • 技术积分: 2571
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 08:19
文章分类

全部博文(245)

文章存档

2013年(4)

2012年(8)

2011年(13)

2010年(68)

2009年(152)

分类: C/C++

2009-03-31 16:30:19

 

//歌词解析项目曾用到的链表操作函数  贴到这里

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;
    }
}

阅读(1159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~