Po co argument element w funkcji pop operującej na stosie

0

Witam,
Mam takie pytanie, po prostu coś mi się nie zgadza i nie wiem co dalej z tym robić. Mam przygotować się do pisania programu operującego na stosie poprzez przygotowanie funkcji na nim operujących. W pomocy do zadania mam taką treść "Przygotuj funkcje push(stos, element), pop(stos, element), które odpowiednio pozwalają na umieszczenie na stosie stos i zdjęcie z niego elementu element w postaci liczby całkowitej". Moje pytanie jest takie jak w temacie. Do czego jest potrzebny argument element w funkcji pop? Czy chodzi o to że mam usunąć wszystkie elementy stosu zawierające daną liczbę? Skoro usuwam ostatni element to według mojej wiedzy wystarczy sam adres...
Pozdrawiam,
Zellus

0

Żeby ten zdejmowany element zwrócić za pomocą wskaźnika.

0

Liczbę całkowitą zwracać za pomocą wskaźnika? I jeszcze sobie dokładać problemu ze zwolnieniem pamięci po nim?

Prawdopodobnie zadania były pisane masowo i prowadzący dobrze tego nie przemyślał. Sądzę, że jak zrobisz jednoargumentowy pop i będziesz potrafił powiedzieć dlaczego to nie będzie źle.

0
Rev napisał(a):

Liczbę całkowitą zwracać za pomocą wskaźnika? I jeszcze sobie dokładać problemu ze zwolnieniem pamięci po nim?

Po prostu zamiast return "zwracać" za pomocą wskaźnika, przecież to powszechna praktyka (chociażby scanf tak działa). W tym wypadku może mało szczęśliwa, ale przecież tym charakteryzuje się większość takich ćwiczeń. Co ma do tego jakiekolwiek zarządzanie pamięcią.

Poza tym to jedyna logiczna odpowiedź dlaczego pop miało by tak wyglądać. Gdzie ja napisałem, że mi się to podoba albo uważam to za świetne rozwiązanie.

http://ideone.com/SWUKGf

0

---EDIT----
Już nieważne, to był głupi błąd, stworzyłem pierwszy element statycznie i pozostałe chciałem dynamicznie tworzyć i dlatego nie działało...
Temat do zamknięcia, dziękuję za pomoc :)

Dobra chyba to rozumiem, ale dalej mam problem z napisaniem tego programu. Gdzieś się chyba zamotałem i program nie chce działać tak jako powinien, tzn ciągle zdaje się operować na pustym elemencie, może podeślę kod?
[code]
/* KOD NIEPOPRAWNY */
#include <stdio.h>
#include <stdlib.h>

typedef struct elem{
int liczba;
struct elem *prev;
}t_elem;

void push(t_elem *ost_element, int wartosc)
{

t_elem *nowy_element;
nowy_element=(t_elem*)malloc(sizeof(t_elem));
nowy_element->liczba=wartosc;
nowy_element->prev=ost_element;
ost_element=nowy_element;

}

void pop(t_elem *stos, int *wartosc)
{
t_elem *prev;
prev=stos->prev;
*wartosc=stos->liczba;
free(stos);
stos=prev;

}

int isempty(t_elem *stos)
{
printf("%d", stos->prev==NULL); //tylko na potrzeby sprawdzania programu
return stos->prev==NULL;

}

void print(t_elem *stos)
{
if(!isempty(stos))
{
print(stos->prev);
printf("%d",stos->liczba);
}
}

int main()
{
t_elem stack;
int opcja=0,liczba;
stack.prev=NULL;
while(opcja<5)
{
printf("Wybierz akcje: 1-dodaj, 2-usun ostatnia, 3-sprawdz czy ostatnia jest pusta, 4-wyswietl wszystkie, 5 zakoncz");
scanf("%d",&opcja);
switch(opcja)
{
case 1:
scanf("%d", &liczba);
push(&stack, liczba);
break;
case 2:pop(&stack,&liczba);break;//liczba sobie przepada ale nie uważam żeby w przypadku testu była potrzebna
case 3:isempty(&stack);break;
case 4:print(&stack);break;
}
}
return 0;
}

[/code]

---EDIT----
Już nieważne, to był głupi błąd, stworzyłem pierwszy element statycznie i pozostałe chciałem dynamicznie tworzyć i dlatego nie działało...
Temat do zamknięcia, dziękuję za pomoc :)

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