Wątek zablokowany 2015-03-07 01:01 przez furious programming.

Stos strukturalny - jak napisać funkcje ?

0

Próbuje napisać stos, który ma mieć takie funkcje:

init - przygotowanie stosu do pracy
destroy - "posprzątanie" po stosie
push - położenie na wierzchołku stosu liczby - parametru
pop - zdjęcie z wierzchołka stosu liczby (tzn. liczby ostatnio położonej)
top - odczytanie z wierzchołka stosu liczby (tzn. liczby ostatnio położonej)
empty - sprawdzenie, czy stos jest pusty
full - sprawdzenie, czy stos jest pełny

Program ma możliwość pracy z wieloma stosami na raz.

Mam problem z funkcją pop i top bo nie wiem jak to napisć żeby akurat ten ostatni element z tablicy odczytać/zdjąć. Próbowałem to napisać za pomocą tablicy dynamicznej i wiem, że jest tam dużo błędów. Mam nadzieję, że ktoś pomoże.

Funkcją push od razu całą tablicę zapełnić czy na zmiennej statycznej po jednym indeksie zmieniać ?

Kod:

#include <iostream>
#include <time.h>

using namespace std;

bool empty(int *tablica,int m);
void push(int *tablica, int m);
int Pop(int *tablica, int m);
void init(int *tablica, int m);
void destroy(int *tablica, int m);
int main()
{
    int i,ile;
    cin >> ile;
    int *tab = new int [ile];
    
    return 0;
}
void destroy(int *tablica, int m)
{
    for(i = 0; i < m; i++)
    {
        *tablica[i] = 0;
    }
}
void init(int *tablica, int m)
{
    srand(time(NULL));
    for(i = 0; i < m; i++)
    {
        *tablica[i] = rand % 100 + 1;
    }
}
void push(int *tablica,int m)
{
    int i;
    int tablica[m];
    for(i = 0;i < m;i++)
    {
        tablica[i] = *tablica[i];
    }
}
bool empty(int *tablica,int m)
{
    int i;
    for(i = 0; i < m; i++)
    {
        if(tablica[m]!=NULL) return false;
    }
}
int Pop(int *tablica, int m)
{
    
        
}
0

To co napisałeś żadnego sensu nie ma. Zapoznaj się z tym: http://edu.i-lo.tarnow.pl/inf/alg/001_search/0100.php

0

Funkcja top zwraca wskaźnik znajdujący się na szczycie stosu, ale skąd wiedzieć na który indeks tablicy ustawić wskaźnik aby zwracał wskaźnik który się znajduję na szczycie stosu?

0

Ok. Teraz próbuje napisać funkcję Push, powiedzcie czy dobre mam rozumowanie: jeśli użytkownik wywoła funkcję push to do tablicy zostanie dodany jeden element i funkcja ta zwraca wskaźnik na ten ostatni element ?

0
nowicjusz35 napisał(a):

Ok. Teraz próbuje napisać funkcję Push, powiedzcie czy dobre mam rozumowanie: jeśli użytkownik wywoła funkcję push to do tablicy zostanie dodany jeden element i funkcja ta zwraca wskaźnik na ten ostatni element ?

z tego co przedstawiłeś, to puch nie zwraca nic, po prostu dodaje element.

0

Nie wiem czy od razu zapełnić całą tablicę czy dodawać po jednym elemencie. Bo w funkcji init mam przygotować stos do pracy i nie za bardzo wiem co tam zrobić.

0

Ogólnie mam wrażenie, że nie rozumiesz koncepcji stosu. Implementacja empty() wybitnie o tym świadczy. Dlatego dałem link, który wyjaśnia takie rzeczy. I odpowiada również na pytanie

skąd wiedzieć na który indeks tablicy ustawić wskaźnik aby zwracał wskaźnik który się znajduję na szczycie stosu?

Implementacja pokazana jest oparta o klasę, ale drobna modyfikacja wystarczy, żeby była strukturalna. Przeczytaj. Wtedy nie będziesz miał pytań typu:

jeśli użytkownik wywoła funkcję push to do tablicy zostanie dodany jeden element i funkcja ta zwraca wskaźnik na ten ostatni element ?
bo po co ten wskaźnik?

0

http://4programmers.net/Forum/1102448
Dopisz sobie co trzeba

0

to tam dodawać po jednym elemencie do tablicy ? funkcja empty ma wyglądać jakoś tak : ? bool empty(int tablica[],int *wskaznik) { if(stack_pointer == tablica) return true; }
Trzymaj zmienną, która mówi ile jest elementów na stosie oraz jest indeksem pierwszej wolnej komórki w tablicy.
push zwiększa tę zmienną
pop zmniejsza
empty zachodzi jak jest równa 0

0

Niech stos będzie strukturą, która trzyma wskaźnik na dynamiczną tablicę oraz ten licznik.

0

To wszystko w strukturze umieścić ? Chodzi o to strukturę z języka C?

0

na pewno mogę skorzystać ze struktur ? Bo struktura to prawie to samo co klasa, to dla mnie podchodzi pod obiektówke. polecenie mam takie: napisać program oferujący możliwość tworzenia struktury danych typu stos liczb całkowitych

0

Obiektowo, to można programować nawet w asemblerze. I odwrotnie, można programować w javie nieobiektowo. Klasa/struktura to ułatwienie tylko takiego sposobu programowania.

0

kaczus, a możesz powiedzieć jak to bez struktury by wyglądało ?

0

Na przykład używając zmiennych globalnych.... Jest to jednak brzydkie i łatwo o błędy.

0

Jak użyje tablicy o stałym rozmiarze to zrobić na strukturze, a jak już się chcę zaalokować pamięć na tablicę to na listach trzeba ? W funkcji push użyć funkcji rand aby wpisać elementy do tablicy ? Bo mam losowe liczby powpisywać.

0

Nie trzeba. Listy użyć trzeba by, jeśli chciałbyś, aby wielkość stosu mogła być dynamicznie zmieniana w trakcie pracy programu. I to nie tyle trzeba by, co byłoby wskazane ze względów wydajnościowych.

0

Próbuje coś napisać, ale nic nie idzie. Funkcja init ma być podobna do czegoś takiego: ? Tylko stworzę to tablicę to ona jest tylko dostępna w tym zakresie lokalnym a mi potrzebna do całej struktury.

struct Stos
{
    
    void init(int *tab,int rozmiar)
    {
        cin >> ile;
        *tab = new int [rozmiar];
    }
    
    int *sptr = 0;
};

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