Doubly-linked list/Element definition: Difference between revisions
Doubly-linked list/Element definition (view source)
Revision as of 00:42, 14 March 2020
, 4 years agoRename Perl 6 -> Raku, alphabetize, minor clean-up
(Add Factor) |
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
||
Line 53:
Ada's standard container library includes a generic doubly linked list. The structure of the link element is private.
=={{header|ALGOL 68}}==
Line 130 ⟶ 129:
void *data;
size_t type;
};</lang>
Line 156 ⟶ 145:
}
}</lang>
=={{header|C++}}==
C++ has doubly linked list class template in standard library. However actual list noded are treated as implementation detail and encapsulated inside list. If we were to reimplement list, then node could look like that:
<lang cpp>template <typename T>
struct Node
{
Node* next;
Node* prev;
T data;
};</lang>
=={{header|Clojure}}==
Line 223 ⟶ 222:
<lang Erlang>
new( Data ) -> erlang:spawn( fun() -> loop( Data, noprevious, nonext ) end ).
</lang>
=={{header|F#}}==
<lang fsharp>
type 'a DLElm = {
mutable prev: 'a DLElm option
data: 'a
mutable next: 'a DLElm option
}
</lang>
Line 238 ⟶ 246:
!
type( node ), target :: head</lang>
=={{header|Go}}==
Line 453 ⟶ 452:
next, prev: Node[T]
data: T</lang>
=={{header|Oberon-2}}==
<lang oberon2>
Line 475:
END Collections.
</lang>
=={{header|Objeck}}==
<lang objeck>class ListNode {
Line 635 ⟶ 636:
);
$node{next} = \%quux_node; # mutable</lang>
=={{header|Phix}}==
Line 736 ⟶ 704:
slot data = [];
enddefine;</lang>
=={{header|PureBasic}}==
<lang PureBasic>Structure node
Line 773 ⟶ 742:
See the functions on the [[Doubly-Linked List]] page for the usage of these structures.
=={{header|Raku}}==
(formerly Perl 6)
<lang perl6>role DLElem[::T] {
has DLElem[T] $.prev is rw;
has DLElem[T] $.next is rw;
has T $.payload = T;
method pre-insert(T $payload) {
die "Can't insert before beginning" unless $!prev;
my $elem = ::?CLASS.new(:$payload);
$!prev.next = $elem;
$elem.prev = $!prev;
$elem.next = self;
$!prev = $elem;
$elem;
}
method post-insert(T $payload) {
die "Can't insert after end" unless $!next;
my $elem = ::?CLASS.new(:$payload);
$!next.prev = $elem;
$elem.next = $!next;
$elem.prev = self;
$!next = $elem;
$elem;
}
method delete {
die "Can't delete a sentinel" unless $!prev and $!next;
$!next.prev = $!prev;
$!prev.next = $!next; # conveniently returns next element
}
}</lang>
=={{header|REXX}}==
|