c实现双向链表代码

双向链表:next指向下一个节点,front指向前一个节点

双链表原理图:
这里写图片描述

//  main.c
// 双链表
//  Created by fzl
//  Copyright ©  fzl All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct NB
{
    int class;
    char name[20];
}NB;

typedef struct LINK
{
    NB data;
    struct LINK *front;
    struct LINK *next;
}LINK,*pLINK;


/*
 创建双链表
 */

pLINK createDlist(pLINK head)
{

    if(head==NULL)
    {
        head=(pLINK)malloc(sizeof(LINK));
        head->front=NULL;
        head->next=NULL;
    }
    return head;

}

NB getData()
{
    NB nb;
    printf("请输入信息[班级 姓名]:");
    scanf("%d%s",&nb.class,nb.name);
    return nb;
}


/**
 插入信息:头插,
 */

pLINK insertData(pLINK head)
{

    if(head==NULL)
    {
        head=createDlist(head);
    }
    pLINK p=(pLINK)malloc(sizeof(LINK));
    p->data=getData();

    if(head->next==NULL)
    {
        p->next=head->next;
        head->next=p;
        p->front=head;
        return head;
    }
    p->next=head->next;
    head->next->front=p;
    head->next=p;
    p->front=head;
    return head;

}

/*
打印数据
 */
void printData(pLINK head)
{
    if(head==NULL||head->next==NULL)
    {

        printf("无信息打印\n");
        return;
    }

    pLINK temp=head->next;
    for (; temp!=NULL; temp=temp->next)
    {
        printf("[%d %s]----->",temp->data.class,temp->data.name);
    }
    printf("NULL\n");

}


void deleteData(pLINK head)
{
    if(head==NULL||head->next==NULL)
    {
        printf("无信息删除\n");
        return;
    }
    char name[20];
    printf("请输入要删除人的姓名:");
    scanf("%s",name);

    pLINK temp;
    for (temp=head->next; temp!=NULL; temp=temp->next)
    {
        if(strcmp(temp->data.name,name)==0)
        {
            pLINK front=temp->front;

            pLINK next=temp->next;

            front->next=next;
            next->front=front;

            free(temp);
            return;

        }
    }

    if(temp==NULL)
    {
        printf("查无此人\n");
    }

}

int main()
{

    pLINK head=NULL;
    head=createDlist(head);

    insertData(head);
    insertData(head);
    insertData(head);
    printData(head);

    deleteData(head);
    printData(head);
    return 0;
}
发布了30 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/fzl_blog/article/details/69062833