数据结构:单链表(王道2022)

本文详细介绍了单链表的概念,包括带头节点和不带头节点的定义。重点讲解了单链表的插入操作,如按位序插入、指定节点前后插,删除操作如按位序删除、指定中间和最后节点删除,以及查找操作和链表长度的计算。此外,还提到了单链表的建立方法,如尾插法和头插法,并提示头插法可用于链表逆置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表

用代码定义一个单链表

//用代码定义一个单链表
struct LNode{
   
	ElemType data; //数据域,定义单链表的节点类型
	struct LNode *next; //指针域,指针指向下一个结点 
}; 

//增加一个新的节点,在内存中申请一个结点所需空间,并用指针*p指向这个结点 
struct LNode *p = (struct LNode*)malloc(sizeof(struct LNode)); 

不带头节点的单链表

typedef struct LNode{
   
	ElemType data;
	struct LNode *next;
}LNode,*LinkList; 

//初始化一个空链表
bool InitList(LinkList &L){
   
	L = NULL; //空链表,暂时没有其他节点 
} 

//判断单链表是否为空
bool Empty(LinkList L){
   
	if(L->next == NULL) return true;
	else return false;
} 

void test(){
   
	LinkList L;
	InitList(L);
}

插入

按位序插入(带头结点)

//按位序插入,在表中的第i个位置插入元素e

//带头节点

typedef struct LNode{
   
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

bool ListInsert(LinkList &L,int i,ElemType e){
   
	if(i < 1){
   
		return false;
	} 
	LNode *p; //指针p指当前扫描到的结点
	int j = 0; //当前p指向的第几个结点 
	p = L; //L指向头结点,头结点是第0个结点,不存数据
	while(p!=NULL && j<i-1){
   
		p = p->next;
		j++; 
	} 
	
	if(p==NULL){
    //i值不合法 
		return false;
	}
	LNode *s = (LNode*)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next; 
	p->next = s; //s连接到p结点之后 
	return true; 
} 
 

分析:

  • 如果i = 1(插在表头)
    时间复杂度:O(1)
  • 插在表尾
    时间复杂度:O(n)

平均时间复杂度:O(n)

插入位置 时间复杂度
插在表头 O(1)
插在表尾 O(n)

按位序插入(不带头结点)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丨喵咕酱丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值