链表的认识及链表元素的插入

链表的定义:

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

因为链表不用必须按顺序进行存储,因此可以对链表进行增、删、改、查等操作,下面先介绍链表的几个插入的例子:

1.链表的插入:

链表的插入可以分为头插和尾插和按位置插入,顾名思义就是从头插入元素和从尾部插入元素还有从某一位置插入;

头插法:

申请一个新节点,让头结点的指针域指向新节点的数据域,新节点的指针域保存第一个元素的地址,则插入成功;

参考代码如下:

bool InsertHead(PLink phead, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }              //判断链表是否为空

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }            //申请新节点

    pnewnode->pnext = phead->pnext;
    phead->pnext = pnewnode;     //新节点插入
    return true;
}

尾插法:

先从头开始遍历,找到链表的尾结点,尾结点的指针域保存新节点的地址,则元素插入成功 ;

参考代码如下:

bool InsertTail(PLink phead, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }         //判断链表是否为空

    PLink pCur = phead;
    while (pCur->pnext != NULL)
    {
        pCur = pCur->pnext;
    }          // 遍历整个链表,找到到尾结点

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }                 //申请新节点

    pCur->pnext = pnewnode;   // 插入新节点
    return true;
}

按位置插入:

元素插入步骤:

1.判断结构是否合理;

2.判断插入位置是否合理;

3.查找要插入位置的前置结点

4.插入

       先遍历链表,找到要插入元素的位置,将申请的新节点进行插入,遍历时应先找到插入位置的前一个结点,让其指针域保存新节点的地址,再让新节点的指针域指向下一个元素的地址,则插入成功;

  参考代码如下:

bool InsertPos(PLink phead, int pos, ELEM_TYPE val)
{
    if (phead == NULL)
    {
        return false;
    }                  // 判断结构是否合理

    if (pos  < 0 || pos > GetLength(phead))
    {
        return false;
    }                 // 判断插入位置是否合理

    PLink pfront = phead;
    for (int i = 0; i < pos; ++i)
    {
        pfront = pfront->pnext;
    }               //查找要插入位置的前置结点

    PLink pnewnode = BuyNode(val);
    if (pnewnode == NULL)
    {
        return false;
    }
    pnewnode->pnext = pfront->pnext;
    pfront->pnext = pnewnode;  //插入
    return true;
}
 

猜你喜欢

转载自blog.csdn.net/YANG_1605/article/details/84500831