Pubblicità

Una pila è un Tipo di Dati Astratto (ADT), comunemente utilizzato nella maggior parte dei linguaggi di programmazione. Si chiama stack in quanto si comporta come una pila del mondo reale, ad esempio-un mazzo di carte o una pila di piatti, ecc.

Uno stack del mondo reale consente operazioni solo a un’estremità. Ad esempio, possiamo posizionare o rimuovere una carta o una piastra solo dalla parte superiore della pila., Allo stesso modo, Stack ADT consente tutte le operazioni di dati ad una sola estremità. In un dato momento, possiamo accedere solo all’elemento superiore di una pila.

Questa caratteristica rende LIFO struttura dei dati. LIFO sta per Last-in-first-out. Qui, l’elemento che viene inserito (inserito o aggiunto) per ultimo, si accede per primo. Nella terminologia dello stack, l’operazione di inserimento è chiamata operazione PUSH e l’operazione di rimozione è chiamata operazione POP.,

Rappresentazione dello stack

Il seguente diagramma descrive uno stack e le sue operazioni −

Uno stack può essere implementato mediante Array, Struttura, Puntatore e Elenco collegato. Stack può essere una dimensione fissa o può avere un senso di ridimensionamento dinamico. Qui, implementeremo lo stack usando gli array, il che lo rende un’implementazione dello stack di dimensioni fisse.

Operazioni di base

Le operazioni dello stack possono comportare l’inizializzazione dello stack, il suo utilizzo e quindi la de-inizializzazione., Oltre a questi elementi di base, uno stack viene utilizzato per le seguenti due operazioni primarie −

  • push () – Spingendo (memorizzando) un elemento nello stack.

  • pop () – Rimozione (accesso) di un elemento dallo stack.

Quando i dati vengono inseriti nello stack.

Per utilizzare uno stack in modo efficiente, dobbiamo controllare anche lo stato dello stack. Per lo stesso scopo, la seguente funzionalità viene aggiunta a stacks −

  • peek() − ottenere l’elemento di dati superiore dello stack, senza rimuoverlo.

  • isFull() − controlla se lo stack è pieno.,

  • isEmpty() − controlla se lo stack è vuoto.

In ogni momento, manteniamo un puntatore agli ultimi dati inseriti nello stack. Poiché questo puntatore rappresenta sempre la parte superiore dello stack, quindi chiamato top. Il puntatore superiore fornisce il valore superiore dello stack senza effettivamente rimuoverlo., supporto stack funzioni −

peek()

Algoritmo di peek () −funzione

begin procedure peek return stackend procedure

l’Attuazione di peek() la funzione in linguaggio di programmazione C −

Esempio

int peek() { return stack;}

isfull()

Algoritmo di isfull() funzione

begin procedure isfull if top equals to MAXSIZE return true else return false endif end procedure

l’Attuazione di isfull() la funzione in linguaggio di programmazione C −

Esempio

bool isfull() { if(top == MAXSIZE) return true; else return false;}

isempty()

Algoritmo di isempty () −funzione

begin procedure isempty if top less than 1 return true else return false endif end procedure

l’Attuazione di isempty() funzione in linguaggio di programmazione C è leggermente diverso., Inizializziamo top a -1, poiché l’indice nell’array inizia da 0. Quindi controlliamo se la parte superiore è inferiore a zero o -1 per determinare se lo stack è vuoto. Ecco il codice –

Esempio

bool isempty() { if(top == -1) return true; else return false;}

Operazione push

Il processo di inserimento di un nuovo elemento di dati nello stack è noto come operazione Push. L’operazione push comporta una serie di passaggi −

  • Passo 1 − Controlla se lo stack è pieno.

  • Passo 2-Se lo stack è pieno, produce un errore e uscire.

  • Passo 3-Se lo stack non è pieno, incrementi top per puntare successivo spazio vuoto.,

  • Passo 4-Aggiunge elemento di dati alla posizione dello stack,dove top punta.

  • Passo 5-Restituisce successo.

Se l’elenco collegato viene utilizzato per implementare lo stack, nel passaggio 3, è necessario allocare lo spazio in modo dinamico.

Algoritmo per il funzionamento PUSH

Un semplice algoritmo per il funzionamento Push può essere derivato come segue −

begin procedure push: stack, data if stack is full return null endif top ← top + 1 stack ← dataend procedure

Implementazione di questo algoritmo in C, è molto facile., Vedere il seguente codice –

Esempio

void push(int data) { if(!isFull()) { top = top + 1; stack = data; } else { printf("Could not insert data, Stack is full.\n"); }}

Operazione Pop

L’accesso al contenuto durante la rimozione dallo stack, è nota come operazione Pop. In un’implementazione dell’array dell’operazione pop (), l’elemento dati non viene effettivamente rimosso, invece top viene decrementato in una posizione inferiore nello stack per puntare al valore successivo. Ma nell’implementazione della lista collegata, pop () rimuove effettivamente l’elemento dati e dealloca lo spazio di memoria.

Un’operazione Pop può comportare i seguenti passaggi −

  • Passo 1 − Controlla se lo stack è vuoto.,

  • Passo 2-Se lo stack è vuoto, produce un errore e uscire.

  • Passo 3-Se lo stack non è vuoto, accede all’elemento dati a cui punta top.

  • Passo 4-Diminuisce il valore di top di 1.

  • Passo 5-Restituisce successo.,

Algorithm for Pop Operation

A simple algorithm for Pop operation can be derived as follows −

begin procedure pop: stack if stack is empty return null endif data ← stack top ← top - 1 return dataend procedure

Implementation of this algorithm in C, is as follows −

Example

int pop(int data) { if(!isempty()) { data = stack; top = top - 1; return data; } else { printf("Could not retrieve data, Stack is empty.\n"); }}

For a complete stack program in C programming language, please click here.

Advertisements