Doubly-linked list/Element definition: Difference between revisions

Content added Content deleted
(Add Factor)
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 53: Line 53:


Ada's standard container library includes a generic doubly linked list. The structure of the link element is private.
Ada's standard container library includes a generic doubly linked list. The structure of the link element is private.



=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==
Line 130: Line 129:
void *data;
void *data;
size_t type;
size_t type;
};</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>
};</lang>


Line 156: Line 145:
}
}
}</lang>
}</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}}==
=={{header|Clojure}}==
Line 223: Line 222:
<lang Erlang>
<lang Erlang>
new( Data ) -> erlang:spawn( fun() -> loop( Data, noprevious, nonext ) end ).
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>
</lang>


Line 238: Line 246:
!
!
type( node ), target :: head</lang>
type( node ), target :: head</lang>

=={{header|F#}}==
<lang fsharp>
type 'a DLElm = {
mutable prev: 'a DLElm option
data: 'a
mutable next: 'a DLElm option
}
</lang>


=={{header|Go}}==
=={{header|Go}}==
Line 453: Line 452:
next, prev: Node[T]
next, prev: Node[T]
data: T</lang>
data: T</lang>

=={{header|Oberon-2}}==
=={{header|Oberon-2}}==
<lang oberon2>
<lang oberon2>
Line 475: Line 475:
END Collections.
END Collections.
</lang>
</lang>

=={{header|Objeck}}==
=={{header|Objeck}}==
<lang objeck>class ListNode {
<lang objeck>class ListNode {
Line 635: Line 636:
);
);
$node{next} = \%quux_node; # mutable</lang>
$node{next} = \%quux_node; # mutable</lang>
=={{header|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|Phix}}==
=={{header|Phix}}==
Line 736: Line 704:
slot data = [];
slot data = [];
enddefine;</lang>
enddefine;</lang>

=={{header|PureBasic}}==
=={{header|PureBasic}}==
<lang PureBasic>Structure node
<lang PureBasic>Structure node
Line 773: Line 742:


See the functions on the [[Doubly-Linked List]] page for the usage of these structures.
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}}==
=={{header|REXX}}==