单链表的基本操作C/C++代码实现

本文介绍了单链表的插入和删除操作,强调了链表在确定位置访问时的时间复杂度为O(n),但在插入和删除时时间复杂度为O(1)。适合频繁进行插入或删除的线性表。文章提供了代码示例,并提到头插法和尾插法将在后续文章讨论。
摘要由CSDN通过智能技术生成

插入:

在这里插入图片描述

删除:

在这里插入图片描述

线性表的链式存储特点:

链表是一种顺序存取结构,按位置访问链表中第i个元素时,只能从表头开始依次向后遍历链表,直到找到第i个位置上的元素,时间复杂度为O(n), 即取值操作的效率低。但在确定插入或删除的位置后,插入或删除操作无需移动数据,只需要修改指针, 时间复杂度为0(1)。

基于此,若线性表的主要操作是和元素位置紧密相关的这类取值操作,很少做插入或删除时, 宜采用顺序表作为存储结构。 对于频繁进行插入或删除操作的线性表,宜采用链表作为存储结构。

代码如下:

注意:删除算法中的循环条件(p->next&&j<i-1)和插入算法中的循环条件(p&&(j<i-1))是有所区别的。因为插入操作中合法的插入位置有n+l个,而删除操作中合法的删除位置只有n个。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 100
#define ElemType int
#define Status int

//单链表的数据结构
typedef struct LNode
{
   
	ElemType data;
	struct LNode *next;
}LNode, *LinkList;



//初始化
int  InitList(LinkList &L)
{
   
	L = (LNode *)malloc(sizeof(LNode));
	L->next = NULL;
	return 1;
}

//输出
void PrintList(LinkList L)
{
   
	printf("当前单链表的所有元素:");
	LNode *p;
	p = L->next;
	while (p != NULL)
	{
   
		printf("[%d] ", p->data);
		p = p->next;
	}
	printf("\n");
}

//尾插法创建单链表
int Create(LinkList &L)
{
   
	int n, e;
	LNode *temp = L;//声明一个指针指向头结点,用于遍历链表   

	printf("请输入要输入元素的个数:")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值