双向链表学习

单向链表只能往下一个找

双向链表可以找上一个

创建双向链表的头

Dou_node *creat_doulink()
{
    Dou_node *pnode = malloc(sizeof(Dou_node));
    if(NULL == pnode)
    {
        printf("fail malloc\n");
        return NULL;
    }
    pnode -> pper = NULL;
    pnode -> pnext = NULL;
    return pnode;
}
int is_empty_doulink(Dou_node *phead)//判断链表是否为空
{
    if(NULL == phead -> pnext)
    {
        return 1;
    }
    return 0;
}

头插

int insert_head_doulink(Dou_node *phead,Data_type data)
{
    Dou_node *pinsert = malloc(sizeof(Dou_node));
    if(NULL == pinsert)
    {
        printf("fail malloc");
        return -1;
    }
    pinsert -> data = data;
    pinsert -> pper = NULL;
    pinsert -> pnext = NULL;

    if(is_empty_doulink(phead))
    {
        phead -> pnext = pinsert;
        pinsert -> pper = phead;
    }
    else
    {
        pinsert -> pnext = phead -> pnext;
        phead -> pnext -> pper = pinsert;
        phead -> pnext = pinsert;
        pinsert -> pper = phead;
    }
    return 0;
}

尾插

int insert_tail_doulink(Dou_node *phead,Data_type data)
{
    Dou_node *p = NULL;
    Dou_node *pnode = malloc(sizeof(Dou_node));
    if(NULL == pnode)
    {
        printf("fail malloc");
        return -1;
    }
    pnode -> data = data;
    pnode -> pper = NULL;
    pnode -> pnext = NULL;
    if(is_empty_doulink(phead))
    {
       phead -> pnext = pnode;
       pnode -> pper = phead;
    }
    else
    {
        p = phead;
        while(p -> pnext)
        {
            p = p -> pnext;
        }
        p -> pnext = pnode;
        pnode -> pper = p;
    }
    return 0;
}

遍历

void printfdoulink(Dou_node *phead)
{
    Dou_node *p = phead -> pnext;
    while(p)
    {
        printf("%d %s %d\n",p -> data.id,p -> data.name,p -> data.score);
        p = p -> pnext;
    }
}

Dou_node *finddoulink(Dou_node *phead,int id)
{
    Dou_node *p = phead -> pnext;
    while(p)
    {
        if(p -> data.id == id)
        {
            return p;
        }
        p = p -> pnext;
    }
    return NULL;
}

 修改

void changedoulink(Dou_node *phead, int id,int score)
{
    Dou_node *p = phead -> pnext;
    if(p = finddoulink(phead,id))
    {
        p -> data.score = score;
        return;
    }
    else
    {
        printf("not find and change\n");
    }
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值