问题描述在电路分析中,通常以图论为数学工具,进行建模,求解。我们只研究二端元件,可以将电路中的每一个元件用一条边来表示,元件的端点用顶点来表示。

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

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

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

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

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

类似于邻接表。

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

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

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

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

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

一个节点:

多个节点:

实现代码如下:

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

总结显然使用循环双向链表无论是在时间上还是空间上都是最好的,而且实现起来很简单,不容易出错。在后续的计算中,循环双向链表完全能够胜任。

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

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

  1. 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...

    一.前言 链表是基本的数据结构之一,它与数组不同,数组在内存中存储,需要一块连续的内容空间来存储,对内存的要求比较高.例如我们需要 100MB 大小的数组,内存中就必须有一段连续的 100MB 的内存 ...

  2. 队列练习之Example005-Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法

    Example005 题目 Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法. 分析 主要考查对队列和栈的特性与操作.由于对队列的一系列操作不可能将其中的元素全部逆置,而栈可以将入栈的元素 ...

  3. 试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数

    试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数 data segment data ends stack segment stack dw 30h dup ...

  4. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来

    试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来 DATA SEGMENT DATA ENDS STACK SEGMENT STACK ENDS CODE SEGMENT ASSUM ...

  5. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  6. AX寄存器中存放着16位二进制数。试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现

    [微机原理]-汇编题 AX寄存器中存放着16位二进制数.试编写一个汇编语言程序,将这4位十六进制数分别转换为相应的ASCⅡ码,并依次存放到PLUS数组的4个字节中去,要求用调用子程序的方法实现. 方法 ...

  7. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。(两种方法/每步详解)

    试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来. 小写变大写的实现方法: 1.SUB AL,32 ; 只能满足于输入只是小写的时候 2. AND AL,11011111B ; 该方 ...

  8. java中输出5个数_编写一个程序,要求用户输入5个数字,并输出这些数字中最大的数字和这些数字中最小的数字...

    编写一个程序,要求用户输入5个数字,并输出这些数字中最大的数字和这些数字中最小的数字 . 因此,例如,如果用户键入数字2456 457 13 999 35,则输出将如下所示:最大数字是2456,最小数 ...

  9. 4.请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。

    4.请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中"a"到"z"26个字母各自出现的次数,并依次放在pp所指数组中. ...

最新文章

  1. 马斯克为了解决堵车挖的隧道,已经堵上了
  2. Linux(CentOS)中常用软件安装,使用及异常——MySQL, VmTools
  3. mysql学习笔记06分组语句的使用
  4. Linux kernel中常见的宏整理
  5. 与素数有关的一些性质及证明(一)
  6. MongoDB 的分片技术
  7. python中质数的表达方式_python求质数的3种方法
  8. KVM详解(三)——KVM创建虚拟机
  9. 根据两点经纬度计算距离和角度——java实现
  10. log4j的使用配置
  11. 邮件合并保存为一个个单独的文档_巧用WPS“邮件合并”功能,让工作更加高效...
  12. 互联网大厂职级对应薪资一览表
  13. 未来测试软件推荐,未来函数检测工具优化版(支持所有股软未来检测)
  14. ctab法提取dna流程图_CTAB法提取DNA
  15. 成都盛迈坤电商:提高店铺商品评分的方法
  16. 企业为什么要选择人力外包?好处与坏处
  17. nginx下使用SSI
  18. 我的世界命令计算机,我的世界:别瞎输入指令,游戏变得一片混乱,电脑处于崩溃边缘!...
  19. 智云通CRM:掌握3个心理暗示,有效增进你和客户的关联性
  20. 【每日一词】subservient

热门文章

  1. 搜索引擎平台化的构想
  2. 《iPhone与iPad开发实战—iOS经典应用剖析》连载二
  3. [分享]写出健壮的Bash脚本
  4. Servlet 工作原理解析
  5. Web新动力 ——Ajax
  6. Visual Studio 2005 Team System: Demo Videos
  7. UIButton的重复点击
  8. Django之ModelForm验证
  9. 打开FTP时,让文件以文件夹的形式显现
  10. 售前工程师的成长(五)---一个老员工的经验之谈