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

Informatiker Board » Themengebiete » Sonstige Fragen » Kellerspeicher C » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 4 Beiträge
Karlito

Hallo Grul9,

mein Ansatz ist ein wenig schwieriger zu verstehen, sollte aber für's Lernen gut sein. Es ist noch eher am echten Stack angelehnt, da hier auch mit einem Adressbereich gearbeitet wird und nicht mit einer verketteten Liste. Auch hier alles ohne Prüfung.

main.c:
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:
#include <stdlib.h>
#include <stdio.h>

#include "stack.h"

int main(int argc, char **argv){
	int i;

	init(100);

	for (i=0; i<100; i++){
		push(i);
	}

	for (i=0; i<100; i++){
		printf("%d, ", pop());
	}
	printf("\n");
	
	destroy();

	return 0;
}


stack.h
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
#ifndef _STACK_H_
#define _STACK_H_

void init(int);
void destroy();
void push(int);
int pop();

#endif //_STACK_H_


stack.c:
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:
#include <stdio.h>
#include <stdlib.h>

#include "stack.h"

static int *basePointer = NULL;
static int *stackPointer = NULL;

void init(int elements){
	stackPointer = basePointer = (int *)realloc(basePointer, elements * sizeof(int));
}

void destroy(){
	free(basePointer);
	stackPointer = basePointer = NULL;
}


void push(int value){
	*(stackPointer++) = value;
}

int pop(){
	return *(--stackPointer);
}


Falls es dazu Fragen gibt, gerne hier stellen.

Gruß,

Karlito
Grul9

Dankeschön smile
eulerscheZahl

Sollte laufen. Es fehlen noch Prüfungen, ob malloc Speicher reservieren kann und ob bei pop noch etwas auf dem Stack steht.
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:
#include <stdio.h>
#include <stdlib.h>

struct entry {
	int value;
	struct entry* prev;
};

struct entry* push(struct entry* top, int value) {
	struct entry* newEntry = (struct entry*)malloc(sizeof(struct entry));
	newEntry->value = value;
	newEntry->prev = top;
	top = newEntry;
	return newEntry;
}

int pop(struct entry** top) {
	int value = (*top)->value;
	*top = (*top)->prev;
	return value;
}

int main() {
	struct entry* stack = (struct entry*)malloc(sizeof(struct entry));
	stack = push(stack, 1);
	stack = push(stack, 2);
	stack = push(stack, 3);
	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));
	printf("%d\n", pop(&stack));
}
Grule9 Kellerspeicher C

Meine Frage:
Ich möchte einen Kellerspeicher in C bauen. Die Zahlen (integer reichen) sollen im Heap gespeichert werden, deshalb möchte ich Zeiger benutzen. Bei push(x) soll die Zahl x im Heap gespeichert werden und bei pop() die letzte gespeicherte Zahl aus push() ausgegegeben werden.

Meine Ideen:
Idee bei der Funktion push(x):

int push(x){
*zeiger = malloc(sizeof(int);
*zeiger = x;
}

Wie kann ich dieses x nun in einer anderen Funktion pop() aufrufen? ich habe *zeiger ja nur in push.

Bisheriger Quelltext:

#include <stdio.h>
#include <stdlib.h>


int push(x){
int *zeiger = malloc(sizeof(int));
*zeiger = x;
}


int pop(void){
printf("%d\n", ???);
}


int main(void) {
push(5);
push(20);
pop();

return EXIT_SUCCESS;
}