Mam problem z napisaniem procedury,ktora bedzie kasowac ostatni element kolejki,jako strukture danych mam wykorzystac liste jednokierunkowa:>
Hmm... Do przedostatniego elementu w miejsce wskaźnika podstaw nil, ostatni zwolnij za pomocą Dispose. Chcesz dokładniej, to napisz dokładniej w czym problem.
Dokladnie to ma chodzic tak wczytuje z pliku pewna instrukcje jak wystapi + to dodaje do listy nastepny znak jak jest - to mam skasowac ostatni element jak tokolejce w sumie to w drugim pliku mam miec zapisane cos w formie:<instrukcja z pliku 1>:<stan kolejki="kolejki"> czyli:
+a: a
+b:ab
+c:abc
- :bc
- :c
+b:cb
+e:cbe
chyba miało być tak
+a: a
+b:ab
+c:abc
- :ab
- :a
+b:ab
+e:abe
Nie niestety jest tak jak napisalam:>Dokladna tresc zadania:
- Napisać program zawierający zestaw procedur i funkcji symulujących działanie kolejki. Jako strukturę danych zastosować dynamiczną listę liniową jednokierunkową. Podprogramy powinny umożliwiać dodanie nowego elementu na końcu kolejki oraz pobranie pierwszego elementu kolejki. Konieczna jest obsługa przepełnienia i niedomiaru. Zapisać procedurę wsadowego przetwarzania transakcji na kolejce. Dane wejściowe dla przetwarzania wsadowego zapisane są w pliku tekstowym w następującym formacie (elementy kolejki są typu znakowego):
+A
+B
+N
+B
+C
gdzie "+e" oznacza transakcję dodania do kolejki elementu o wartości e, natomiast "-" oznacza pobranie pierwszego elementu kolejki. Podczas przetwarzania wsadowego tworzyć na bieżąco plik dziennika zawierający wpisy w formacie:
< transakcja > : < stan kolejki >.
+A:A
+B:AB
+N:ABN
-:BN
-:N
+B:NB
+C:NBC
W przypadku niedomiaru i przepełnienia zapisać w dzienniku:
-: ------ ERR UNDERFLOW
+e: ++++++ ERR OVERFLOW
no widzisz w zadaniu jest wyraźnie napisane "kasuje PIERWSZY element kolejki" nie ostatni jak podałaś w pierwszym poście
robi się to tak, że to co wskazuje Head.next przypisujesz do jakiegoś tempa, do head.next przypisujesz head.next.next a potem robisz dispose(temp). Oczywiście musisz sprawdzić, czy head.next <> nil i head.next^.next <> nil
a nio tak rzeczywiscie juz w tym sie wszystkim zakrecilam jutro sprobuje tak zrobic bo dzisiaj juz i tak 2 projekty zrobilam:>dzieki:>
Misiekd napisał(a)
no widzisz w zadaniu jest wyraźnie napisane "kasuje PIERWSZY element kolejki" nie ostatni jak podałaś w pierwszym poście
kolejka którą rysował autor wygląda tak:
początek -> a, b, c, d, e <- koniec
wstawiamy na koniec, a zdejmujemy z początku.
type PElem = ^TElem;
TElem = record
next : PElem;
c : char;
end;
var head : PElem;
function add(c : char) : boolean;
var e, lst : PElem;
begin
// e := create lub GetMem...
// if error then begin add := false; Exit end;
e^.next = nil;
e^.c := c;
lst = last();
if lst <> nil then lst^.next := e; // na koniec kolejki - za ostatnim
if head = nil then head := e;
add := true;
end;
function del : boolean;
var e : PElem;
begin
if head = nil then begin del := false; exit end;
e = head;
head = e->next; // pierwszy odchodzi, drugi jest teraz pierwszy
// write('wyszedł: ', e^.c) ...
Free(e); // delete, czy coś tam...
del := true;
end;
function last : PElem;
begin
// idziemy od 'head' do ostatniego...
end;