Stos w c++, próba ustawienia wskaźnika na głowę stosu


(Kornicameister) #1

chciałbym móc wypisywać elementy stosu i nie musieć się odwoływać się .pop() oraz while(!.empty()) [warunek kończący wypisywanie w momencie opróżnianie stosu], ponieważ wtedy pop() opróżnia mój stos, a ja tego nie chcę

innymi słowy wpadłem na pomysł, żeby już przed miejscem gdzie wpisuje ileś elementów ustawić na NULL wskaźnik na głowę stosu(wskaźnik *head), który każdorazowo po wpisaniu elementu by się przesuwał wyżej, a przy wypisywaniu mieć jakiś inny wskaźnik(wskaźnik *temp), początkowo ustawiono tak samo jak ten na głowę stosu i żeby pętla wypisująca zakończyła się w momencie gdy ten wskaźnik (*temp) wskaże na NULL ?

próbowałem zrobić to tak

int *head=stos3.top() //jeszcze przed pętlą wpisującą, ale kompilator odrzucał to rozwiązanie

/stos_wlasne_elementy.cpp|12|error: invalid conversion from ‘int’ to ‘int*’|

||=== Build finished: 1 errors, 0 warnings ===|

int head=stos3.top() // tak się kompilowało, ale jak można się domyśleć, jeśli przy pętli wypisującej miałem (head--) to wypisywał mi 1,2,3,4,5 itd. korzystam z programu CODE::BlOCKS 8.02 , OS -> UBU 9.10 -> biblioteki załączone jak widać mam nadzieję, że nie pogmatwałem zbytnio i wiadomo o co chodzi i uda mi się dojść jak posługiwać się wskaźnikami przy stosie.

#include 

#include 


using namespace std;


int main()

{

    cout<<"Stos2... wpisywanie i wypisywanie własnych elementów"<
    stack stos2;

    short int rozmiar_zadany;

    int element;

    cout <<"Podaj wstępny rozmiar stosu"<
    cin >>rozmiar_zadany;

    while(rozmiar_zadany!=0)

    {

        cin>>element;

        stos2.push(element);

        rozmiar_zadany--;

        }

    cout <<"\n\nNastąpi wypisanie elementów tablicy i opróżnienie stosu\n";

    cout <<"Zanim to nastąpi dopiszmy jeszcze element\n";

    cin >>element; stos2.push(element); cout <<"\n";

//punkt wypisywania

    while(!stos2.empty())

    {

        cout<
        stos2.pop();

        }

//koniec punktu wypisywania

    cout <<"Zakończono działanie";

    return 0;

    }

(Fiołek) #2

Stos jest kolejką LIFO i z założenia nie masz dostępu do innych elementów niż ostatnio włożony. Użyj innej struktury o wolnym dostępie, np. queue/deque/list/vector


(Kornicameister) #3

ok, dzięki za podpowiedź, będę miał to na uwadze