头插法和尾插法

头插法和尾插法

//结构体
typedef struct DNode
{
    ElemType data;  //数据域
    struct DNode *prior; //前驱节点
    struct DNode *next; //后继节点

}DLinkNode;


//头插法
void GreateListF(DLinkNode *&L, ElemType a[],int n)
{
    //含有n个元素的数组a创建带头结点的双链表
    DLinkNode *s;
    L = (DLinkNode *)malloc(sizeof(DLinkNode)); //创建头节点(引用型)
    L->prior = L->next = NULL;     //设置为空

    for(int i = 0; i < n;i++)
    {
        s = (DLinkNode *)malloc(sizeof(DLinkNode)); //开辟节点数
        s->data = a[i];   //赋值
        //连通
        s->next = L->next; //更改s后继(前一个节点后继)
        if(L->next!=NULL) //L的后继节点存在时
        {
            L->next->prior = s; //更改L(后一个节点)前驱
        }
        L->next= s; //更改L后继
        s->prior = L; //更改s前驱
    }
}


//尾插法
void GreateListR(DLinkNode *&L,ElemType a[],int n)
{
    DLinkNode *s,*r; //r变换
    L = (DLinkNode *)malloc(sizeof(DLinkNode));
    r = L; //循环节点
    for(int i = 0 ;i < n; i++)
    {
        s = (DLinkNode *)malloc(sizeof(DLinkNode));
        s->data=a[i];   //创建节点

        r->next=s; //更改r后继
        s->prior=r; //更改s前驱
        r=s;    //更换位置

    }
    r->next=NULL; //设置尾节点为空
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值