Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


Принципиально не верно стек сделан - последний элемент должен хранить адрес предыдущего т.е. 1<-2<-3<-4... а тут 1->2->3->4. Поэтому после выдавливания последнего элемента указатель last теряется... - адреса 3 элемента не найдет (если только перебором от 1 до 3).
Вот как подправил я:
Код: Выделить весь код
procedure Build (var S: tStack; D: tData); {первоначальное заполнение стека}
var
   f: text;
   p: tPtr;
begin
   assign (f,'stack.txt');
   reset (f);
   S.First := nil;
   S.Last := nil;
   while not eof(f) do begin
      New(p);
      readln (f, D);
      p^.data := D;
      if S.First = nil then begin
      	S.First := p; s.last:=p  end
      else
      begin
       p^.next := s.last;
       S.Last := p;
      end;
   end;

   close(f);
end;

procedure Echo (var S: tStack); {вывод стека на экран}
var
	p: tPtr;
begin
   {p^ := S.Last^;}
   while S.last <> s.first do begin
      Pop (S, D);
      write (D,' ');
  //    Echo (S);
   end;
 Pop (S, D);
 write (D,' ');
end;
Но это стирает стек - полностью его выталкивает, поэтому для отображения не верно все же

Отправлено: 21:44, 01-04-2009 | #7