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

news/2024/11/25 4:40:12/

数据结构–单链表的定义

本节的学习目标:

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

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

代码实现

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 带头

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

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

知识点回顾与重要考点


http://www.ppmy.cn/news/605332.html

相关文章

LeetCode简单题之无法吃午餐的学生数量

题目 学校的自助午餐提供圆形和方形的三明治&#xff0c;分别用数字 0 和 1 表示。所有学生站在一个队列里&#xff0c;每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里&#xff0c;每一轮&#xff1a; 如果队列最前…

LeetCode中等题之寻找右区间

题目 给你一个区间数组 intervals &#xff0c;其中 intervals[i] [starti, endi] &#xff0c;且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j &#xff0c;并满足 startj > endi &#xff0c;且 startj 最小化 。 返回一个由每个区间 i 的 右侧区间 的最…

Problem I Rank LED题解 - 2018年第一届GXCPC广西大学生程序设计大赛 正式赛

Problem I Rank LED题解 题目大意 ‘0’到‘9’的数字亮线依次为{6、2、5、5、4、5、6、3、7、6}。 Luras想修改每条光线的位置&#xff0c;使她的新等级尽可能小&#xff0c;同时新等级也是一个不带任何前导零的正整数。 另外&#xff0c;光线总数应与开始时相同。 官方题…

内积和外积的物理意义-数学

内积和外积的物理意义Persistently关注2018.07.31 14:28:46字数 277阅读 6,276向量的内积 abab cos(θ) 向量a和b的长度之积再乘以它们之间的夹角的余弦&#xff1b;向量内积的几何解释就是一个向量在另一个向量上的投影的积&#xff0c;也就是同方向的积特别的。如果一个向量如…

LeetCode简单题之拿硬币

题目 桌上有 n 堆力扣币&#xff0c;每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆&#xff0c;拿走其中的一枚或者两枚&#xff0c;求拿完所有力扣币的最少次数。 示例 1&#xff1a; 输入&#xff1a;[4,2,1] 输出&#xff1a;4 解释&#xff1a;第一堆力扣…

使用余弦相似度算法计算文本相似度-数学

20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势&#xff0c;相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0,1 和 1,0 tfidf用余弦相似度就足够,因为对在不同文档中相同的词的打分是一视…

LeetCode中等题之面试题 17.11. 单词距离

题目 有个内含单词的超大文本文件&#xff0c;给定任意两个不同的单词&#xff0c;找出在这个文件中这两个单词的最短距离(相隔单词数)。如果寻找过程在这个文件中会重复多次&#xff0c;而每次寻找的单词不同&#xff0c;你能对此优化吗? 示例&#xff1a; 输入&#xff1a;…