链表操作

 

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

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

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(444) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值