jimisvog Δημοσ. 23 Φεβρουαρίου 2013 Δημοσ. 23 Φεβρουαρίου 2013 Καλησπερα στο φορουμ. Εχω μια ασκηση που μεσα σε αυτην πρεπει να διαχειριζομαι και να διατηρω μια λίστα..Ο χρηστης θα μπορει μεσα απο μενου που εχω φτιαξει να επιλεγει ναεισαγει ενα στοιχειο στην λιστα. Στην αρχη του προγραμματος πριν απο τηνmain κ.λ.π εχω δημιουργησει την λιστα ως εξης: struct list { int data; struct list *nextPtr; }; typedef struct list List; typedef List *ListPtr; Επειτα μεσα στο προγραμμα εχω ενα μενου με επιλογες switch καιδιαφορα cases. Καθε case καλει και συγκεκριμενη συναρτηση που κανει τηνδουλεια που πρεπει. Ετσι εχω την εξης συναρτηση που εισαγει τα στοιχειαο χρηστης και οταν τελειωσει ξαναεπιστρεφει στο μενου: void Insert (ListPtr *sPtr, int x){ ListPtr newPtr; ListPtr previousPtr; ListPtr currentPtr; newPtr = malloc(sizeof(List)); if(newPtr!=NULL){ newPtr->data = x; newPtr->nextPtr = NULL; previousPtr = NULL; currentPtr = *sPtr; } else{ printf("Adunati i eisagwgi stoixeiou. Mh eparkis mnimi.\n"); } } Επειτα μια αλλη επιλογη απο το μενου ειναι η εμφανιση της λιστας με την εξης συναρτηση: void printList (ListPtr currentPtr){ if(currentPtr=NULL){ printf("H lista einai keni.\n"); } else{ printf("H lista einai: "); while(currentPtr!=NULL){ printf("%d --> ", currentPtr->data); currentPtr = currentPtr->nextPtr; } printf("Keni\n"); } } Ολα καλα και ο κωδικας δεν βγαζει σφαλμα ομως αφου εχω εισαγειστοιχεια και επιστρεψει στο μενου οταν παταω εμφανιση λιστας μουεμφανιζει Κενη.. Που βρισκεται το λαθος? Μπορει να βοηθησει καποιος?Ευχαριστω εκ των προτερων.
siropio Δημοσ. 23 Φεβρουαρίου 2013 Δημοσ. 23 Φεβρουαρίου 2013 Στο σημείο: if(currentPtr=NULL){ έτσι το έχεις γράψει και στο πρόγραμμά σου? Γιατί αυτό είναι εκχώρηση και όχι σύγκριση. Θέλει == και όχι =.
jimisvog Δημοσ. 23 Φεβρουαρίου 2013 Μέλος Δημοσ. 23 Φεβρουαρίου 2013 Εχεις δικιο αλλα και που το αλλαξα δεν αλλαξε κατι.. Να πω ακομα πως οι κλησεις των συναρτησεων ειναι καπως ετσι: printf ("Dwse stoixeio gia eisagwgi:"); scanf ("%d", &y); Insert(&startPtr, y); printList(startPtr);
siropio Δημοσ. 23 Φεβρουαρίου 2013 Δημοσ. 23 Φεβρουαρίου 2013 Δες το παρακάτω παράδειγμα και μελέτα το. Πχ εσύ στην Insert σου φτιάχνεις και ξαναφτιάχνεις τον newPtr, currentPrt και prevPtr. Επίσης κάνεις feed στην Insert περίεργα μέσω pointer αντί απλά για αριθμό. Πρόσεξε και την malloc. #include <stdio.h> #include <stdlib.h> typedef struct node{ int num; struct node *next; }Node, *NodePtr; main(){ void printList(NodePtr); NodePtr makeNode(int); int n; NodePtr top, np, last; top = NULL; if (scanf("%d", &n) != 1) n=0; while (n!=0){ np = makeNode(n); if (top == NULL) top=np; else last->next = np; last = np; if (scanf("%d", &n) != 1) n=0; } printList(top); } NodePtr makeNode(int n){ NodePtr np = (NodePtr)malloc(sizeof(Node)); np->num = n; np->next = NULL; return np; } void printList(NodePtr np){ while (np != NULL){ printf("%d\n", np->num); np = np->next; } }
Επισκέπτης Δημοσ. 25 Φεβρουαρίου 2013 Δημοσ. 25 Φεβρουαρίου 2013 εαν θυμαμαι καλα απο την c η οταν δινεις το τελευταιο στοιχειο στην λιστα ο pointer της μενει σε αυτη την θεση(τελευταια) - οποτε λογικα στην εμφανιση θα πρεπει πρωτα να τον τοποθετεις στην πρωτη/αρχικη θεση - να κανεις scan τις τιμες και να εμφανιζεις αντιστοιχως. πρεπει να δεις το head της και to head pointer της
ZAKKWYLDE Δημοσ. 26 Φεβρουαρίου 2013 Δημοσ. 26 Φεβρουαρίου 2013 Δεν βλέπω κάποιο struct (η έστω ξεχωριστά variables) όπου να έχεις τους Head/Tail pointer. Πως θα ξέρει απο που να ξεκινήσει χωρίς τον Head pointer;
Επισκέπτης Δημοσ. 27 Φεβρουαρίου 2013 Δημοσ. 27 Φεβρουαρίου 2013 Δες αυτο - ειναι κατατοπιστικο http://www.thegeekstuff.com/2012/08/c-linked-list-example/ Συγνωμμη που δεν μπορω να βοηθησω με κωδικα αλλα πανε πολα χρονια απο την c. Ελπιζω να σε βοηθησει το link. ΕΑΠ?
migf1 Δημοσ. 28 Φεβρουαρίου 2013 Δημοσ. 28 Φεβρουαρίου 2013 Συμπληρωματικά μπορείς να διαβάσεις και τις Ελληνικές σημειώσεις που έχω δημοσιεύσει στο link της υπογραφής μου.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα