初探双向链表

来源:互联网 发布:保定seo外包 编辑:程序博客网 时间:2024/05/17 09:27

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

    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个多小时才写出来的,哎,太花时间了。

1 0