Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- stack in c implementieren (http://www.informatikerboard.de/board/thread.php?threadid=813)


Geschrieben von bobby_charles20 am 09.12.2010 um 12:49:

  stack in c implementieren

Meine Frage:
Hallo Leute!
Ich soll einen positiven-Zahlen-Stack (in c) als verkettete Liste, wie sie in stack.h deklariert wurde, implementieren. Ich bin eigentlich kein Informatiker also mache ich nur die Einführung in c und brauche dringend Hilfe, da ich gar nicht weiß, wie ich dieses Programm schreiben soll. Wie schreibe ich die einzelnen Funktionen? Das ist die letzte Aufgebe die ich abgeben muss.

Folgender Teil vom Programm ist vorgegeben:

description: A positive-number int-stack implementation.

#include "stack.h"

//Opaque (transparent) data structure for the stack
//typedef struct _stack * stack;
struct _stack {
//TODO
};

/* Creates a new, empty stack and returns it.
* Please free the object by free_stack
*/
stack create_stack() {
//TODO
}

/* Pushes an element onto the stack s.
*/
void push(stack s, int element) {
//TODO
}

/* Gives back the top element of the stack s. Does not remove.
* Returns -1 if the stack is empty (!).
*/
int top(stack s) {
//TODO
}

/* Gives back the top element of the stack s and removes it.
* Returns -1 if the stack is empty (!).
*/
int pop(stack s) {
//TODO
}

/* Returns wether the stack s is empty.
*/
int empty(stack s) {
//TODO
}

/* Free the memory used by stack s. Afterwards s is undefined.
*/
void free_stack(stack s) {
//TODO
}

Danke für eure Hilfe!

Meine Ideen:
Ich weiß leider nicht, wie ich anfangen soll.



Geschrieben von ed209 am 10.12.2010 um 22:44:

 

Fangen wir an mit der Datenstruktur:

Wie muß "struct _stack" aussehen, wenn du es als verkettete Liste implementieren sollst und der inhalt ein int ist?

Gruß,
ED



Geschrieben von SuperAnd am 10.12.2010 um 23:51:

 

struct _stack {
int zahl;
struct _stack *next;
};

So, ungefähr?



Geschrieben von ed209 am 11.12.2010 um 10:48:

 

Ja, wobei du dir noch überlegen mußt welche seite deiner Liste "oben" ist, und welche Seite "unten" vom Stack ist. Beides geht, nur eines von beiden ist praktischer smile
Im Zweifel probier einfach eins von beiden aus.

Als nächstes mußt du die Funktionen mit Leben füllen, mal das einfachste:
code:
1:
2:
3:
4:
5:
6:
7:
/* Returns wether the stack s is empty.
*/
int empty(stack s) {
//TODO
}


Wie findest heraus ob dein Stack leer ist?

Gruß,
ED



Geschrieben von SuperAnd am 11.12.2010 um 11:57:

 

wenn es Null ist



Geschrieben von ed209 am 11.12.2010 um 12:20:

 

Wie muß dann die Funktion aussehen?



Geschrieben von SuperAnd am 11.12.2010 um 12:28:

 

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
/* Returns wether the stack s is empty.
*/
int empty(stack s) {
if (s == NULL){
return 0;
}
return 1;
}



Geschrieben von ed209 am 11.12.2010 um 13:01:

 

Ich denke das könnte funktionieren, aber denk daran das schön einzurücken das ist mit dem code-tag wunderbar möglich.
Jetzt versuch mal die anderen Funktionen auszufüllen.

Gruß,
ED



Geschrieben von SuperAnd am 11.12.2010 um 13:20:

 

Mein problem liegt bei
stack create_stack()

Ich habe keine Ahnung was ich da einfüllen sollte.



Geschrieben von ed209 am 11.12.2010 um 14:19:

 

Füll doch erstmal aus, was Du weißt.
create_stack soll einen leeren Stack zurückgeben. Wie ein leerer Stack aussieht hast Du ja bereits geschrieben. Es ist einfacher als Du denkst smile



Geschrieben von SuperAnd am 11.12.2010 um 18:34:

 

ich habe echt keine ahnung...



Geschrieben von ed209 am 12.12.2010 um 00:53:

 

Dann füll erstmal aus was du weißt.



Geschrieben von SuperAnd am 12.12.2010 um 04:15:

 

ich habe dir pers pn geschickt...


Forensoftware: Burning Board, entwickelt von WoltLab GmbH