υλοποιηση στοίβας σε c

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
smurf2
Δημοσιεύσεις: 6
Εγγραφή: 03 Δεκ 2005 21:32
Τοποθεσία: Athina&Patra

υλοποιηση στοίβας σε c

Δημοσίευση από smurf2 » 09 Δεκ 2005 14:33

Γεια σας...!Προσπαθώ να υλοποιήσω μία στοίβα σε C,αλλά δε γνωρίζω καλά τη γλώσσα και δεν ξέρω κατά πόσο η σκέψη μου είναι σωστή.Αν κάποιοιος θέλει και μπορεί να βοηθήσει ας μου πει μία γνώμη...
Παραθέτω τον κώδικά μου...


#include <stdio.h>
void push( float data);
void pop();
float top();
enum boolean { FALSE, TRUE};
boolean is_empty();
boolean answer = TRUE ;
float data;
float swros[50];
int head = -1 ;
main()
{
int arithmos ;
float data1;
printf (" Dwste ton arithmo tis praxis pou thelete \n");
printf ("1 gia is_empty()\n");
printf ("2 gia push(data)\n");
printf ("3 gia pop()\n");
printf ("4 gia top() \n");
scanf ("%d",&arithmos) ;
if (arithmos==1)
is_empty() ;
else if (arithmos==2)
{printf ("Dwste stoixeio gia to swro \n");
scanf ("%f",&data1);
push(data1);}
else if (arithmos==3)
pop();
else if (arithmos==4)
top();
else
printf ("Lathos arithmos \n");
}
boolean is_empty()
{
return answer ;
}
void push( float data)
{
swros[head] = data;
head = head+1;
}
void pop()
{ swros[head] = 0 ;
head = head -1 ;
}
float top()
{ return swros[head] ;}

[/code]

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

υλοποιηση στοίβας σε c

Δημοσίευση από dva_dev » 09 Δεκ 2005 18:16

Αρκετά καλή η προσπάθεια σου, και με μερικές βελτιώσεις θα δουλεύει ακόμα καλύτερα.

1) Το πρόγραμμα σου θα πρέπει να λειτουργεί μέχρι ο χρήστης να δώσει κάποια επιλογή για να τερματίσει, και να μην ζητάει μόνο μια επιλογή και μετά να τερματίζει μόνο του. Ετσι θα μπορέσεις και εσύ να το τεστάρεις καλύτερα.

2) Αν η στοίβα είναι άδεια και πας να κάνεις pop ή top (επιλογή 3 ή 4) δεν γίνεται έλεγχος αν η στοίβα είναι άδεια.

3) Αν κάνεις συνέχεια push (επιλογή 2) δεν γίνεται έλεγχος αν η στοίβα σου έχει γεμίσει.

Αν αφήσεις τα 2), 3) όπως έχουν θα έχεις εξασφαλισμένο memory corruption ή στην καλύτερη περίπτωση access violation.

4) Η μεταβλητή answer που επιστρέφει η is_empty() δεν ενημερώνεται μετά από κάθε push και pop ώστε να δείχνει την κατάσταση της στοίβας.

5) Αφού η αρχική τιμή της μεταβλητής head ξεκινάει με -1 (και έχοντας υπόψην ότι οι πίνακες στη C είναι 0 based - το πρώτο στοιχείο του πίνακα είναι το swros[0]) πρέπει στο push() πρώτα να αυξάνεις το head και μετά να καταχωρείς το στοιχείο.

6) Την μεταβλητή data που δηλώνεις στην αρχή (πρίν το swros[50]) δεν την χρησιμοποιείς πουθενά. Οπότε μπορείς να τη σβήσεις.

Ισως αντί να χρησιμοποιείς τα if ... else if ... else if ... δοκίμασε να χρησιμοποιήσεις την switch... case... ο κώδικας είναι πιό συμμαζεμένος.
π.χ.

Κώδικας: Επιλογή όλων

switch &#40;arithmos&#41;
&#123;
case 1&#58;
	is_empty&#40;&#41;;
	break;
case 2&#58;
	printf &#40;"Dwste stoixeio gia to swro \n"&#41;;
	scanf &#40;"%f",&data1&#41;;
	push&#40;data1&#41;;
	break;
case 3&#58;
	pop&#40;&#41;;
	break;
case 4&#58;
	top&#40;&#41;;
	break;
default&#58;
	printf &#40;"Lathos arithmos \n"&#41;;
	break;
&#125;

smurf2
Δημοσιεύσεις: 6
Εγγραφή: 03 Δεκ 2005 21:32
Τοποθεσία: Athina&Patra

υλοποιηση στοίβας σε c

Δημοσίευση από smurf2 » 12 Δεκ 2005 01:03

eyxaristw poly gia ti voitheia!! tha ta koitaxw osa mou eipes...na sai kala!!

bitMan
Δημοσιεύσεις: 10
Εγγραφή: 03 Ιαν 2006 20:16
Τοποθεσία: (Patra && Crete);
Επικοινωνία:

υλοποιηση στοίβας σε c

Δημοσίευση από bitMan » 03 Ιαν 2006 20:21

tha mporouses na xrhsimopoihseis ylopoihsh me domes anti gia statiko array...
Etsi me thn katallhlh deiktodothsh apo to ena stoixeio sto allo tha mporeis na prostheseis osa stoixeia thleis sto swro xwris na se periorizei to megethos tou pinaka...
--<>----><----<>----<>-----<>--

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες