Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Stack Liste (http://www.informatikerboard.de/board/thread.php?threadid=1826)


Geschrieben von lilli. am 06.03.2014 um 17:12:

 

Ich verstehe es leider nicht. Ich bin da echt noch in den Anfängen.
push hängt von frame_data_t und call_stack_t ab.

void push (frame_data_t *frame)
{


if (s == NULL)
return;

frame= new_frame();
frame->value = value;

if (s->top == NULL) {
s->top = frame;
s->size = 1;
return;
}

st->previous = s->top;
s->top = frame;
s->size++;
}



Geschrieben von as_string am 06.03.2014 um 23:43:

 

Hallo,

ich hab das mal in ein kleines Programmchen geschrieben, zumindest wie ich meine, dass es sinnvoll ist.
Ich hab es nicht wirklich getestet, nur mal kompilieren lassen und dabei sicher gestellt, dass keine Syntaxfehler drin sind. Andere Fehler können natürlich noch gut drin sein...

Aber insgesamt: Es bringt wenig, wenn wir Dir einfach Musterlösungen geben. Man lernt das nur durch selber-machen. Klar ist das am Anfang schwer und so, aber anders geht's halt kaum...

Gruß
Marco

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
#include <stdlib.h>

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

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

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

call_stack_t call_stack;

void initialize() {
	call_stack.size = 0;
	call_stack.top = NULL;
}

void push(frame_data_t *frame_data) {
	call_frame_t *call_frame = (call_frame_t *) malloc(sizeof(call_frame_t));
	call_frame->previous = call_stack.top; // previous soll auf den call_frame zeigen, der bisher top war
	call_stack.top = call_frame; // top soll jetzt auf den neuen zeigen
	call_stack.size++; // die Groesse des Stacks (sagt man Tiefe?) hat sich um eins erhoeht 

	call_frame->data = frame_data; // Verweis auf den neuen (uebergebenen) Datensatz
}


Forensoftware: Burning Board, entwickelt von WoltLab GmbH