Zum Inhalt springen

C-Stapelspeicher (Stack), Hilfe


Knigge87

Empfohlene Beiträge

Hallo, bin neu hier im Forum und komme bei einer Infromatikaufgabe nicht weiter, die relevant für die Klausur ist.

Die Aufgabe lautet:

Erstellen sie eine Datenstruktur in C, nicht C++ für einen Stapelspeicher mit einer statischen Größe von 8 Einträgen mit Dateninhalt einer Integerzahl.

Geben sie den Programmcode für Funktionen void push(intx) und int pop() an.

Auf die Stapelstruktur wird global zugegrifen.

Wäre nett, wenn mir jemand dabei helfen könnte.

struct stack

{

int s_element[8]

};

wie gehe ich vor. ??????

Freue mich auf Antworten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ganz Allgemein, ich weiß nicht wie ich das Programm schreiben soll?
Zuerst würde ich mir (entweder im Kopf oder mit Toolunterstützung) Gedanken darüber machen was für Daten prinzipiell verwaltet werden müssen und in welchen Datenstrukturen und -typen diese abgelegt werden sollen. Anschließend dann die grobe algorithmische Analyse: Was bedeutet die Operation pop (was muss von A nach B verschoben werden), was beudetet push. Anschließend gilt es dann das ganze zu coden.

Und um dir direkt die Hoffnungen zu nehmen: Den fertigen Code wird dir hier niemand vorsetzen - das würde bei dir auch nicht zu dem gewünschten Lerneffekt führen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Hast Du Dich denn schon mit dem Thema Stack beschäftigt?

Ein Stack ist ja nicht weiter als ein Stapel von Werten. In Deinem Fall nur mit begrenzter Anzahl von Elementen.

Ersteinmal eine kleine Bestandsaufnahme zur Anregung:

- Array mit 8 Elementen (hast Du)

- ein Zähler, der auf das "oberste" Element des Stacks zeigt

- Funktionen Push und Pop um Werte auf den Stack zu legen/vom Stack zu holen

- Ein kleiner Rest Eigenleistung um jetzt noch das Programm zu erstellen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist ein Stack nicht immer LIFO? Man kann doch nur das Element entnehmen, das oben auf dem Stapel liegt.
So ist es.

Bestimmte Stack-Implementierungen (z.B. der grauenhafte java.util.Stack) erlauben es dann trotzden noch auf die weiteren Elemente zuzugreifen, aber streng konzeptionell ist ein Stack immer LIFO, denn:

Sonst kippt er doch um!
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, danke schon mal für die vielen Antworten. Prinzipiell verstehe ich die stack(Stapelspeicher) und was deren Aufgabe ist. Hab mir die Aufgabe gestern nochmal angegeuckt.....und bin zu folgendem Programmcode gekommen:

Es handelt sich natürlich um einen Lifo.....

so nun der Code:

struct stack {

int element[8];

int tail;

};

struct stack intstack;

void init()

{

stack tail=0;

}

void push(struct stack, int x)

{

if(tail==8) error("full");

element[tail]=x;

tail=tail+1;

return;

};

int pop(struct stack)

{

int x;

if(tail==0) error("empty");

x=element[tail-1];

tail=tail-1

return x;

};

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist der Programmcode denn prinzipiell richtig?

Er lässt sich leidernicht ausführen, weil ich eine Fehlermeldung bekomme?

Bin Elektrotechnikstudent im 2 Semester und haben uns mit C nur 2 Wochen beschäftigt bzw in 2 Vorlesungsstunden alles behandelt.......

Versuche jetzt mir selbst einbischen C beizubringen......

Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert......

Link zu diesem Kommentar
Auf anderen Seiten teilen

Er lässt sich leidernicht ausführen, weil ich eine Fehlermeldung bekomme?
Wozu das Fragezeichen? Bekommst du nun eine Fehlermeldung oder nicht? Und wenn ja: Welche denn?

Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert......
Deine Hausaufgaben sollst du selbst erledigen und nicht einen anderen für dich machen lassen - dann ist dein Lerneffekt nämlich gleich null.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wäre nett, wenn einer mal den Programmcode zu kurz wie möglich schreiben könnte, das er auch funktioniert......

Ich schließe mich da perdian an, so lernst Du es nicht.

Außerdem hilft auch ein gutes C Buch. Du solltest dort die Kapitel Datentypen und call-by-reference bzw call-by-value durcharbeiten. Außerdem gibt es diverse Referenzimplementierungen im Netz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die vielen Antworten.

Hatte mir von dem Forum ein bischen mehr erwartet.....

Es handelt sich hier ja nicht um Hausaufgaben.....in den Semesterferien macht das wenig Sinn....

Wir schreiben in 2 Wochen eine Klausur und leider komm ich mit der Aufgabe nicht weiter.....

Danke für eure Bemühungen......werd mir die Aufgabe von einem Informatiker erklären lassen.......hier hat da ja keiner Lust zu

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hatte mir von dem Forum ein bischen mehr erwartet
Nun, das kommt auf die Anspruchshaltung an, mit der man an eine solche Sache herangeht. "Das Forum" gibt es sowieso nicht - es besteht immer aus Menschen, die bereit sind dort anderen Leuten zu helfen, ihre Meinung zu posten, etc. Und sobald man es mit Menschen zu tun hat ist es nun einmal so, dass man nicht immer das von ihnen bekommt, was man sich gerne vorgestellt hat.

Oder um eine anderen Metapher zu verwenden: Wie man in dei Wald hinein ruft...

Es handelt sich hier ja nicht um Hausaufgaben [...] Wir schreiben in 2 Wochen eine Klausur und leider komm ich mit der Aufgabe nicht weiter
Wo ist der Unterschied?

Wenn du hier die Lösungen fertig präsentiert bekommst hast du keinen Lerneffekt dabei. Gut, theoretisch könntest du ihn haben, wenn du dir die Lösungen genau ansiehts, den Weg zurück verfolgst, etc. Der Erfahrung nach macht das aber niemand. Und wenn du dir tatsächlich diesen Aufwand machen willst - wieso fängst du dann nicht einfach bei den Grundlagen an anstatt die ersten beiden Kapitel zu überspringen und dich dann zu wundern, wieso das dritte Kapitel plötzlich so unverständlich ist?

hier hat da ja keiner Lust zu
Ich glaube mit Lust hat das wenig zu tun. Und jetzt hör auf zu jammern wie gemein und ungerecht die Welt ist und tu selbst etwas.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Mit deinen Aussagen hast ja auch auch vollkommen recht, ich hätte mir nur gewünscht, dass einer mal ein Statement zu meinem Programm abgibt.

Ob ich prinzipiell auf dem richtigen Weg bin oder das Programm komplett falsch programmiert ist??

Habe die Kapitel dazu durchgearbeitet und mir stellt sich außerdem die Frage ob ich in C Pfeilzuweisungen -> benutzen muss für das Programm??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe die Kapitel dazu durchgearbeitet und mir stellt sich außerdem die Frage ob ich in C Pfeilzuweisungen -> benutzen muss für das Programm??

Pfeilzuweisungen brauchst du nur bei Zeigern (ich nehm mal an, dass du das meinst). Da die instanz der Struktur aber global sein soll, brauchst du keine Zeiger.

Anmerkung:

Ich vermisse eine Main.

Link zu diesem Kommentar
Auf anderen Seiten teilen

struct stack {

int element[8];
int tail;
}; // [COLOR="SeaGreen"]Soweit, so gut.[/COLOR]

struct stack intstack; [COLOR="SeaGreen"]// Auch O.K.[/COLOR]

void init()

{
stack tail=0; [COLOR="#2e8b57"]// Das ist Quatsch. Es gibt keinen Typ namens stack
// (bestenfalls struct stack, aber auch das wäre Quatsch,
// es gibt ja schon den globalen Stack).[/COLOR]
}

void push(struct stack, int x) [COLOR="#2e8b57"]// Parameterliste entspricht nicht der Aufgabenstellung[/COLOR]
{
if(tail==8) error("full"); [COLOR="#2e8b57"]// hier gibt's kein tail[/COLOR]
element[tail]=x; [COLOR="#2e8b57"]// und auch kein element[/COLOR]
tail=tail+1; [COLOR="#2e8b57"]// s.o.[/COLOR]
return; [COLOR="#2e8b57"]// Das kann weg[/COLOR]
}; [COLOR="#2e8b57"]// Das Semikolon ist überflüssig[/COLOR]

int pop(struct stack) [COLOR="#2e8b57"]// Parameterliste entspricht nicht der Aufgabenstellung[/COLOR]
{
int x;
if(tail==0) error("empty"); [COLOR="#2e8b57"]// s.o.[/COLOR]
x=element[tail-1]; [COLOR="#2e8b57"]// s.o.[/COLOR]
tail=tail-1 [COLOR="#2e8b57"]// s.o., Semikolon fehlt[/COLOR]
return x;
}; [COLOR="#2e8b57"]// s.o.[/COLOR][/code]

Auf Elemente einer Struktur greift man übrigens mit dem Punkt-Operator zu.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schlimmer als vorher. Du hast fast alles, was richtig war, entfernt.

Du brauchst keine main-Funktion, weil in der Aufgabenstellung nicht nach einem vollständigen Programm gefragt wird. Selbst wenn, wäre es Blödsinn, um alles einen main-Block zu legen.

  • intx gibt's nicht.
  • element ist in push und pop kein gültiger Bezeichner, weil es weder eine lokale noch eine globale Variable mit diesem Namen gibt. Es gibt ein Element einer Struktur. Strukturelemente spricht man an, indem man den Namen des Strukturobjekts und den Namen des Elements mit dem Punkt-Operator (.) verbindet.
  • Selbst dieses Strukturelement "element" ist kein int, kann also nicht 0 oder 8 sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...