Created
November 30, 2012 21:13
-
-
Save 4lex1v/4178665 to your computer and use it in GitHub Desktop.
LL for Costya
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unit LinkedList; | |
interface | |
type | |
node =^ elem; | |
elem = record | |
entry : string; | |
count : integer; | |
next : node; | |
end; | |
llist = node; | |
procedure put(var list: llist; val: string); | |
function get(var list: llist; index: integer): string; | |
function remove(var list: llist; index: integer): string; | |
procedure change(var list: llist; index: integer; val: string); | |
procedure print(var list: llist); | |
implementation | |
procedure print(var list: llist); | |
begin | |
if list^.next <> nil then | |
print(list^.next); | |
writeln(list^.entry); | |
end; | |
procedure put(var list: llist; val: string); | |
var | |
q, p: llist; | |
counter: integer; | |
begin | |
new(q); | |
q^.entry := val; | |
q^.count := 0; | |
q^.next := nil; | |
if list = nil then | |
list := q | |
else | |
begin | |
p := list; | |
counter := 0; | |
while p^.next <> nil do begin | |
counter := counter + 1; | |
p := p^.next; | |
end; | |
q^.count := counter; | |
p^.next := q; | |
end; | |
end; | |
function get(var list: llist; index: integer): string; | |
var | |
res, p: llist; | |
begin | |
if list = nil then | |
get := 'The List is Empty' | |
else | |
begin | |
p := list; | |
res := nil; | |
while p^.next <> nil do begin | |
if p^.count = index then | |
res := p; | |
p := p^.next; | |
end; | |
if res = nil then | |
get := 'Not Fount' | |
else | |
get := res^.entry; | |
end; | |
end; | |
function remove(var list: llist; index: integer): string; | |
var | |
res, p, prev: llist; | |
begin | |
if list = nil then | |
remove := 'The List is Empty' | |
else | |
begin | |
p := list; | |
res := nil; | |
prev := nil; | |
while p^.next <> nil do begin | |
prev := p; | |
if (p^.count + 1) = index then | |
res := p^.next; | |
p := p^.next; | |
end; | |
if res = nil then | |
remove := 'Value Not Found' | |
else | |
begin | |
prev^.next := res^.next; | |
remove := res^.entry; | |
end; | |
end; | |
end; | |
procedure change(var list: llist; index: integer; val: string); | |
var | |
res, p: llist; | |
begin | |
if list <> nil then begin | |
p := list; | |
res := nil; | |
while p^.next <> nil do begin | |
if p^.count = index then | |
res := p; | |
p := p^.next; | |
end; | |
res^.entry := val; | |
end; | |
end; | |
end. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
program main; | |
uses LinkedList; | |
var | |
list: llist; | |
l1, l2, tmp: string; | |
size, line1, line2, after: integer; | |
infile, output: text; | |
begin | |
assign(infile, 'input.txt'); | |
reset(infile); | |
size := 0; | |
repeat | |
readln(infile, tmp); | |
size := size + 1; | |
put(list, tmp); | |
until Eof(infile); | |
close(infile); | |
write('Enter the line num for transfer: '); | |
readln(line1); | |
while line1 > size do begin | |
write('Sorry, but you have only ', size, ' lines, enter another number: '); | |
readln(line1); | |
end; | |
write('Enter into which line uo want to paste: '); | |
readln(line2); | |
while line2 > size do begin | |
write('Sorry, but you have only ', size, ' lines, enter another number: '); | |
readln(line2); | |
end; | |
write('After which symbol: '); | |
readln(after); | |
l1 := remove(list, line1); | |
writeln('Line ', l1, '(',line1, ') removed'); | |
l2 := get(list, line2); | |
writeln('Pasting into ', l2, '(', line2, ')'); | |
tmp := copy(l2, 0, after); | |
tmp := tmp + l1; | |
tmp := tmp + copy(l2, after + 1, length(l2) - after); | |
change(list, line2, tmp); | |
writeln('Line changed'); | |
assign(outfile, 'out.txt'); | |
rewrite(outfile); | |
print(list); | |
close(outfile); | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment