手记

【九月打卡】第4天【养成记】嵌入式挑战第4天,数据结构-线性表之单链表2

1.单链表操作

1.判空

int IsEmptyList(LinkList L)
{
    return (L->next == NULL ? 1 : 0);
}

2.删除


添加一个标志位flag用于判断删除的数据是否存在

int DeleteDataList(LinkList L, ElemType data)
{
    LinkList p = L, q; // p指向头结点
    int flag = 0;
    if (IsEmptyList(L))
    {
        return -1; //空链表返回-1
    }
    while (p->next != NULL)
    {
        if (p->next->data == data)
        {
            q = p->next;
            p->next = q->next;
            free(q);
            q = NULL;
            flag = 1;
        }
        else
        {
            p = p->next;
        }
    }
    if (flag == 0)
    {
        return -2;
    }
    else
    {
        printf("deletd %d success!\n", data);
    }
    return 0;
}

3.逆序

首结点data域置为NULL,从首节点后面一个元素开始遍历插入头结点后面。

void ReserveList(LinkList L)
{
    LinkList p = L->next->next, q;
    L->next->next = NULL;

    while (p != NULL)
    {
        q = p->next;
        p->next = L->next;
        L->next = p;
        p = q;
    }
}

4.清空

从头结点开始遍历释放

void ClearList(LinkList L)
{
    LinkList p = L, q;
    while (p != NULL)
    {
        q = p->next;
        free(p);
        p = q;
    }
}

2.单向循环链表

就用一句话总结:单链表尾结点的指针域存放头节点的地址,这种首尾相连的链表,叫做单向循环链表。

0人推荐
随时随地看视频
慕课网APP