简单实现双链表---学习

时间:2022-12-10 17:42:18

链表的创立过程,其实即位小朋友玩的“手拉手”游戏,你拉着我,我拉着你,这样循环下去。

链表的创立:--数据类型

这里以‘#’来表示结束

Node * CreateList()

{

    Node *temp,*p;

    p=(Node*)malloc(sizeof(Node));

    temp=p;

    p->pro=NULL;

    while(p->data!='#')

    {

        Node *s=(Node *)malloc(sizeof(Node));

        p->next=s;

        s->pro=p;

        scanf("%c",&s->data);

        p=s;

    }

    p->next=NULL;

    return temp;

}

//查找一个双向链表的值,返回该节点,

Node * find(Node *s,Element c)

{

    Node* p=s->next;

    if(p==NULL)

        returnNULL;

    while(p->data!=c)

    {

        p=p->next;

    }

    return p;

}

//打印双向链表的值到屏幕当中来

void ListPrint(Node *p)

{

    Node *s=p->next;

    while(s->data!='#')

    {

        printf("%c ",s->data);

        s=s->next;

    }

}

//计算长度

int LengthList(Node *p)

{

    int length=0;

    Node *s=p->next;

    while(s->data!='#')

    {

        s=s->next;

        length++;

    }

    s->next=NULL;

    return length/2;

}

Node * proList(Node *p,Element c)

{

    Node* s=p->next;

    if(s==NULL)

        returnNULL;

    if(s->data==c)

    {

        s=p;

    }

    while (s->next->data!=c) {

        s=s->next;

    }

    return s;

}

//删除双向链表中一个值

Node* deleteOneDataList(Node*p,Element c)

{

    Node *head=p;

    p=p->next;

    while(p->next->data!=c)

    {

        p=p->next;

    }

    Node *d=p->next;

    Node *temp=p->next->next;

    p->next=temp;

    temp->pro=p;

    free(d);

    return head;

}

//双向链表插入一个值在指定的位置

Node* insert(Node *p,int a,Element d)

{

    int local=0;

    Node *head=p;

    Node *pro;

    Node *next;

    Node *da=(Node *)malloc(sizeof(Node));

    da->data=d;

    p=p->next;

    if(a==LengthList(p)||a>LengthList(p))

    {

        while(p->data!='#')

        {

            p=p->next;

        }

        p->next=da;

        da->pro=p;

        da->next=NULL;

    }

    else

    {

        while(local/2!=a-1)

        {

            p=p->next;

            local++;

        }

        pro=p;

        next=p->next;

        da->next=next;

        next->pro=da;

        pro->next=da;

        da->pro=pro;

    }

    return head;

}

这里只是一个简单测试下: 简单实现双链表---学习
学生正在学习的道路上,希望大家指出错误。