2.3线性表——循环链表和双向链表基本操作的实现
作者:互联网
注意:以下内容均省略思路,只有代码和时间复杂度。此内容为本人学习过程中的一些学习记录,如有错误,恳请各位指正、建议,末学将感激不尽!
目录
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++语言中的&(引用符号)的说明与作用,我推荐大家通过以下内容了解:
以上就是文章的全部内容了,针对以上内容我还会继续改进和完善,希望大家能多给我提一些建议哦!
标签:线性表,DuLinkList,next,链表,prior,双向,基本操作,Tb 来源: https://blog.csdn.net/m0_57382477/article/details/120587762