注册 登录
编程论坛 数据结构与算法

双链表问题

丢了幸福 发布于 2010-08-14 16:46, 593 次点击
构造一个带头结点的双链表,实现前插,后插,删除一系列操作。要带头结点啊!谢谢!
2 回复
#2
lftp20202010-08-14 17:24
作业贴,还是放到C语言版吧,人多
#3
aizuoai1232010-08-14 22:45
struct Lnode
{
    char data;
    Lnode *prior;
    Lnode *next;
};
void CreateList(Lnode * &head,char a[],int n)//尾插法创建链表
{
    Lnode *p,*s;
    int i=0;
    head=(Lnode *)malloc(sizeof(Lnode));
    head->next=NULL;
    head->prior=NULL;
    s=head;
    while(i<n)
    {
        p=(Lnode *)malloc(sizeof(Lnode));
        p->data=a[i];
        p->next=s->next;
        p->prior=s;
        s->next=p;
        s=p;
        i++;
    }
}

int ListInsert(Lnode *&head,int i,char e)//插入列表
{
    Lnode *p,*s;
    int k=0;
    p=head;
    while(k<i-1&&p!=NULL)
    {
        k++;
        p=p->next;
    }
    if(p==NULL)
        return 0;
    else
    {
        s=(Lnode *)malloc(sizeof(Lnode));
        s->data=e;
        s->next=p->next;
        if(p->next!=NULL)p->prior=s;
        s->prior=p;
        p->next=s;
        return 1;
    }
}



int ListDelete(Lnode *&head,int i,char &e)//删除列表
{
    Lnode *p=head,*s;
    int k=0;
    while(k<i-1&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL)
        return 0;
    else
    {
        s=p->next;
        if(s==NULL)
            return 0;
        e=s->data;
        p->next=s->next;
        if(p->next!=NULL)p->next->prior=p;
        free(s);
        return;
    }
}
1