Kasowanie ostatniego elementu kolejki!Pilne

0

Mam problem z napisaniem procedury,ktora bedzie kasowac ostatni element kolejki,jako strukture danych mam wykorzystac liste jednokierunkowa:>

0

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.

0

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
0

chyba miało być tak

+a: a
+b:ab
+c:abc

  • :ab
  • :a
    +b:ab
    +e:abe
0

Nie niestety jest tak jak napisalam:>Dokladna tresc zadania:

  1. 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

0

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

0

a nio tak rzeczywiscie juz w tym sie wszystkim zakrecilam jutro sprobuje tak zrobic bo dzisiaj juz i tak 2 projekty zrobilam:>dzieki:>

0
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;

1 użytkowników online, w tym zalogowanych: 0, gości: 1