初探双向链表

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

    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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值