On 7/12/16 1:05 AM, WhatMeWorry wrote:
On Monday, 11 July 2016 at 19:07:51 UTC, ketmar wrote:
list slices are not random-access ranges, thus they can't be sorted
in-place (this is what std.algorithm.sort does). so the only way is to
convert list to array, sort it, and make a list from sorted array.
probably not something you want. ;-)

this is common for any "traditional" linked list implementation:
random access is very costly, thus even if it is implemented, it's
better to not use it. SList and DList are "traditional" lists without
any fancy algorithms inside (like finger trees or skip lists).

you may want to use arrays instead (it is often more efficient anyway,
especially if you don't need to insert elements in the middle of the
array), or associative arrays.

If I may deviate from the discussion a bit,are there any real world
scenarios where the SList and DList (that is, "traditional" linked
lists) is superior to fixed, dynamic or associative arrays?

IMO, singly linked lists are almost always better as home-grown types. This is because there is too much overhead for a generic "list", and it almost never does everything you need it to. Just about the only real good use for a generic singly-linked list is a stack, though arrays can cover that. Where singly-linked lists may be better is if you are moving pre-allocated nodes onto the stack and don't want to allocate space for them (or change their address). Again, a home-grown version will do better here too.

A dual-linked list, on the other hand, is not as easy to write, and functions well as a generic container. With O(1) front/back insertion and O(1) front/back removal, it makes a great base for a FIFO queue.

-Steve

Reply via email to