数据结构--单链表的定义

数据结构–单链表的定义

本节的学习目标:

单链表的定义(如何用代码实现)

优点:不要求大片连续空间,改变容量方便
缺点:不可随机存取,要耗费一定空间存放指针

代码实现

struct LNode
{
    ElemType data;  //数据域
    struct LNode *next; //指针域
};

struct LNode *p = (struct LNode*)malloc(sizeof(struct LNode));
//增加一个新的结点:在内存中申请一个结点所需空间,并用指针p指向这个结点

为了方便 我们经常使用typedef

t y p e d e f < 数据类型 > < 别名 > \color{purple}typedef <数据类型> <别名> typedef<数据类型><别名>

代码一:

struct LNode
{
    ElemType data;  //数据域
    struct LNode *next; //指针域
};

typedef struct LNode LNode;
typedef struct LNode* LinkList;

代码二:

typedef struct LNode
{
    ElemType data;  //数据域
    struct LNode *next; //指针域
} LNode, *LinkList;

代码一与代码二是等价的
我们一般使用代码二

如何表示一个单链表

要表示一个单链表时,只需声明一个头指针L,指向单链表的第一个结点

LNode * L; //声明一个指向单链表第一个结点的指针
//或:
LinkList L; //声明一个指向单链表第一个结点的指针
// 这个可读性更强

不带头结点的单链表

typedef struct LNode
{
    ElemType data;  //每个节点存放一个数据元素
    struct LNode *next; //指针指向下一个节点
}LNode, *LinkList;

bool Empty(LinkList L) //判断单链表是否为空
{
    return L == NULL;
}
void InitList(LinkList&L)
{
    L = NULL;
}

int main()
{
    LinkList L; //声明一个指向单链表的指针
    InitList(L);  //初始化一个空表
    // ... ...

    return 0;
}

带头结点的单链表

typedef struct LNode
{
    ElemType data;  //每个节点存放一个数据元素
    struct LNode *next; //指针指向下一个节点
}LNode, *LinkList;

bool Empty(LinkList L) //判断单链表是否为空
{
    return L->next == NULL;
}
bool InitList(LinkList&L)
{
    L = (LNode *)malloc(sizeof(LNode)); //分配一个头结点
    if (L == NULL)  //内存不足,分配失败
        return false;
    L->next = NULL; //头结点之后暂时还没有节点
    return true;
}

int main()
{
    LinkList L; //声明一个指向单链表的指针
    InitList(L);  //初始化一个空表
    // ... ...

    return 0;
}

不带头 VS 带头

带头结点,写代码更方便
不带头结点,写代码更麻烦
对第一个数据结点和后续数据结点的处理需要用不同的代码逻辑
对空表和非空表的处理需要用不同的代码逻辑

一般我们使用带头结点的单链表

知识点回顾与重要考点

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joanh_Lan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值