Perchè usiamo top == -1 per l'implementazione dello stack usando un array semplice?

-3

Sono un principiante delle strutture dati.

Ho letto un'implementazione di uno stack usando un semplice array. L'algoritmo per questa implementazione è presentato di seguito.

Implementazione dello stack in termini di un array

Prima di implementare le operazioni effettive, per prima cosa segui i passaggi seguenti per creare uno stack vuoto.

  1. Includi tutti i file di intestazione utilizzati nel programma e definisci una costante SIZE con un valore specifico.
  2. Dichiara tutte le funzioni utilizzate nell'implementazione dello stack.
  3. Crea un array monodimensionale con dimensioni fisse ( int stack[SIZE] )
  4. Definisci una variabile intera top e inizializza con -1 . ( int top = -1 )
  5. Nel menu principale del metodo di visualizzazione con l'elenco delle operazioni e effettuare chiamate di funzione adatte per eseguire l'operazione selezionata dall'utente nello stack.

push(value) - Inserisce un valore nello stack

In una pila, push() è una funzione utilizzata per inserire un elemento nello stack. In una pila, il nuovo elemento viene sempre inserito nella posizione superiore. La funzione push accetta un valore intero come parametro e inserisce tale valore nello stack. Possiamo utilizzare i seguenti passaggi per inserire un elemento nello stack ...

  1. Controlla se lo stack è PIENO. ( top == SIZE-1 )
  2. Se è FULL, quindi visualizza "Stack is FULL !!! L'inserimento non è possibile !!!" e terminare la funzione.
  3. Se NON è FULL, incrementa il valore massimo di uno ( top++ ) e imposta stack[top] su value ( stack[top] = value ).

pop() - Elimina un valore dallo stack

In una pila, pop() è una funzione utilizzata per eliminare un elemento dalla pila. In una pila, l'elemento viene sempre eliminato dalla posizione superiore. La funzione pop non ha alcun valore come parametro. Possiamo usare i seguenti passaggi per far apparire un elemento dallo stack ...

  1. Controlla se lo stack è EMPTY. ( top == -1 )
  2. Se è VUOTO, quindi visualizza "Lo stack è VUOTO !!! La cancellazione non è possibile !!!" e terminare la funzione.
  3. Se NON è VUOTO, elimina stack[top] e decrementa il valore massimo di uno ( top-- ).

display() - Mostra gli elementi dello stack

Possiamo utilizzare i seguenti passaggi per visualizzare gli elementi di uno stack ...

  1. Controlla se lo stack è EMPTY. ( top == -1 )
  2. Se è VUOTO, quindi visualizza "Stack is EMPTY !!!" e terminare la funzione.
  3. Se NON è EMPTY, quindi definisci una variabile i e inizializza con top. Visualizza stack[i] valore e decremento i valore di uno ( i-- ).
  4. Ripeti il passaggio precedente finché il valore i diventa 0 .

La mia domanda è perché utilizziamo top == -1 nello stack anziché top == 1 ?

    
posta geek 07.03.2018 - 07:03
fonte

2 risposte

7

In C, gli array sono a base zero. Quindi quando top == 0 significa che c'è un elemento nello stack. Di conseguenza, se lo stack è vuoto, l'indice superiore è impostato su -1 in modo che quando viene aggiunto il primo elemento, viene incrementato a 0.

    
risposta data 07.03.2018 - 07:54
fonte
0

Hai bisogno di una variabile che tenga traccia di quanto è riempito il tuo stack. È necessario decidere quale sia il significato esatto di tale variabile e quale dovrebbe essere il suo nome.

Ci sono due ovvie possibilità: la si chiama "top" ed è l'indice della posizione più alta usata nello stack. Dal momento che inizialmente non vengono utilizzate posizioni, si inizia con top = -1. Dopo aver premuto il primo oggetto, la posizione più alta utilizzata è superiore = 0.

O lo chiami "next" ed è l'indice della posizione inutilizzata più alta nello stack. Poiché inizialmente non vengono utilizzate posizioni, inizi con next = 0. Dopo aver premuto il primo elemento, la posizione inutilizzata più alta è next = 1.

È una tua scelta, entrambe le soluzioni sono ugualmente buone.

    
risposta data 08.03.2018 - 00:45
fonte

Leggi altre domande sui tag