Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Stack Liste » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Stack Liste
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Stack Liste Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

kann mir jemand bitte diese Aufgabe korrigieren?
Zuerst müssen die Datentypen aus der Liste definiert werden.
So habe ich das umgesetzt:


typedef struct frame_data{
int retval;
int param[16];
int pcount;
} frame_data_t;

typedef struct call_frame{
int data;
struct call_frame *previous;
}call_frame_t;

typedef struct call_stack{
call_frame_t *top;
int size;
}call_stack_t;

lilli. hat dieses Bild (verkleinerte Version) angehängt:
Stapel.png

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von lilli.: 06.03.2014 14:12.

06.03.2014 13:43 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

data in call_frame_t ist nicht vom Typ int.

Gruß
Marco
06.03.2014 14:00 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hinter "retval" fehlt ein ";", oder?

Gruß
Marco
06.03.2014 14:03 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

ja genau. Aber das Erste hab ich jetzt nicht verstanden.
06.03.2014 14:12 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Aufgabe2 : Deklarieren Sie eine globale Variable call_stack vom Typen call_stack_t und nehmen Sie eine Belegung der Elemente auf sinnvolle Werte für einen leeren Stapel vor (entweder durch Initialisierung oder durch Zuweisungen der Strukturelemente in main).

Meine Lösung:

call_stack.size = 0;
call_stacktop = NULL;

3.)Implementieren Sie eine Funktion push, die ein Nutzdatenobjekt oben auf den Stapel "auflegt". Nutzdaten werden als Zeiger an die Funktion übergeben und müssen nicht erst allokiert werden. Ist das Argument ein Nullzeiger, so nimmt die Funktion keine Veränderungen am Stapel vor. Der Prototyp sieht folgende Typisierung der Funktion vor:
void push(frame_data_t *frame)

wie gehe ich hier vor?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von lilli.: 06.03.2014 14:35.

06.03.2014 14:22 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

RE: Stack Liste Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von lilli.
typedef struct call_frame{
int data;
struct call_frame *previous;
}call_frame_t;

Ich meinte das hier: Da ist das erste Feld "data" als int deklariert, aber es soll ja ein Zeiger sein auf das Datenelement.

Gruß
Marco
06.03.2014 14:31 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von lilli.
Aufgabe2 : Deklarieren Sie eine globale Variable call_stack vom Typen call_stack_t und nehmen Sie eine Belegung der Elemente auf sinnvolle Werte für einen leeren Stapel vor (entweder durch Initialisierung oder durch Zuweisungen der Strukturelemente in main).

Meine Lösung:

call_stack.size = 0;
call_stacktop = NULL;

Ich denke, das ist im Prinzip eine gute und sinnvolle Initialisierung. Allerdings fehlt ein Punkt in der zweiten Zeile!

Nochmal mein Tipp deshalb: Mache Dir ein ganz kleines C-Programm mit einer main() Funktion, sonst nichts, und schreibe Dir da Deinen Code rein. Dann probierst Du es zu kompilieren und bekommst solche Fehler direkt gesagt.
In einer Entwicklungsumgebung bekommst Du eventuell sogar schon vorher direkt im Editor solche Stellen "untergringelt". Das spart ne Menge Arbeit!

Gruß
Marco
06.03.2014 14:36 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

stimmt es so:
1.)
typedef struct call_frame{
frame data *data;
struct call_frame *previous;
}call_frame_t;
2.)

call_stack.size = 0;
call_stack.top = NULL;
06.03.2014 14:37 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Fast Augenzwinkern
Der Typ ist dann "frame_data_t", sonst müsstest Du wieder "struct" vorne dran schreiben, was aber unsinnig wäre, wenn Du so wie so schon den Typ mit typedef definiert hast.

Gruß
Marco
06.03.2014 15:03 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ansatz zu 3.)

void push(frame_data_t *frame){

frame_data_t *frame;

if((s = (call_frame_t*)malloc sizeof(call_frame_t))) = =NULL){

perror("malloc);
exit(EXIT_FAILURE);
}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von lilli.: 06.03.2014 15:17.

06.03.2014 15:09 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von lilli.
void push(frame_data_t *frame){

frame_data_t *frame;

Wenn Du frame schon als Übergabeparameter hast, dann brauchst Du das nicht nochmal zu deklarieren. Das ist dann quasi schon "implizit" deklariert, sprich die Variable ist dann einfach vorhanden.
Aber die Funktion ist da ja noch nicht fertig. Die eigentliche Arbeit muss ja noch gemacht werden...

Gruß
Marco
06.03.2014 15:26 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

void push(frame_data_t *frame){

if((s = (call_frame_t*)malloc sizeof(call_frame_t))) = =NULL){

perror("malloc);
exit(EXIT_FAILURE);
}

s->data = frame;
s-> prev= NULL;
return s;

Ich habe leider keine Ahnung wie es weitergehen soll.
06.03.2014 15:32 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

In der if-Anweisung sind ja die beiden "=="-Zeichen. Ich glaube die müssen zusammen stehen (das ist ein einziger Vergleichsoperator, der aus zwei Zeichen besteht, ein Leerzeichen würde daraus zwei einzelne "=" machen).
prev muss auf den vorhergehenden Stackeintrag zeigen, zumindest wenn das zweite Element eingetragen wurde. Das ist das, wo bisher top drauf gezeigt hatte. Umgekehrt muss top nachher auf den neuen Eintrag zeigen.

Schau mal, ob Du damit etwas anfangen kannst.

Gruß
Marco
06.03.2014 16:28 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
lilli.
Grünschnabel


Dabei seit: 06.03.2014
Beiträge: 8

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich verstehe das leider nicht, wir haben leider kein anderes Beispiel bekommen. Ich weis zwar was ein stack macht, aber nicht wie die einzelnen Operatoren arbeiten. Ich kenne push und Pop mehr nicht.
06.03.2014 16:43 lilli. ist offline Beiträge von lilli. suchen Nehmen Sie lilli. in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Klar, das genügt doch auch, zumindest erstmal! Augenzwinkern

Schau Dir doch mal das Diagramm von Deinem ersten Post an. Das wäre die Situation nachdem einmal die Initialisierung gelaufen ist und dann dreimal ein push ausgeführt wurde.
Wie muss das push arbeiten, damit es nach drei Aufrufen diese Struktur herstellt?

Gruß
Marco
06.03.2014 16:52 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Stack Liste