September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -3,3 +3,4 @@ Using the link element defined in [[Singly-Linked List (element)]], define a met
|
|||
Using this method, insert an element C into a list comprised of elements A->B, following element A.
|
||||
|
||||
{{Template:See also lists}}
|
||||
<br><br>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,87 @@
|
|||
* Singly-linked list - Insert after 01/02/2017
|
||||
LISTSINA CSECT
|
||||
USING LISTSINA,R13 base register
|
||||
B 72(R15) skip savearea
|
||||
DC 17F'0' savearea
|
||||
STM R14,R12,12(R13) prolog
|
||||
ST R13,4(R15) " <-
|
||||
ST R15,8(R13) " ->
|
||||
LR R13,R15 " addressability
|
||||
* Allocate A
|
||||
GETMAIN RU,LV=12 get storage
|
||||
USING NODE,R11 make storage addressable
|
||||
LR R11,R1 "
|
||||
MVC VAL,=CL8'A' val='A'
|
||||
MVC NEXT,=A(0)
|
||||
DROP R11 base no longer needed
|
||||
ST R11,A A=@A
|
||||
* Init LIST
|
||||
ST R11,LIST init LIST with A
|
||||
* Allocate C
|
||||
GETMAIN RU,LV=12 get storage
|
||||
USING NODE,R11 make storage addressable
|
||||
LR R11,R1 "
|
||||
MVC VAL,=CL8'C' val='C'
|
||||
MVC NEXT,=A(0)
|
||||
DROP R11 base no longer needed
|
||||
ST R11,C C=@C
|
||||
* Insert C After A
|
||||
MVC P1,A
|
||||
MVC P2,C
|
||||
LA R1,PARML
|
||||
BAL R14,INSERTAF
|
||||
* Allocate B
|
||||
GETMAIN RU,LV=12 get storage
|
||||
USING NODE,R11 make storage addressable
|
||||
LR R11,R1 "
|
||||
MVC VAL,=CL8'B' val='B'
|
||||
MVC NEXT,=A(0)
|
||||
DROP R11 base no longer needed
|
||||
ST R11,B B=@B
|
||||
* Insert B After A
|
||||
MVC P1,A
|
||||
MVC P2,B
|
||||
LA R1,PARML
|
||||
BAL R14,INSERTAF
|
||||
* List all
|
||||
L R11,LIST
|
||||
USING NODE,R11 address node
|
||||
LOOP C R11,=A(0)
|
||||
BE ENDLIST
|
||||
XPRNT VAL,8
|
||||
L R11,NEXT
|
||||
B LOOP
|
||||
ENDLIST DROP R11
|
||||
FREEMAIN A=A,LV=12 free A
|
||||
FREEMAIN A=B,LV=12 free B
|
||||
FREEMAIN A=C,LV=12 free C
|
||||
RETURN L R13,4(0,R13) epilog
|
||||
LM R14,R12,12(R13) " restore
|
||||
XR R15,R15 " rc=0
|
||||
BR R14 exit
|
||||
LIST DS A list head
|
||||
A DS A
|
||||
B DS A
|
||||
C DS A
|
||||
PARML DS 0A
|
||||
P1 DS A
|
||||
P2 DS A
|
||||
INSERTAF CNOP 0,4
|
||||
L R2,0(R1) @A
|
||||
L R3,4(R1) @B
|
||||
USING NODE,R2 ->A
|
||||
L R4,NEXT @C
|
||||
DROP R2
|
||||
USING NODE,R3 ->B
|
||||
ST R4,NEXT B.NEXT=@C
|
||||
DROP R3
|
||||
USING NODE,R2 ->A
|
||||
ST R3,NEXT A.NEXT=@B
|
||||
DROP R2
|
||||
BR R14 return
|
||||
LTORG all literals
|
||||
NODE DSECT node (size=12)
|
||||
VAL DS CL8
|
||||
NEXT DS A
|
||||
YREGS
|
||||
END LISTSINA
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// version 1.1.2
|
||||
|
||||
class Node<T: Number>(var data: T, var next: Node<T>? = null) {
|
||||
override fun toString(): String {
|
||||
val sb = StringBuilder(this.data.toString())
|
||||
var node = this.next
|
||||
while (node != null) {
|
||||
sb.append(" -> ", node.data.toString())
|
||||
node = node.next
|
||||
}
|
||||
return sb.toString()
|
||||
}
|
||||
}
|
||||
|
||||
fun <T: Number> insertAfter(prev: Node<T>, new: Node<T>) {
|
||||
new.next = prev.next
|
||||
prev.next = new
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val b = Node(3)
|
||||
val a = Node(1, b)
|
||||
println("Before insertion : $a")
|
||||
val c = Node(2)
|
||||
insertAfter(a, c)
|
||||
println("After insertion : $a")
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
list = .linkedlist~new
|
||||
index = list~insert("abc") -- insert a first item, keeping the index
|
||||
list~insert("def") -- adds to the end
|
||||
list~insert("123", .nil) -- adds to the begining
|
||||
list~insert("456", index) -- inserts between "abc" and "def"
|
||||
list~remove(index) -- removes "abc"
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
enum NEXT,DATA
|
||||
constant empty_sll = {{1}}
|
||||
sequence sll = empty_sll
|
||||
|
||||
procedure insert_after(object data, integer pos=length(sll))
|
||||
sll = append(sll,{sll[pos][NEXT],data})
|
||||
sll[pos][NEXT] = length(sll)
|
||||
end procedure
|
||||
|
||||
insert_after("ONE")
|
||||
insert_after("TWO")
|
||||
insert_after("THREE")
|
||||
|
||||
?sll
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
; x86_64 Linux NASM
|
||||
; Linked_List_Insert.asm
|
||||
|
||||
%ifndef INSERT
|
||||
%define INSERT
|
||||
|
||||
%include "Linked_List_Definition.asm" ; see LL def task
|
||||
%include "Heap_Alloc.asm" ; see memory allocation task
|
||||
|
||||
section .text
|
||||
|
||||
; rdi - link to insert after
|
||||
; rsi - value that the new link will hold
|
||||
Insert_After:
|
||||
push rdi
|
||||
push rsi
|
||||
mov rdi, linkSize
|
||||
call alloc
|
||||
cmp rax, 0
|
||||
je Memory_Allocation_Failure_Exception
|
||||
pop rdi
|
||||
mov dword [rax + value], edi
|
||||
pop rdi
|
||||
mov rsi, qword [rdi + next]
|
||||
mov qword [rax + next], rsi
|
||||
mov qword [rdi + next], rax
|
||||
ret
|
||||
|
||||
%endif
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
L("a","b","c").insert(1,"foo") //-->L("a","foo","b","c")
|
||||
a:=L("a","b","c"); a.insert(a.find("b"),"foo") //-->L("a","foo","b","c")
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
a:=ROList("a","b","c");
|
||||
n:=a.index("b"); a[0,n].append("foo").extend(a[n,*]) //-->ROList("a","foo","b","c")
|
||||
Loading…
Add table
Add a link
Reference in a new issue