Struktura odkładana na stos

0

Witam potrzebuje pomocy z tymi zadaniami, ktoś mógłby wyjaśnić jak mam tą strukturę dokładać na stos?
Rozumiem dla pojedynczego elementu ale dla struktury nie potrafię jakoś tego przetworzyć. Chyba, że źle zrozumiałem polecenie ;x
Jedna osoba to tak jakby jeden element/rekord?

A) Zaimplementować, wykorzystując typ tablicowy, dla którego typem podstawowym będzie typ
rekordowy, abstrakcyjny typ danych stos. Implementacja powinna udostępniać komplet 5 -ciu
funkcji interfejsu (wskazany w materiałach wyk ładowych). Typ rekordowy właściwy dla danych
umieszczanych w stosie powinien w języku C (C++) odpowiednik strukturalny wskazany
poniżej.

struct osoba
{
char imie[20];
char nazwisko[20];
int nr_albumu;
}

B) Interfejs użytkownika powinien umożliwiać zainicjowanie stosu, wprowadzanie kolejnych
elementów danych (rekordów) do stosu (edycja poszczególnych składowych z klawiatury)
oraz ich pobieranie ze stosu (wyświetlanie wszystkich składowych pobieranego elementu
danych na ekranie). Przyjąć, że w stosie nie może się pojawić więcej niż 50 elementów
danych (rekordów).

0

No okej.

Co juz zrobiles? Ewentualnie ile placisz?

0
#define Max 50
typedef int eltype;
typedef eltype  stack[Max];
int top;
void initializes(stack s)
{
top = 0;
 return;
 }
int emptys(stack s)
{
return(top == 0);
}
int fulls(stack s)
{
return(top == Max);}
void push(eltype  x, stack s)
{
s[top++] = x;
 return;
 } 
eltype pop(stack s)
{ 
return(s[--top]);
} 

I cały problem jest z tą strukturą, gdzie i jak ją wykorzystać?
Ewentualnie nic nie płace bo jestem biednym studentem ;(

1

Jak zrobić stos przechowujący strukturę? Tak samo jak stos przechowujący double, a potem zamienić każde double ( lub dowolny inny typ) na strukturę.

Tu masz przerobiony swój kod ( domyślam się że C, a nie C++):

#define Max 50
#define TYPE Person 

typedef struct Person {
    char imie[20];
    char nazwisko[20];
    int nr_albumu;
} Person;

typedef struct Stack {
    TYPE elements[Max];
    unsigned int top;
}Stack;

Stack init()
{
    Stack s;
    s.top = 0;
    return s;
}

int isEmpty(Stack s)
{  
    return(s.top == 0);
}
int isFull(Stack s)
{
    return(s.top == Max);
}

void push(Stack s, TYPE x)
{
    if(!isFull(s))
        s.elements[s.top++] = x;
} 

TYPE pop(Stack s)
{ 
    return(s.elements[--top]);
} 

Jeżeli C++ to możesz jeszcze template zastosować, a funkcje spakować jako metody klasy ( nie wiem na jakim poziomie jesteście ). Te twoje typdefy na początku są bardzo złe, nie wiem nawet czy kompilator pozwala na "przesłanianie" istniejącego już typu w ten sposób co ty zrobiłeś, ale nawet jeżeli zezwala, to wyobraź sobie jak za miesiąc się zdziwisz jak zapomnisz o tym myku, a będziesz chciał znowu wykorzystać ten kawałek kodu do przechowywania "prawdziwych" int'ów :/ . Ponadto nazwa funkcji powinna zawsze zaczynać się od czasownika (stara nazwa funkcji empty, sugerowała że służy ona do opróżniania stosu, a nie, jak teraz, do sprawdzenia czy jest on pusty)

0

To nie są moje typdefy (pierwszy raz się z tym spotkałem właśnie na wykładzie)
Nie mamy tłumaczonej składni co i czemu tak robi dana funkcja tylko teoretyczne działanie algorytmu.
Nie rozumiem podejścia wykładowcy do studentów pierwszego roku, którzy mają pierwszy raz kontakt z programowaniem.
Poziom jest taki że na pierwszym semestrze przerobiliśmy (pętle,if'y,tablice,switch). Dobrze, że z technikum więcej wyniosłem niż z pierwszego semestru :P

0
typedef struct MojeDane { int dane1; double Dane2; } eltype;
0

Załóżmy, że użytkownik wybiera w switch wartość 1 i wtedy dopisuje do stosu wszystko na raz czyli Imię nazwisko i nr albumu a następnie wraca z powrotem do menu wyboru 1-dodac 2-zdjac 3-wyswietlic wszystkie elementy. Jak to zaimplementować?

cout<<"Co chcesz zrobić"<<endl;
cout<<"1-dodac 2-zdjac 3-wyswietlic caly stos"<<endl;
cin>>x
switch( x )
{
case 1:
    push(Person)  // Czy to jest dobrze? 
    break;
0

Weź przeczytaj jakieś podstawy.

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