Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stack.h"
- #include <stdlib.h>
- #include <assert.h>
- struct node* top(struct stack *pila){
- if(pila == NULL)
- return NULL;
- return pila->sp;
- }
- int init_stack(struct stack *pila){
- if(pila == NULL)
- return -1;
- pila->sp = NULL; // pila vuota
- return 0; // inizializzazione avvenuta con successo
- }
- int empty(struct stack *pila){
- if(pila == NULL)
- return -1;
- return (pila->sp == NULL);
- }
- int push(struct stack *pila, int val){
- if(pila == NULL){
- return -1;
- }
- struct node *nodo = malloc(sizeof(*nodo)); // creo il nodo
- if(nodo == NULL){
- return -1;
- }
- // inizializzato il nodo
- nodo->val = val;
- nodo->next = NULL;
- nodo->prev = NULL;
- if(pila->sp != NULL){
- pila->sp->next = nodo;
- nodo->prev = pila->sp;
- } // se la pila è vuota devo solo aggiornare top
- pila->sp = nodo;
- return 0; // push avvenuta con successo
- }
- struct node* pop(struct stack *pila){
- if(pila == NULL)
- return NULL;
- // la pila è non nulla
- struct node *top = pila->sp;
- if(pila->sp != NULL){
- pila->sp = pila->sp->prev; // la nuova cima è il nodo precendete alla vecchia
- if(pila->sp != NULL){
- pila->sp->next->prev = NULL; // il next della vecchia cima(essendo tale) era già null -> vecchia cima staccata
- pila->sp->next = NULL; // ora ho la nuova cima
- }
- }
- return top;
- }
- int get_value(struct stack *pila, struct node* nodo){
- if(pila == NULL)
- assert("Stack nullo\n");
- if(nodo == NULL)
- assert("Nodo nullo\n");
- int value = nodo->val;
- if(nodo != pila->sp){ // avviene <=> nodo proviene da una pop
- free(nodo);
- }
- return value;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement