单链表的定义和初始化

简介: 介绍了单链表中的有头节点和无头节点

网络异常,图片无法展示
|

单链表

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

定义一个单链表

struct LNode {          //定义单链表节点类型
    ElemType data;      //每个节点存放一个数据元素
    struct LNode *next; //指针指向下一个节点
}LNode, *LinkList

增加一个新的节点:在内存中申请一个节点所需的空间,并用指针p指向这个节点

struct LNode *p=(struct LNode *) malloc(sizeof(struct LNode));

声明一个头指针L,指向单链表的第一个节点

typedef struct LNode *LinkList
LNode * L;  or  LinkList L;
//声明一个指向单链表第一个节点的指针

typedef关键字

在定义数据类型的时候经常会涉及到很多代码,typedef关键字可以将数据类型重命名

语法为:typedef <数据类型> <别名>

代码改进后:

typedef struct LNode LNode;
LNode *p=(LNode *) malloc(sizeof(LNode));

初始化链表

不带头节点的单链表

bool InitList(LinkList &L){
    L = Null;  //空表,暂时没有任何节点,此目的是为了防止脏数据
    return true;
}

判断单链表是否为空

bool Empty(LinkList L){
    return (L==Null);
}

带头节点的单链表

bool InitList(LinkList &L){
    L = (LNode *) malloc(sizeof(LNode));   //分配一个节点
    if (L==Null)        //内存不足分配失败
        return false;
    L->next = Null;     //头节点之后暂时还没有节点
    return true;
}

相比之下带头的节点写代码更方便,不带头的节点对于第一个数据节点和后续的数据节点的处理需要不同的代码逻辑。而且空表和非空表也需要不同的逻辑

目录
相关文章
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
141 0
|
存储
线性表、链表、栈和队列的初始化
线性表、链表、栈和队列的初始化
112 1
|
存储 C语言
链表—初始化指针变和创建新的节点------区别应用分析
链表—初始化指针变和创建新的节点------区别应用分析
138 0
|
设计模式 测试技术
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
在实现链表的代码中,为什么要使用`Node`类而不是直接在`LinkedList`类中定义节点?
169 1
双链表全部知识总结(初始化、插入、删除、遍历)
双链表知识总结包括思路分析、代码实现
442 0
|
C++
【C/C++】用格雷戈里公式求π
输入精度e,使用格雷戈里公式(π/4​=1-1/3+1/5+...)求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。
698 0
【C/C++】用格雷戈里公式求π
|
存储 人工智能 算法
数据结构——单链表的定义和实现
数据结构——单链表的定义和实现
438 0
数据结构——单链表的定义和实现
|
算法 前端开发 JavaScript
【前端算法】定义一个JS函数,反转单向链表
介绍链表与数组的区别,以及它们之间的联系
156 0
|
Java 中间件 关系型数据库
Java学习路线-13:链表定义与实现
Java学习路线-13:链表定义与实现
178 0