Tag: 链接列表

二叉树与链表与哈希表

我正在为我正在进行的一个项目build立一个符号表。 我想知道人们对各种可用于存储和创build符号表的方法的优缺点有何看法。 我已经做了一点search,最常见的是二叉树或链表或散列表。 以上所有的优点和缺点是什么? (使用C ++)

如何在Java中创build链接列表数据结构?

在Java中build立链表的最好方法是什么?

arrays与链表

为什么有人想要在数组上使用链表? 编码一个链表无疑比使用一个数组有更多的工作,人们可能想知道什么可以certificate额外的努力。 我认为插入新元素在链表中是微不足道的,但这是数组中的一件大事。 使用链表来存储一组数据与将其存储在数组中还有其他的好处吗? 这个问题不是这个问题的重复,因为另外一个问题是关于一个特定的Java类,而这个问题是关于一般的数据结构。

为什么std :: list :: reverse具有O(n)的复杂性?

为什么C ++标准库中std::list类的反向函数具有线性运行时? 我认为对于双向链表,反向函数应该是O(1)。 倒转一个双向链表只需要切换头部和尾部的指针。

如何检测链表中的循环?

假设你有一个Java链接列表结构。 它由节点组成: class Node { Node next; // some user data } 每个节点指向下一个节点,除了最后一个节点,下一个节点为空。 说有可能列表可以包含一个循环 – 即最后一个节点,而不是一个空,有一个参考列表中的其中一个节点之前。 什么是最好的写作方式 boolean hasLoop(Node first) 如果给定的节点是带有循环的列表中的第一个,则返回true否则返回false ? 你怎么写,以便它需要一个恒定的空间和合理的时间? 下面是一个循环列表的图片:

std :: vector与std :: list与std :: slist的相对性能?

对于一个简单的链表来说,对列表元素的随机访问是不需要的,使用std::list而不是std::vector有什么显着的优点(性能或其他) 如果需要向后遍历,在迭代元素之前使用std::slist和reverse()会更有效率吗?

ArrayList与LinkedList

我在以前的post上说这个: 对于LinkedList 得到是O(n) 加上是O(1) 删除是O(n) Iterator.remove是O(1) 对于ArrayList 得到是O(1) add是O(1)分期付款,但O(n)最坏的情况,因为数组必须resize和复制 删除是O(n) 所以通过看这个,我得出的结论是,如果我只需要对我的集合中的5000000元素进行顺序插入,则LinkedList将超出ArrayList 。 如果我只是通过迭代来获取集合中的元素,即不在中间抓取元素, LinkedList仍然会超出ArrayList。 现在为了validation我的上述两个陈述,我写了下面的示例程序…但是我惊讶于我的上述陈述被certificate是错误的。 在这两种情况下ArrayList Linkedlist 。 花费比LinkedList更less的时间来添加以及从Collection中获取它们。 有什么我做错了,或者有关LinkedList和ArrayList的初始语句不适用于大小为5000000的集合吗? 我提到了大小,因为如果我将元素数量减less到50000, LinkedListperformance更好,并且初始语句成立。 long nano1 = System.nanoTime(); List<Integer> arr = new ArrayList(); for(int i = 0; i < 5000000; ++i) { arr.add(i); } System.out.println( (System.nanoTime() – nano1) ); for(int j : arr) { ; } System.out.println( […]

MIPS链表

我很困惑如何在MIPS中创build结构。 我想创build一个链表实现,它计算存储的string的长度,并按照存储顺序对它们进行sorting。 这是我的代码到目前为止: # Global symbols # # string routines .globl read_string .globl strcmp .globl strlen .globl trim .globl strloop .globl replace # list routines .globl insert .globl insert_here .globl print_list .globl main # pseudo-standard library .globl get_string .globl malloc .globl print_newline .globl print_string ################################################## # Constants # .data MAX_STR_LEN: .word 50 STR_NEWLINE: .asciiz "\n" […]

何时在数组/列表上使用链表?

我使用了大量的列表和数组,但是我还没有碰到过一个场景,其中的数组列表不能像链表一样容易使用。 我希望有人能给我一些关于链表何时更好的例子。

如何仅使用两个指针来反转单向链表?

我会想知道是否存在一些逻辑来扭转链接列表只有两个指针。 以下用于使用三个指针(即p,q,r)来反转单个链表: struct node { int data; struct node *link; }; void reverse() { struct node *p = first, *q = NULL, *r; while (p != NULL) { r = q; q = p; p = p->link; q->link = r; } q = first; } 有没有其他的替代scheme来扭转链表? 就时间复杂性而言,扭转单链表的最佳逻辑是什么?