Πρόβλημα με δείκτες στον χειρισμό Στοίβας

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

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

Απάντηση
Nixterida
Δημοσιεύσεις: 11
Εγγραφή: 08 Ιουν 2011 18:34

Πρόβλημα με δείκτες στον χειρισμό Στοίβας

Δημοσίευση από Nixterida » 23 Φεβ 2013 15:33

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

void FilterStack(StackType *Stack, StackElementType *Item)
{
    StackType TempStack;

    CreateStack(&TempStack);
    while(*Item != Stack -> Element[Stack -> Top])
    {
        Push(&TempStack, Stack -> Element[Stack -> Top]);
        Pop(Stack, &Stack -> Element[Stack -> Top]);
    }
    Pop(Stack, &Stack -> Element[Stack -> Top]);
    while(!EmptyStack(TempStack))
    {
        Push(Stack, &TempStack -> Element[TempStack -> Top]);
        Pop(TempStack, TempStack -> Element[TempStack -> Top]);
    }
Έχω αυτή τη συνάρτηση όπου δέχεται την Stack, θέλει να προσπελάσει τα στοιχεία της μέχρι να βρει το Item και να το αφαιρέσει, και μετά να επαναφέρει τα υπόλοιπα πίσω έχοντας χρησιμοποιήσει μια βοηθητική στοίβα TempStack(όχι με απευθείας χειρισμό στοιχείων με πίνακα). Στο 2ο while που υλοποιώ δεν μπορώ να χρησιμοποιήσω σωστά τους pointers για να επαναφέρω από τη βοηθητική στοίβα στην αρχική τα πρώτα στοιχεία που αφαίρεσα.

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

void Push(StackType *Stack, StackElementType Item)
{
    if (!FullStack(*Stack)) {
        Stack -> Top++;
        Stack -> Element[Stack -> Top] = Item;
    } else
        printf("Full Stack...");
}

void Pop(StackType *Stack, StackElementType *Item)
{
    if (!EmptyStack(*Stack)) {
        *Item = Stack -> Element[Stack -> Top];
        Stack -> Top--;
    } else
        printf("Empty Stack...");
}

Nixterida
Δημοσιεύσεις: 11
Εγγραφή: 08 Ιουν 2011 18:34

Πρόβλημα με δείκτες στον χειρισμό Στοίβας

Δημοσίευση από Nixterida » 25 Φεβ 2013 01:46

Τελικά το βρήκα. Επειδή η TempStack που φτιάχνω είναι τοπική, δεν χρειάζεται αναφορά προς αυτήν με δείκτη. Επομένως, είναι λάθος η χρήση του συμβόλου -> που αντιστοιχεί στο (*TempStack).Top ενώ θα έπρεπε να χρησιμοποιήσω απλώς TempStack.Top

Απάντηση

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

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

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