数据结构—线性结构—(单链表)

定义:

线性表的链式存储又称单链表

即:通过一组任意的存储单元来存储线性表当中的数据元素,数据元素存储的位置不一定是连续的。

(有可能连续,有可能不连续)
在这里插入图片描述

存取方式:

通过指针实现线性的逻辑关系

链表不能实现随机存取,且每个元素包含两部分,

① data     即元素值
② *next    即下一个元素的存储地址

所以,我们也可以使用一个指针用来表示单链表

在这里插入图片描述

单链表的两种实现形式:

不带头结点
在这里插入图片描述

带头结点(优)
在这里插入图片描述

单链表的基本操作:

头插法建立单链表:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

s -> next = L -> next;
L -> next = s;

头插法建立单链表:时间复杂度O(n)

LinkList List_HeadInsert(LinkList &L){
	LNode *s;int x;
	L=(LinkList)malloc(sizeof(LNode));
	L->next=NULL;
	scanf("%d",&x);
	while(x!=9999){
		s=(LNode*)malloc(sizeof(LNode));
		s->data=x;
		s->next=L->next;
		L->next=s;
		scanf("%d",&x);
	}
	return L;
}

尾插法建立单链表:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

r -> next = s;
r = s;

尾插法建立单链表:时间复杂度O(n)

LinkList List_TailInsert(LinkList &L){
	int x;
	L=(LinkList)malloc(sizeof(LNode));
	LNode *s,*r=L;
	scanf("%d",&x);
	while(x!=9999){
		s=(LNode*)malloc(sizeof(LNode));
		s->data=x;
		r->next=s;
		r=s;
		scanf("%d",&x);
	}
	r->next=NULL;
	return L;
}

按序号查找&按值查找:

在这里插入图片描述

两种查找均要遍历单链表,仅比较的数据不同
.
按序号查找需要给遍历元素计数,从而找到要找的元素
.
按值查找需要比对每个元素的属性值是否与要找的元素相同

按序号查找&按值查找:时间复杂度O(n)

按序号查找:
LNode *GetElem(LinkList L,int i){
	int j=1;
	LNode *p=L->next;
	if(i==0) return L;
	if(i<1) return NULL;
	while(p&&j<i){
		p=p->next;
		j++;
	}
	return p;
}
按值查找:
LNode *LocateElem(LinkList L,ElemType e){
	LNode *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
	}
	return p;
}

插入:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p = GetElem(L, i - 1);
s -> next = p -> next;
p-> next = s ;

插入操作:

前插法
在第 i 个位置前插入元素

前插法:

前插法:时间复杂度O(n)

后插法
在第 i 个位置后插入元素

后插法:

后插法:时间复杂度O(1)

可以利用后插法实现前插法
.
先在第 i 个位置插入元素 e
.
然后交换第 i 个位置和第 i - 1 个位置的值

删除:

删除第i个元素

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p = GetElem( L, i - 1 );
q = p -> next;
p -> next = q -> next;
free(q);

删除给定节点 *p

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

q=q->next;
p->data=p->next->data;
p->next=q->next;
free(q);

求表长:

在这里插入图片描述
求表长:时间复杂度O(n)

int count=0;
p=head;
while(p->next!=NULL){
	count++;
	p=p->next;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王跃坤

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

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

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

打赏作者

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

抵扣说明:

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

余额充值