您好,欢迎来到99网。
搜索
您的当前位置:首页数据结构—线性结构—(单链表)

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

来源:99网

定义:

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

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

(有可能连续,有可能不连续)

存取方式:

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

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

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

单链表的两种实现形式:

不带头结点

带头结点(优)

单链表的基本操作:

头插法建立单链表:

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务