program lista;
{$APPTYPE CONSOLE}
uses
SysUtils,windows;
type
wsk= ^a;
a = record
k: longint;
w: wsk;
end;
procedure lista;
var B,T: array of longint;
pa,j,p,zakres,n,i,l,x,z,c: longint;
pierw,poprz,q,head:wsk;
t1,t2,t3,t4,t5: extended;
t1a,t1b,t2a,t2b,t3a,t3b,t4a,t4b,t5a,t5b,freq:Int64;
f:textfile;
h:boolean;
begin
AssignFile(f,'lista.txt');
reset(f);
Append(f);
///////////////////////////////////////////////////
readln(n);
Writeln(F, 'lista n ',n);
zakres:=3000000;
SetLength(B,zakres);
for i:=0 to zakres do B[i]:=1;
SetLength(T,n);
p:=random(zakres)+1;
T[0]:=p;
B[p]:=0;
pa:=1;
if zakres>=n then
BEgin
// Writeln('begin');
// Write(T[0],' ');
Repeat
i:=pa;
j:=random(zakres)+1;
if B[j]=1 then
Begin
T[pa]:=j;
B[j]:=0;
//Write('j ',j,'wartosc = ',B[j]);
// Write(' ',T[a],' ');
pa:=pa+1;
end;
until (pa=(n));
End
Else
BEgin
Writeln('Zly Zakres');
readln;
exit;
end;
// for i:=0 to n-1 do Write(T[i],' ');
// readln;
if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t1a);
pierw:=nil; //1)tworzenie
for i:=0 to n-1 do
begin
new(q);
x:=T[i];
// Writeln('x ',x);
// readln;
q^.k:=x;
poprz:=pierw;
if (pierw=nil) or (pierw^.k>q^.k) then
begin
q^.w:=pierw;
pierw:=q;
end
else begin
while (poprz^.w<>nil) and (poprz^.w^.k<q^.k) do
begin
poprz:=poprz^.w;
end;
q^.w:=poprz^.w;
poprz^.w:=q;
end;
end;
QueryPerformanceCounter(t1b);
t1:=(t1b-t1a)/Freq*1000;;
Writeln('czas tworzenia ',t1,' ');
Writeln(F,'czas tworzenia ',t1:0:2,' ');
{head:=pierw;
while head<>nil do
begin
write(head.k,' ');
head:=head.w;
end; }
// readln;
////////////////////////////////////////////////
if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t3a);
head:=pierw;
z:=n div 10;
for c:=1 to z do //3)wyszukiwanie wylosowanych elementów
begin
x:= random(zakres)+1;
//x:=2;
while head <> nil do
begin
if head.k=x then write('tak');//h:=true;
head:=head.w;
end;
// write('head',head.k);
// write('x',x);
//if head.k=x then write('tak');//h:=true;
end;
QueryPerformanceCounter(t3b);
t3:=(t3b-t3a)/Freq*1000;;
Writeln('czas wyszukiwania ',t3,' ');
Writeln(F,'czas wyszukiwania ',t3:0:2,' ');
//////////////////////////////////////////////////////////
if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t5a);
head:=pierw;
while head<>nil do
begin
head.k:=head.k+1;
head:=head.w;
end;
QueryPerformanceCounter(t5b);
t5:=(t5b-t5a)/Freq*1000;;
Writeln('czas przegladania ',t5,' ');
Writeln(F,'czas przegladania ',t5:0:2,' ');
///////////////////////////////////////////////////////////
if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t2a);
z:=n div 10;
// for c:=1 to z do //2)dodawanie wylosowanych elementów
begin
x:= random(zakres)+1;
//writeln(x,' wylosowany ');
new(q);
q^.k:=x;
poprz:=pierw;
if (pierw=nil) or (pierw^.k>q^.k) then
begin
q^.w:=pierw;
pierw:=q;
end
else begin
while (poprz^.w<>nil) and (poprz^.w^.k<q^.k) do
begin
poprz:=poprz^.w;
end;
q^.w:=poprz^.w;
poprz^.w:=q;
end;
end;
// writeln;
{head:=pierw;
while head<>nil do
begin
write(head.k,' ');
head:=head.w;
end; }
QueryPerformanceCounter(t2b);
t2:=(t2b-t2a)/Freq*1000;;
Writeln('czas dodawania losowych elementów ',t2,' ');
Writeln(F,'czas dodawania ',t2:0:2,' ');
///////////////////////////////////////////////////////////
{ if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t3a);
head:=pierw;
z:=n div 10;
for c:=1 to z do //3)wyszukiwanie wylosowanych elementów
begin
x:= random(zakres)+1;
while (head.k=x) or (head=nil) do
head:=head.w;
end;
QueryPerformanceCounter(t3b);
t3:=(t3b-t3a)/Freq*1000;;
Writeln('czas wyszukiwania ',t3,' '); }
//////////////////////////////////////////////////
if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t4a);
for c:=1 to Z do //4)usuwanie
begin
x:=random(zakres)+1;
if x>=pierw^.k then
begin
if x=pierw^.k then
begin
pierw:=pierw^.w;
dispose(head);
end
else
begin
while (head^.w<>nil) or (head^.w^.k<x) do
begin
head:=head^.w;
if head^.w^.w=nil then
post:=head;
end;
if(head^.w^.k=x) or (head^.k=x) then
begin
if head^.w^.k=x then
begin
q:=head^.w;
head^.w:=q^.w;
dispose(q);
end
else
begin
q:=post^.w;
post^.w:=nil;
dispose(q);
end;
end;
end;
end;
end;
{ writeln('after');
head:=pierw;
while head<>nil do
begin
write(head.k,' ');
head:=head.w;
end;}
QueryPerformanceCounter(t4b);
t4:=(t4b-t4a)/Freq*1000;;
Writeln('czas usuwania ',t4,' ');
Writeln(F,'czas usuwania ',t4:0:2,' ');
Closefile(F);
//////////////////////////////////////////////////////////
{ if QueryPerformanceFrequency(Freq) then
QueryPerformanceCounter(t5a);
head:=pierw;
while head<>nil do
begin
head.k:=head.k+1;
head:=head.w;
end;
QueryPerformanceCounter(t5b);
t5:=(t5b-t5a)/Freq*1000;;
Writeln('czas przegladania ',t5,' ');}
{ writeln('ending');
head:=pierw;
while head<>nil do
begin
write(head.k,' ');
head:=head.w;
end;}
t:=nil;
b:=nil;
end;
// procedure przegladanie;
////////////////////////////////////////////
begin
lista;
{ TODO -oUser -cConsole Main : Insert code here }
readln;
end.