初探双向链表

      还是先来唠唠最近发生的事把。

    ok,拿到奖学金,被选为优秀团员,我一点感觉都没有。最近让我比较激动的是我参加了学校的盛特杯,这件事本来我是不想参与的,我觉得我还太弱,没有能力去做一个项目。但是导师给我电邮让我参加,我想干脆就抱个大腿吧,让大腿教教我怎么做项目,于是就找了个大二的学长。额,目前这件事还没有任何进展,可能是大腿要考研比较忙吧。由于刘同到高中母校演讲,最近又有电影上映,于是我就去买了《谁的青春不迷茫》来看。我靠,真的是一本烂的不能再烂的书啊,以后这种书坚决不自己买了,还是去图书馆看。

   今早上去图书馆对数据结构进行攻关,把双向链表的代码写出来了,双向链表就是在单向链表的基础上再加一个前驱,其他的大致都与单向链表差不多,主要包含初始化,插入删除查找的功能。

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct DulNode
{
    Elemtype data;
    struct DulNode *prior;
    struct DulNode *next;
}DulNode,*Dulinklist;
void InitDulNode(DulNode *head)// 创建一个双向链表的表头,前驱和后继都指向自己
{
    head->prior=head;
    head->next=NULL;
}

DulNode *GetElemp_dul(DulNode *head,int i)
{
    int j=1;
    DulNode *p=head->next;
    while(p!=NULL&&j<i)
    {
        p=p->next;
        j++;
    }
    if(j==i)
    {
        return p;
    }
    else
        return 0;
}

int Listinsert_Dul(DulNode *head,int pos,int e)//pos为要插入的位置,e为插入节点的值
{
    DulNode *p;
    p=GetElemp_dul(head,pos);
    if(!p)
    {
        printf("pos error!\n");
        return 0;
    }
    DulNode *s;
    if(!(s=(Dulinklist)malloc(sizeof(DulNode))))
        return 0;
    s->data=e;
    s->prior=p->prior;
    p->prior->next=s;
    s->next=p;
    p->prior=s;
    return 1;
}
void Print(DulNode *head)
{
    DulNode *p;
    p=head->next;
    while(p!=NULL)
    {
        printf("%d\t",p->data);
        p=p->next;
    }
}
void CreatDulNode(DulNode *head,int e)
{
    DulNode *p;
    p=(DulNode *)malloc(sizeof(DulNode));
    p->data=e;
    p->next=NULL;
    if(head->next==NULL)
    {
        p->prior=head;
        head->next=p;
    }
    else
    {
        head->next->prior=p;
        p->next=head->next;
        p->prior=head;
        head->next=p;
    }
}
int Listdelete_Dul(DulNode *head,int i)
{
    DulNode *p;
    p=GetElemp_dul(head,i);
    if(!p)
    {
        printf("delete pos error!\n");
        return 0;
    }
    p->prior->next=p->next;
    p->next->prior=p->prior;
    free(p);
    return 1;
}
int main()
{
    DulNode *head;
    head=(DulNode *)malloc(sizeof(DulNode));
    int i;
    InitDulNode(head);
    for(i=0;i<10;i++)
    {
        CreatDulNode(head,i);
    }
    Listinsert_Dul(head,4,100);
    Listdelete_Dul(head,4);
    Print(head);
    return 0;
}
    这代码还是花了我1个多小时才写出来的,哎,太花时间了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章