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

定义:

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

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

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

存取方式:

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

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

① 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;
}

猜你喜欢

转载自blog.csdn.net/qq_43652327/article/details/105187451
今日推荐