单链表的基本操作

前言:
链表对于大多数同学来说可能都是一个大难题,无论是以前C语言,还是现在的数据结构,似乎都让同学们感觉到十分困难。甚至有这种感觉:自己动手编代码的时候,完全不知道怎么编。为了方便大家理解,我用较简单的思维总结了一下,希望对大家有帮助。

再次说明:
以下内容仅仅是个人的一些见解,上不得台面,真正的代码实现还是要看那些大佬的博客。

首先是单链表存储结构的类型定义,我们先来想一想,一个链表,它的每个结点可以分为两个部分,即数据域和指针域。所以我们就定义了一个结构体,包含数据域和指针域这两个元素。

typedef struct LNode{
	ElemType data;		//结点的数据域 
	struct LNode *next;		//结点的指针域 
}LNode,*LinkList;			//LinkList相当于LNode * 
LinkList L;					//LinkList L相当于LNode *L 

typedef在这里的作用是“起小名”,即把这个结构体又叫做LNode,这样可以极大的方便我们的编程。除此之外,链表刚开始需要一个头指针,所以我们在这里将其一并定义出来。

我们现在再来回顾一下链表的定义过程:大家在脑海中自行脑补链表的样子,是不是每个结点有两个部分,分别存放数据和指针。另外,它还要一个头指针。所以,我们可以很清晰的将其过程理解并运用起来。

然后是单链表的初始化,初始化其实就是构造一个空的单链表,这个比较简单,所以不再详细说明。

接下来到了最为重要的点:单链表的创建。假设我要将n个元素接上去,那么只需要循环n次就可以了。由于前面初始化的时候,我们已经有了一个头结点,所以接下来我们需要申请内存空间,有了空间之后,我们就可以把数存放进去。那么现在,我们已经有了许多个结点,但是他们还没有连起来,因此,我们需要将其连起来以形成链表。

CreatList(&L,n)
{	//输入n个元素的值,建立带头节点的单链表L 
	L=new LNode;	//用L指向新生成的头结点 
						//C语言:L=(LNode*)malloc(sizeof(LNode)) 
	L->next=NULL; 		//头结点指针置为空
	r=L;				//让尾指针r指向头结点
	for(i=0;i<n;++i)
	{
		p=new LNode;	//用p指向新生成的头结点 
		cin>>p->data;
		p->next=NULL;	//输入值,赋给(*P).data,(*p).next 
		r->next=p;		//将新结点*p接到尾结点*r之后 
		r=p;
	 } 
}

我们这个最后一行的目的是为了尾部值的更新,由于我们在接的时候,原本的尾指针现在就不再是尾指针了,因此我们需要对其进行更新。以确保r所代表的指针无论何时都是尾指针。

对于单链表的基本操作,我只总结到这里,我知道肯定有很多大佬看到了会笑话我,不过,如果发现错误的话,请一定要告诉我,毕竟我初学编程,很多地方都难免会出错。

希望我的说明能够帮助你理解。
本文章原创,转载请注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值