ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-02 19:34:18  阅读:198  来源: 互联网

标签:线性表 DuLinkList next 链表 prior 双向 基本操作 Tb


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

目录

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||i<j) return ERROR;
	
	DuLinkList s;
	s=(DuLinkList)malloc(sizeof(DuLNode));
	
	s->data=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||i<j) return ERROR;

	e=p->data;
	
	p->prior->next=p->next;
	p->next->prior=p->prior;
	free(p);
	
	return OK;
}

时间复杂度:O(n)


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

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


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

标签:线性表,DuLinkList,next,链表,prior,双向,基本操作,Tb
来源: https://blog.csdn.net/m0_57382477/article/details/120587762

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有