сортировка стека (код прилагаеться)
вот мой код:
Код:
uses
crt;
type
ptr = ^item;
item=record
data:string;
next:ptr;
end;
var
head,current:ptr;
str:string;
i:integer;
n:integer;
key:char;
procedure push(value:string);
begin
new(current);
current^.data:=value;
current^.next:=head;
head:=current;
end;
procedure pop(var value:string);
begin
current:=head;
value:=head^.data;
head:=current^.next;
dispose(current);
end;
procedure sort(var value:string);
var p,q,m:value; s:string;
begin
p:=value;
while p<>nil do
begin
q:=p;m:=q;
while q<>nil do
begin
if m^.data<q^.data then m:=q;
q:=q^.next
end;
s:=p^.data;
p^.data:=m^.data;
m^.data:=s;
p:=p^.next
end
end;
begin
writeln('stack');
head:=nil;
repeat
writeln('1.add element');
writeln('2. sort');
writeln('3.output');
writeln('4.exit');
key:=readkey;
case key of
'1': begin
writeln('enter stack length');
readln(n);
for i:=1 to n do
begin
writeln('enter data item' , i);
readln(str);
push(str);
end;
end;
'2': begin
sort(str);
end;
'3':begin
while head<>nil do begin
pop(str);
write(str, ' ' );
end;
end;
end;
until key ='4';
end.
crt;
type
ptr = ^item;
item=record
data:string;
next:ptr;
end;
var
head,current:ptr;
str:string;
i:integer;
n:integer;
key:char;
procedure push(value:string);
begin
new(current);
current^.data:=value;
current^.next:=head;
head:=current;
end;
procedure pop(var value:string);
begin
current:=head;
value:=head^.data;
head:=current^.next;
dispose(current);
end;
procedure sort(var value:string);
var p,q,m:value; s:string;
begin
p:=value;
while p<>nil do
begin
q:=p;m:=q;
while q<>nil do
begin
if m^.data<q^.data then m:=q;
q:=q^.next
end;
s:=p^.data;
p^.data:=m^.data;
m^.data:=s;
p:=p^.next
end
end;
begin
writeln('stack');
head:=nil;
repeat
writeln('1.add element');
writeln('2. sort');
writeln('3.output');
writeln('4.exit');
key:=readkey;
case key of
'1': begin
writeln('enter stack length');
readln(n);
for i:=1 to n do
begin
writeln('enter data item' , i);
readln(str);
push(str);
end;
end;
'2': begin
sort(str);
end;
'3':begin
while head<>nil do begin
pop(str);
write(str, ' ' );
end;
end;
end;
until key ='4';
end.
Код:
procedure sort(var value:string);
var p,q,m:value; s:string;
begin
p:=value;
while p<>nil do
begin
q:=p;m:=q;
while q<>nil do
begin
if m^.data<q^.data then m:=q;
q:=q^.next
end;
s:=p^.data;
p^.data:=m^.data;
m^.data:=s;
p:=p^.next
end
end;
var p,q,m:value; s:string;
begin
p:=value;
while p<>nil do
begin
q:=p;m:=q;
while q<>nil do
begin
if m^.data<q^.data then m:=q;
q:=q^.next
end;
s:=p^.data;
p^.data:=m^.data;
m^.data:=s;
p:=p^.next
end
end;
вообщем проверил, не работает вообще процедура сортировки
Код:
var p,q,m:value;
Цитата: Meander
А что это за объявление в функции сортировки?
Код:
var p,q,m:value;
я тут просто скопипастил ту процедуру я ссылку кинул, я не знаю какие должны здесь быть переменные , какие нужно подставить в эту процедуру и т.д. не могли бы мне помочь разобраться пожалуйста .я вот отсюда брал http://forum.codenet.ru/q35257/ и заплутался которые переменные которые использованы в предыдущей процедуре нужно подставлять сюда
Проще всего, пожалуй, вставкой.
Цитата: wanja
Проще всего, пожалуй, вставкой.
ну вот нашел
Код:
const N = 255;
type TArray = array [1..N] of integer;
procedure InsertSort(var x: TArray);
var
i, j, buf: integer;
begin
for i := 2 to N do
begin
buf := x[i];
j := i - 1;
while (j >= 1) and (x[j] > buf) do
begin
x[j + 1] := x[j];
j := j - 1;
end;
x[j + 1] := buf;
end;
end;
type TArray = array [1..N] of integer;
procedure InsertSort(var x: TArray);
var
i, j, buf: integer;
begin
for i := 2 to N do
begin
buf := x[i];
j := i - 1;
while (j >= 1) and (x[j] > buf) do
begin
x[j + 1] := x[j];
j := j - 1;
end;
x[j + 1] := buf;
end;
end;