Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,20 @@
|
|||
LINK(L₁,1)→A
|
||||
LINK(L₁+10,2)→B
|
||||
LINK(L₁+50,3)→C
|
||||
|
||||
INSERT(A,B)
|
||||
INSERT(A,C)
|
||||
|
||||
A→I
|
||||
While I≠0
|
||||
Disp VALUE(I)▶Dec,i
|
||||
NEXT(I)→I
|
||||
End
|
||||
|
||||
Disp "-----",i
|
||||
|
||||
B→I
|
||||
While I≠0
|
||||
Disp VALUE(I)▶Dec,i
|
||||
PREV(I)→I
|
||||
End
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
type
|
||||
List[T] = object
|
||||
head, tail: Node[T]
|
||||
|
||||
Node[T] = ref TNode[T]
|
||||
|
||||
TNode[T] = object
|
||||
next, prev: Node[T]
|
||||
data: T
|
||||
|
||||
proc initList[T](): List[T] = discard
|
||||
|
||||
proc newNode[T](data: T): Node[T] =
|
||||
new(result)
|
||||
result.data = data
|
||||
|
||||
proc prepend[T](l: var List[T], n: Node[T]) =
|
||||
n.next = l.head
|
||||
if l.head != nil: l.head.prev = n
|
||||
l.head = n
|
||||
if l.tail == nil: l.tail = n
|
||||
|
||||
proc append[T](l: var List[T], n: Node[T]) =
|
||||
n.next = nil
|
||||
n.prev = l.tail
|
||||
if l.tail != nil:
|
||||
l.tail.next = n
|
||||
l.tail = n
|
||||
if l.head == nil:
|
||||
l.head = n
|
||||
|
||||
proc insertAfter[T](l: var List[T], r, n: Node[T]) =
|
||||
n.prev = r
|
||||
n.next = r.next
|
||||
n.next.prev = n
|
||||
r.next = n
|
||||
if r == l.tail: l.tail = n
|
||||
|
||||
proc remove[T](l: var List[T], n: Node[T]) =
|
||||
if n == l.tail: l.tail = n.prev
|
||||
if n == l.head: l.head = n.next
|
||||
if n.next != nil: n.next.prev = n.prev
|
||||
if n.prev != nil: n.prev.next = n.next
|
||||
|
||||
proc `$`[T](l: var List[T]): string =
|
||||
result = ""
|
||||
var n = l.head
|
||||
while n != nil:
|
||||
if result.len > 0: result.add(" -> ")
|
||||
result.add($n.data)
|
||||
n = n.next
|
||||
|
||||
iterator traverseForward[T](l: List[T]): T =
|
||||
var n = l.head
|
||||
while n != nil:
|
||||
yield n.data
|
||||
n = n.next
|
||||
|
||||
iterator traverseBackward[T](l: List[T]): T =
|
||||
var n = l.tail
|
||||
while n != nil:
|
||||
yield n.data
|
||||
n = n.prev
|
||||
|
||||
var l = initList[int]()
|
||||
var n = newNode(12)
|
||||
var m = newNode(13)
|
||||
var i = newNode(14)
|
||||
var j = newNode(15)
|
||||
l.append(n)
|
||||
l.prepend(m)
|
||||
l.insertAfter(m, i)
|
||||
l.prepend(j)
|
||||
l.remove(m)
|
||||
|
||||
for i in l.traverseForward():
|
||||
echo "> ", i
|
||||
|
||||
for i in l.traverseBackward():
|
||||
echo "< ", i
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
DList method: forEachNext
|
||||
dup ifNull: [ drop @head ifNull: [ false ] else: [ @head @head true] return ]
|
||||
next dup ifNull: [ drop false ] else: [ dup true ] ;
|
||||
|
||||
DList method: forEachPrev
|
||||
dup ifNull: [ drop @tail ifNull: [ false ] else: [ @tail @tail true] return ]
|
||||
prev dup ifNull: [ drop false ] else: [ dup true ] ;
|
||||
|
||||
: test
|
||||
| dl n |
|
||||
DList new ->dl
|
||||
dl insertFront("A")
|
||||
dl insertBack("B")
|
||||
dl head insertAfter(DNode new("C", null , null))
|
||||
|
||||
"Traversal (beginning to end) : " println
|
||||
dl forEach: n [ n . ]
|
||||
|
||||
"\nTraversal (end to beginning) : " println
|
||||
dl revEach: n [ n . ] ;
|
||||
Loading…
Add table
Add a link
Reference in a new issue