C++中单链表的建立和操作

本文介绍了如何在C++中建立和操作单链表,包括定义链表数据结构,追加结点,插入头结点,按照结点序号和关键字查询,插入结点,删除结点,计算链表长度以及显示所有结点的方法。示例代码详细展示了每个操作的实现过程。
摘要由CSDN通过智能技术生成

准备数据

准备在链表操作中需要用到的变量及数据结构

示例代码如下:

struct Data			//数据结点类型 
{
	string key;		//关键字 
	string name;
	int age;
};
struct CLType		//定义链表结构 
{
	Data nodeData;
	CLType *nextNode;
};

 

定义了链表数据元素的类型Data以及链表的数据结构CLType。结点的具体数据保存在一个结构Data中,而指针nextNode用来指向下一个结点。

我们可以认为,该链表是一个班级学生的记录,其中key表示学号,name为学生的名字,age为年龄。

追加结点

追加结点就是在链表末尾增加一个结点。表尾结点的地址部分原来保存的是空地址NULL,此时需要将其设置为新增结点的地址(即原表尾结点指向新增结点),然后将新增节点的地址部分设置为空地址NULL,即新增结点为表尾。

由于一般情况下,链表只有一个头指针head,要在末尾添加结点就需要从头指针head开始逐个检查,直到找到最后一个结点(即表尾)。

追加结点的操作步骤如下:

(1)首先分配内存地址,保存新增结点。

(2)从头指针head开始逐个检查,直到找到最后一个结点(即表尾)。

(3)将表尾结点的地址设置为新增结点的地址。

(4)将新增结点的地址部分设置为空地址NULL,即新增结点成为表尾。

示例代码如下:

CLType * CLAddEnd(CLType *head,Data nodeData)
{
	CLType *node,*htemp;
	if(!(node = new CLType))
	{
		cout<<"分配内存失败!"<<endl;		//分配内存失败 
		return NULL; 
	}
	else
	{
		node->nodeData = nodeData;			//保存结点数据 
		node->nextNode = NULL; 				//设置结点指针为空,即作为表尾 
		if(head == NULL)						//当链表是空表的时候 
		{
			head = node;
			return head;
		}
		htemp = head;
		while(htemp->nextNode != NULL)			//查找链表的末尾
		{
			htemp = htemp->nextNode;	
		}
		htemp->nextNode = node;
		return head; 
	} 
	
}


输入参数head为链表头指针,输入参数nodeData为结点保存的数据。程序中,使用new关键字申请动态空间,如果内分配成功,node中将保存指向该内存区域的指针。

然后,将传入的nodeData保存到申请的内存区域,并设置该结点指向下一结点的指针值为NULL。

插入头结点

插入头结点就是在链表首部添加结点的过程,和在表尾插入结点相反,这个操作是在表头上插入结点,作为头结点。

插入头结点的步骤如下:

(1)首先分配内存,保存新增的结点。

(2)使新增姐弟那指向头指针head所指向的结点

(3)然后使头指针head指向新增结点

示例代码如下:

CLType *CLAddFirst(CLType *head,Data nodeData)
{
	CLType *node;
	if(!(node = new CLType))
	{
		cout<<"分配内存失败"<<endl;
		return NULL;
	}
	else
	{
		node->nodeData = nodeData;		//保存结点数据 
		node->nextNode = head;		//指向头指针所指向的指针 
		head = node;			//头指针指向新增结点 
		return head;
	} 
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值