Stapel(stack)
-
ihr seid mal wieder lollig
-
iterations-flamer schrieb:
Es gibt nicht beliebig viel Speicherplatz.
Und deshalb ist pi auch 3+1/7.
Was hat denn das jetzt damit zu tun.
-
hey leute..
Wie ich sehe habt ihr verschieden viele varianten das problem zu lösen ... langsam blick ich nicht mehr durch welche die sinnvollste ist.
Hab mich heut den ganzen tag mit zeiger auseinandergesetzt und morgen werd ich mich mit realloc und malloc und strukturen.... beschäftigen...
Welche ist nun die sinnvollste bzw unkomplitzierteste die auch die Aufgabenstellung erfüllt.?
gruß
-
hasso schrieb:
Welche ist nun die sinnvollste bzw unkomplitzierteste die auch die Aufgabenstellung erfüllt.?
na die 'realloc'-version natürlich. da kopierste einfach die elemente mit memcpy rein und brauchst keine linked list zu managen. eine beliebte methode sowas zu machen ist, den speicher einfach zu verdoppeln, wenn das element nicht mehr reinpasst. im unterschied zu der verkettetn liste werden heapmanagement-funktionen viel seltener aufgerufen d.h. es ist schneller und der heap fragmentiert nicht so stark. noch besser, wenn du mit einer schicken zweierpotenz beginnst (z.b. 1024 oder sowas) beginnst.
-
realloc-freak schrieb:
hasso schrieb:
Welche ist nun die sinnvollste bzw unkomplitzierteste die auch die Aufgabenstellung erfüllt.?
na die 'realloc'-version natürlich. da kopierste einfach die elemente mit memcpy rein und brauchst keine linked list zu managen. eine beliebte methode sowas zu machen ist, den speicher einfach zu verdoppeln, wenn das element nicht mehr reinpasst. im unterschied zu der verkettetn liste werden heapmanagement-funktionen viel seltener aufgerufen d.h. es ist schneller und der heap fragmentiert nicht so stark. noch besser, wenn du mit einer schicken zweierpotenz beginnst (z.b. 1024 oder sowas) beginnst.
in der aufgabe geht es doch in erster linie erstmal, überhaupt einen stack mit einer gewünschten größe zu erstellen ( eingabe ).
mit realloc hat das erstmal gar nichts zu tun, das wäre als eine denkbare erweiterung anzusehen
-
in der aufgabe geht es doch in erster linie erstmal darum, überhaupt einen stack mit einer gewünschten größe zu erstellen ( eingabe ).
mit realloc hat das erstmal gar nichts zu tun, das wäre als eine denkbare erweiterung anzusehen
-
grammatikverbesserer schrieb:
in der aufgabe geht es doch in erster linie erstmal darum, überhaupt einen stack mit einer gewünschten größe zu erstellen ( eingabe ).
da steht irgendwas von 'beliebiger' grösse. ohne eine allokator-funktion oder sowas wird man dem wohl kaum gerecht werden (auch wenn man in der praxis natürlich nicht unendlich viel speicher hat).
-
da wird man wohl erstmal malloc nehmen, gelle woll
-
sTaCkCrEaToR schrieb:
da wird man wohl erstmal malloc nehmen, gelle woll
ne, gleich realloc. realloc kann alles, was malloc und free auch können.
-
macht doch alles was ihr wollt, ihr macht doch sowieso was ihr wollt.
-
das ist doch unlogisch, realloc zu benutzen, wenn ich nicht reallokieren will.
-
haarspalter schrieb:
das ist doch unlogisch, realloc zu benutzen, wenn ich nicht reallokieren will.
muss man ja auch nicht, aber bei seinem stack wird er's brauchen. es sei denn er macht's doch mit verketteter liste. dann natürlich nicht.
-
nö, wird er nicht brauchen. ist doch gar nicht in der aufgabe gefraaaagt.
-
Hallo,
In der Aufgabenstellung steht , das man beliebieg viele elemente hinzufügen soll..
Das heisst da es nicht vorhersebar ist wieviel Speicher benötigt wird muss der Speicher jedesmal vergrößert werden wennn er voll ist. Das heisst immer weiter freien Speicher anfordern um den Speicher zu vergrößern. Das kann man mit realloc und malloc () machen.
So ist es hier beschrieben:
http://www.goblack.de/desy/sc12chip/c/bibliothek/malloc.html
Hierzu hab ich nicht viel gefundenStapel (stack) . kennt jemand eine Web-Site wo ich hierzu Informationen finde.
Und. Für jedes Element passendes Strukturtyp.
Wie ist das gemeint:struct person { char name[20]; int alter; float gehalt; var1,var2,var3}
So???
gruß
-
hasso schrieb:
Hierzu hab ich nicht viel gefundenStapel (stack) . kennt jemand eine Web-Site wo ich hierzu Informationen finde.
hasso schrieb:
Ich hab mich in Wikipedia schlau gemacht , und hab das Prinzip LIFO (last input first out)verstanden.
-
also hasso, wieso erwartest du von uns, dass wir dir alles aufm goldenen Tablet servieren? Lerne endlich Google zu benutzen. Es gibt tausende Seiten, die fertige Implementierungen von Stacks in C haben. Also erzähl uns nicht, dass du keine Information dazu findest. Du bist echt nicht zu helfen
-
hasso schrieb:
Hierzu hab ich nicht viel gefundenStapel (stack) . kennt jemand eine Web-Site wo ich hierzu Informationen finde.
Betrachte den Stack als ein Array mit einem Index. Der Index zeigt immer auf das oberste Element.
hasso schrieb:
Wie ist das gemeint:
struct person { char name[20]; int alter; float gehalt; var1,var2,var3}
So???
grußWenn du die komischen varX rausschmeisst, dann sieht das in erster Näherung ganz brauchbar aus.
Fürs Alter sollte in den meisten Fällen ein signed char ausreichen
Sicherheitshalber kannst du es ja auf unsigned char setzen.
(Wer weiss wie das mit dem Ater der Menschen sein wird, wenn man dein Programm in 1000 Jahren noch benutzt. )
-
hallo,
Ich verstehe 1 FEHLERMELDUNG nicht .
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(33) : error C2440: 'Funktion': 'float' kann nicht in 'char *' konvertiert werden
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 30 struct adres {char vorname[MAX]; char name[MAX]; int alter; float gehalt;} output; // nicht ( ; ) vergessen! void output(struct adres * struct_ptr) // Ausgabe der Datensätze! { printf("\n\nSie gaben ein:\n\n"); printf("Vorname......%s:",(*struct_ptr).vorname); // struct_ptr->vorname ! auch eine möglichkeit & ohne klammer printf("Nachname.....%s:",(*struct_ptr).name); // struct_ptr->name); printf("Alter........%i:",(*struct_ptr).alter); // struct_ptr->alter); printf("Gehalt.......%f:",(*struct_ptr).gehalt); // struct_ptr->gehalt); } //void input(adres * struct_eingabe) int main(void) { printf("\nVorname :"); printf("\nEingabe:"); fgets(output.vorname, MAX, stdin); printf("\n\nNachname :"); printf("\nEingabe:"); fgets(output.name, MAX, stdin); printf("\n\nAlter :"); printf("\nEingabe:"); fgets(output.alter, MAX, stdin); printf("Gehalt :"); printf("Eingabe:"); fgets(output.gehalt, MAX, stdin); return EXIT_SUCCESS; }
Tu ich das etwa ein float in char ??
Gruß Hasso
-
hasso schrieb:
printf("Eingabe:"); fgets(output.gehalt, MAX, stdin);
Tu ich das etwa ein float in char ??
Nein, in ein char*. Fehlermeldungen lesen bildet. Dokumentation, z.B. zu fgets, auch. Tip: Du willst wohl eher scanf benutzen.
-
Nene..
das soll schon mit fgets gemacht werden..