试编写一个将双向循环链表逆置的算法_循环双向链表在电路计算中的应用

本文探讨了在电路计算中如何使用双向循环链表存储端点连接关系,强调其连接和断开操作的时间复杂度及空间效率,并提供了实现代码,指出理解并灵活运用数据结构和算法的重要性。
摘要由CSDN通过智能技术生成
问题描述 在电路分析中,通常以图论为数学工具,进行建模,求解。 我们只研究二端元件,可以将电路中的每一个元件用一条边来表示,元件的端点用顶点来表示。

元件的端点和端点是可以连接在一起的,比如导线的端点连接器材的接线柱,当两个端点连接在一起时,我们怎么来存储端点之间的关系,如何执行连接和断开操作。

方法1 每个顶点维护一个数组,与该点连接的顶点存到数组里。

连接一个顶点的时间复杂度是O(n)。

断开一个顶点的时间复杂度是O(n²)。(数组删除一个元素本身的时间复杂度是O(n))

存储所有顶点需要的空间是n²。

类似于邻接表。

实现起来比较复杂,有兴趣可以自己试试。

循环双向链表 循环双向链表可以自行搜索学习。

连接一个顶点的时间复杂度是O(1)。

断开一个顶点的时间复杂度是O(1)。

存储所有顶点需要的空间是n。

一个节点:

b808b7505f84b7ceebe0ed993a904a75.png

多个节点:

7c3ed4206be94e2b4a17e089f33c8ebd.png

实现代码如下:

class ListNode{
public next: ListNode;
public prev: ListNode;
constructor() {
this.next = this;
this.prev = this;
}
public destroy() {
this.next = null;
this.prev = null;
}
public connect(node: ListNode): void {
const next1: ListNode = this.next;
const next2: ListNode = node.next;
this.next = next2;
next2.prev = this;
node.next = next1;
next1.prev = node;
}
public disConnect(): void {
this.prev.next = this.next;
this.next.prev = this.prev;
this.next = this;
this.prev = this;
}
}
总结 显然使用循环双向链表无论是在时间上还是空间上都是最好的,而且实现起来很简单,不容易出错。 在后续的计算中,循环双向链表完全能够胜任。

数据结构和算法就像孙子兵法一样,背诵容易,实战很难。要做到在合适的场景应用合适的数据结构和算法,并能适当的进行结合、扩展。

2d335df41c7a857dcb08dbfec8960a29.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值