Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα στο φορουμ. Εχω μια ασκηση που μεσα σε αυτην πρεπει να διαχειριζομαι και να διατηρω μια λίστα..
Ο χρηστης θα μπορει μεσα απο μενου που εχω φτιαξει να επιλεγει να
εισαγει ενα στοιχειο στην λιστα. Στην αρχη του προγραμματος πριν απο την
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");
    }
}

 

Ολα καλα και ο κωδικας δεν βγαζει σφαλμα ομως αφου εχω εισαγει
στοιχεια και επιστρεψει στο μενου οταν παταω εμφανιση λιστας μου
εμφανιζει Κενη.. Που βρισκεται το λαθος? Μπορει να βοηθησει καποιος?
Ευχαριστω εκ των προτερων.

Δημοσ.

Στο σημείο:

if(currentPtr=NULL){

 

έτσι το έχεις γράψει και στο πρόγραμμά σου? Γιατί αυτό είναι εκχώρηση και όχι σύγκριση. Θέλει == και όχι =.

Δημοσ.

Εχεις δικιο αλλα και που το αλλαξα δεν αλλαξε κατι.. Να πω ακομα πως οι κλησεις των συναρτησεων ειναι καπως ετσι:

printf ("Dwse stoixeio gia eisagwgi:");
	                	    scanf ("%d", &y);
	                	    Insert(&startPtr, y);


printList(startPtr);
Δημοσ.

Δες το παρακάτω παράδειγμα και μελέτα το. Πχ εσύ στην 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;
  }
}
Δημοσ.

εαν θυμαμαι καλα απο την c η οταν δινεις το τελευταιο στοιχειο στην λιστα ο pointer της μενει σε αυτη την θεση(τελευταια) - οποτε λογικα στην εμφανιση θα πρεπει πρωτα να τον τοποθετεις στην πρωτη/αρχικη θεση - να κανεις scan τις τιμες και να εμφανιζεις αντιστοιχως.

 

 

πρεπει να δεις το head της και to head pointer της

Δημοσ.

Δεν βλέπω κάποιο struct (η έστω ξεχωριστά variables) όπου να έχεις τους Head/Tail pointer. Πως θα ξέρει απο που να ξεκινήσει χωρίς τον Head pointer;

Δημοσ.

Συμπληρωματικά μπορείς να διαβάσεις και τις Ελληνικές σημειώσεις που έχω δημοσιεύσει στο link της υπογραφής μου.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...