Jump to content

Doubly-linked list/Element definition: Difference between revisions

Rename Perl 6 -> Raku, alphabetize, minor clean-up
(Add Factor)
(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>
 
=={{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>
 
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|F#}}==
<lang fsharp>
type 'a DLElm = {
mutable prev: 'a DLElm option
data: 'a
mutable next: 'a DLElm option
}
</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|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}}==
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}}==
10,333

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.