发个牢骚,我真没想过我也会有被网课整吐的一天。
我真的悟了,颓废了一个月,最后发现看书比视频更有效果
什么是单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
——百度百科
单链表的结构
-
数据(ElementType)
-
结点(Node)
1.数据域
2.指针域
一般情况下,为了处理方便,在单链表的第一个结点之前附设一个结点,称之为头结点。
头结点是在首元结点之前附设的一个结点,其指针域指向首元结点。头结点的数据元素为整数型时,头结点的数据域中可存放该线性表的长度
头指针是指向链表中第一个结点的指针。若链表设有头结点,则头指针所指结点为线性表的头结点;若链表不设头结点,则头指针所指结点为该线性表的首元结点
相关代码笔记
#include <stdio.h>
typedef struct {
int id;
char* name;
}ElementType;//元素
typedef struct LNode {
ElementType data;//结点的数据域
struct LNode* next;//结点的指针域
}LNode, * LinkList;//*LinkList等价于struct LNode *
/*链表的初始化*/
bool InitList(LinkList& L)
{
L = new LNode;//生成新结点作为头结点,用头指针L指向头结点
L->next = NULL;//头结点的指针域置空
return true;
}
/*链表的取值*/
/*
*LinkLisk L 头指针
*int i 查找第几个元素 从1开始(不包括头指针)
*ElementType& e 将找到的元素赋给e
*/
int GetElem(LinkList L, int i, ElementType& e)
{ /*
在带头结点的单链表L中根据序号i获取元素的值,用e返回L中第i个数据元素的值
1.用指针p指向首元结点,用j做计数器初值赋为1
2.从首元结点开始依次顺着链域next向下访问,只要指向当前结点的指针p不为空(NULL),并且没有
到达序号为i的结点,则循环执行以下操作
p指向下一个结点
计数器j相应加1
退出循环时,如果指针p为空,或者计数器j大于i,说明指定的序号i值不合法
(i大于表长n或i小于等于0),取值失败返回-1;否则取值成功,此时j=i时,p
所指的结点就是要找的第i个结点,用参数e保持当前结点的数据域,返回1。
*/
LNode* p =L->next; //初始化,p指向首元结点,计数器j初值赋为1
int j = 1; //计数器j相应加1
while (p != nullptr && j < i) {
p = p->next;
++j;
}
if (p == nullptr || j > i) {//判断p是否为空指针即判断了i是否大于n了, 判断j>i是判断i是否合法
return -1;//i值不合法 i>n或i<=0
}
e = p->data;
return 1;
}