栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2.3线性表——循环链表和双向链表基本操作的实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2.3线性表——循环链表和双向链表基本操作的实现

注意:以下内容均省略思路,只有代码和时间复杂度。此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正、建议,末学将感激不尽!

目录

1.两个循环链表的合并

2.双向链表的结构定义

3.双向链表结构的对称性

4.双向链表的插入

5.双向链表的删除


1.两个循环链表的合并
linkList Connect(linkList Ta,linkList Tb)//Ta和Tb是两个尾指针 
{
	p=Ta->next;//标记头结点 

	Ta->next=Tb->next->next;//a表尾连b表头

	free(Tb->next);//释放b头结点

	Tb->next=p; 

	return Tb; 	
}

注意:这里的两个循环链表均带有尾指针

时间复杂度:O(1)

2.双向链表的结构定义
tpyedef struct DuLNode{
  Elemtpye data;
  struct DuLNode *prior,*next;
} DuLNode,*DulinkList;

3.双向链表结构的对称性
p->next->prior=p=p->prior->next 

此性质是双向链表结构的特性,对于双向链表操作的表示与实现尤为重要哦! 

4.双向链表的插入
Status DuListInsert(DulinkList L,int i,Elemtpye e) 
{
	int j=1;
	DulinkList p;
	
	p=L->next;
	p->prior=L;

	while(p&&i>j)
	{
		p=p->next;
		j++;
	}
	
	if(!p||idata=e;
	
	s->prior=p->prior;
	p->prior->next=s;
	p->prior=s;
	s->next=p;
	
	return OK;
}

注意:这是是在第i个元素之前插入

时间复杂度:O(n)

5.双向链表的删除
Status DuListInsert(DulinkList &L,int i,Elemtpye &e) 
{
	int j=1;
	DulinkList p;
	
	p=L->next;
	p->prior=L;

	while(p&&i>j)
	{
		p=p->next;
		j++;
	}
	
	if(!p||idata;
	
	p->prior->next=p->next;
	p->next->prior=p->prior;
	free(p);
	
	return OK;
}

时间复杂度:O(n)


对于C/C++语言中的&(引用符号)的说明与作用,我推荐大家通过以下内容了解:

C 语言笔记 —— 函数参数带 & 和不带 & 的区别


以上就是文章的全部内容了,针对以上内容我还会继续改进和完善,希望大家能多给我提一些建议哦!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号