数据结构笔记-单链表的初始化与取值

发个牢骚,我真没想过我也会有被网课整吐的一天。

我真的悟了,颓废了一个月,最后发现看书比视频更有效果

什么是单链表

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
——百度百科

单链表的结构

  1. 数据(ElementType)

  2. 结点(Node)

    1.数据域
    2.指针域

一般情况下,为了处理方便,在单链表的第一个结点之前附设一个结点,称之为头结点

头结点是在首元结点之前附设的一个结点,其指针域指向首元结点。头结点的数据元素为整数型时,头结点的数据域中可存放该线性表的长度

头指针是指向链表中第一个结点的指针。若链表设有头结点,则头指针所指结点为线性表的头结点;若链表不设头结点,则头指针所指结点为该线性表的首元结点

相关代码笔记

#include 
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;
}

你可能感兴趣的:(笔记,C++)