zadanie: implementacja stosu

0

Mam zadanie:
Tytułami książek są liczby całkowite. Twoim zadaniem jest układanie książek na jednym stosie oraz zdejmowanie ich z niego. Zdejmujemy zawsze książkę leżącą na wierzchu stosu. Z pustego stosu nic nie zdejmujemy.

Napisz program, który wczyta liczbę poleceń N (mniejszą niż 1000) oraz zbiór tych poleceń. W kolejnych N wierszach znajdują się polecenia wstawienia książki na stos lub zdjęcia pewnej liczby książek ze stosu. Są zatem dwa typy poleceń. Jedno składa się z litery W, znaku spacji oraz liczby naturalnej będącej nazwą książki. Drugie polecenie składa się z litery P oraz liczby nieujemnej oznaczającej liczbę książek jaką należy zdjąć ze stosu.

Program powinien, dla każdego wystąpienia polecenia drugiego typu wypisać jeden wiersz. Wiersz ten powinien zawierać nazwy książek (liczby całkowite) rozdzielone znakiem spacji, wypisane w takiej kolejności w jakiej zostały zdjęte ze stosu. Ponieważ z pustego stosu nic nie można ściągnąć, więc w takiej sytuacji nic nie wypisujemy.

Przykładowe dane:

5
W 1
W 2
P 1
W 3
P 2

Wynik:
2
3 1

Zacząłem pisać program, lecz nie wiem jak go dokończyć.. proszę o pomoc i z góry dzięki.

#include <cstdio> 
#include <cstring> 
#include <iostream> 

using namespace std; 
int main() 
{ 
int tab[1000], i, a; 
int tab2[1000]; 
int polecenia, l=0; 
char kllubpob; 
int drugie; 

cin>>polecenia; 

for(i=0; i<polecenia; i++) 
{ 
cin>>kllubpob; 
cin>>drugie; 

if(kllubpob=='W') 
{ 
tab[i]=drugie; 
l++; 


} 

if(kllubpob=='P') 
{ 
a=i-1; 
for(a=a; a>drugie; a--) 
{ 
tab2[a]=tab[a]; 
} 

} 




} 

return 0; 
}
0
  1. Zamień sobie strumienie na scanf() i printf() zeby nie płakać ze program nie mieści sie w limicie czasu
  2. Zaimplementuj sobie stos po prostu i nie będziesz musiał kombinować z tablicami.
  3. Naucz się formatować kod i uzywać tagów <cpp>

Poza tym nie rozumiem co ty tam kombinujesz z jakimiś dziwnymi pętlami. Twój poprawiony kod:

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;
int main()
{
  int tab[1000];
  int N;
  char znak;
  int liczba;
  int liczba_ksiazek=0;
  cin>>N;
  for (int i=0; i<N; i++)
    {
      cin>>znak>>liczba;
      if (znak=='W')
        tab[liczba_ksiazek++]=liczba; //dodajemy książkę i zlizcamy ile jest położonych książek
      else if(liczba_ksiazek > 0)
      {
        while(liczba-- && liczba_ksiazek>0)
          cout<<tab[--liczba_ksiazek]<<" ";
        cout<<"\n";
      }
    }
  return 0;
}


</cpp>
0

Wielkie dzięki. Poczytam sobie o stosie w c++ bo z tablicami faktycznie jest trochę kombinowania... Jeszcze raz dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.