Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические структуры данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
CormiX
Помогите пожалуйста переделать список в стек.
program lab9;
uses crt;
type
Link = ^List;
List = record
next: Link;
data: string;
NumRand: integer;
end;
var
i:integer;
TopElement: Link;
tocase:byte;
doexit:boolean;



function DataAsk : string;
begin
Write('Vedit dani:');
Readln(DataAsk);
end;

procedure DataCreate(pdata:string);
begin
TopElement:=New(Link);
TopElement^.data := pdata;
TopElement^.NumRand := Random(10000);
TopElement^.next := nil;
end;

procedure DataAdd(pdata:string);
var temp: Link;
begin
temp := new(Link);
temp^.data := pdata;
temp^.NumRand := Random(10000);
temp^.next := TopElement;
TopElement := temp;
end;

procedure DataDel;
var temp: Link;
begin
temp := TopElement;
if temp^.next=nil then
begin
writeln('Stek pustij.');
TopElement := nil
end
else
begin
temp := temp^.next;
TopElement := temp;
end;
end;


procedure Show;
var temp : Link;
begin
temp := TopElement;
while temp <> nil do
begin
writeln('Dani: ', temp^.data, ' - ', temp^.NumRand);
temp:=temp^.next;
end;
end;

procedure ShowNData;
var temp : Link;
n : word;
begin
write('Veditj №: ');
readln(n);
temp := TopElement;
for i:=1 to n do
begin
if i=n then writeln('Dani: ', temp^.data, ' - ', temp^.NumRand);
if temp=nil then
begin
writeln('Ne znajdeno poziciji №: ', n);
break;
end;
temp:=temp^.next;
end;
end;

procedure Search;
var temp : Link;
stext: string;
isfind : boolean;
begin
write('Veditj wukanij tekst: ');
readln(stext);
temp := TopElement;
while temp <> nil do
begin
if temp^.data=stext then
begin
writeln('Znajdeno: ', temp^.data, ' - ', temp^.NumRand);
isfind := true;
end;
temp:=temp^.next;
end;
if isfind <> true then writeln('Zapys (', stext ,') ne znajdeno.');
end;

begin
repeat
clrscr;
writeln('Oberitj diu');
writeln;
writeln('1.Novij zapys.');
writeln('2.Dodaty zapys.');
writeln('3.Vydalyty.');
writeln('4.Vyvesty zapys novyj.');
writeln('5.Vyvesty vsi dani.');
writeln('6.Powuk.');
writeln;
writeln('0.Vyjty.');
writeln;
write('Vykonaty diu nomer: ');
readln(tocase);
case tocase of
1:DataCreate(DataAsk);
2:DataAdd(DataAsk);
3:DataDel;
4:ShowNData;
5:Show;
6:Search;
0:doexit:=true
else writeln('Pomylka!')
end;
writeln('Diu ', tocase,' vykonano. Enter - prodov*yty');
readln;
until doexit;


end.


volvo
У стека нет того функционала, который есть у списка, и который подразумевается в твоей программе. Стек умеет только запихивать в себя одно значение (Push), выталкивать последнее записанное значение (Pop), и, иногда, просматривать значение, занесенное в стек последним (функция Top). Никакого поиска, никакого удаления элемента из середины стека...

Кстати, это только я не вижу задания, или его здесь действительно нет?
CormiX
Ну то что стек "Посл. вошел - первый вышел, это я понимаю". Нет задания простите. Мне просто нужно переделать програмку в стек. Только я не понимаю как, и очень хотел бы чтоб мне с этим помогли.
volvo
Что значит
Цитата
просто нужно переделать програмку в стек.
? Что программка делать должна? То же самое, что и сейчас - это невозможно со стеком. Дальше что?
CormiX
Ну нужно чтоб программа создавала стек, считывала с него вершину, можно было добавить елемент в стек и показать все его елементы.
Немного есть:
program STACK_Pr;
Uses Crt;
type
PStack = ^TStack;
TStack = record
chislo: integer;
next : PStack;
end;
var
x, Stack : PStack;
i : integer;
Procedure INPUT_STACK;
begin
ClrScr;
Stack := nil;
for i := 1 to 10 do
begin
New(x);
write ('Veditj ', i, ' 4islo '); readln(x^.chislo);
x^.next := Stack; Stack:=x;
end;
end;
Procedure OUTPUT_STACK;
begin
if Stack = nil
then writeln('Pustij stek!')
else begin
x := Stack;
while x<> nil do
begin
Write(x^.chislo,' ');
x := x^.next;
end;
end;
end;
begin
INPUT_STACK;
OUTPUT_STACK;
Repeat Until keypressed;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.