miércoles, 13 de julio de 2011

Extra: programa de clase modificado "pilas"







Aqui esta el programa visto en clase modificado como creí conveniente para hacer una pila.

#include <stdio.h> // imprimir (printf)
#include <stdlib.h> // reservar memoria
#include "pilas.h"

elem* borrar(elem* esto) {
  elem* temp; 
  while (esto != NULL) {
    temp = esto->siguiente;
    free(esto);
    esto = temp; 
  }
  return NULL; 
}

bool buscar(int valor, elem* aqui) {
  if (aqui != NULL) {

    #ifdef DEBUG 
    printf("Buscando por %d en %d.\n", 
       valor, aqui->dato);
#endif 

        if (aqui->dato == valor) {

#ifdef DEBUG
      printf("Son iguales.\n");
#endif

      return TRUE; 

    } else if (aqui->dato > valor) {
      

#ifdef DEBUG
      printf("Ya es mayor. No va a estar.\n");
#endif

      return FALSE; 
    }
    return buscar(valor, aqui->siguiente);
  } else { 

#ifdef DEBUG
    printf("Ya se acabo. No estuvo.\n");
#endif
    return FALSE; // busqueda fallida
  }

}

bool eliminar_elemento(int valor, elem* aqui, 
               elem** inicio) {
  if (aqui != NULL) { // si hay algo
    if (aqui->dato == valor) {
      // hay que borrar el elemento
      if (aqui->siguiente != NULL) {
    aqui->siguiente->anterior = 
      aqui->anterior; 
      }
      if (aqui->anterior == NULL) {
    *inicio = aqui->siguiente;
      } else {
    aqui->anterior->siguiente = 
      aqui->siguiente;
      }
      free(aqui); // borrame
      return TRUE; // eliminacion exitosa
    } else if (aqui->dato > valor) {
      return FALSE;
    }
    return eliminar_elemento(valor, 
                 aqui->siguiente, 
                 inicio);
  }
  return FALSE;
}

// interface para llamadas mas bonitas
bool eliminar(int valor, elem** inicio) {
  return 
    eliminar_elemento(valor, *inicio, inicio);
}

void imprime_elemento(elem* esto) {
  // iterativa
  while (esto != NULL) {
    printf("%d ", esto->dato);
    esto = esto->siguiente;
  }
  return;
}

// interfase que agrega [ ... ] y el \n
void imprimir(elem* lista) {
  printf("[ ");
 imprime_elemento(lista);
  printf("]\n");
  return;
}

elem* agregar(int valor, elem* aqui) {
  elem* nuevo = NULL;

if (aqui != NULL) {
    printf("Estoy en %d, insertando un %d.\n",
       aqui->dato, valor);
  } else {
    printf("No hay nada.\n");
  }


  if (aqui == NULL) { // no hay nadie
    nuevo = (elem*)malloc(sizeof(elem));
    nuevo->dato = valor; // asignar dato
    nuevo->siguiente = NULL; // el unico
    nuevo->anterior = NULL; // el unico
    return nuevo;
  } else {
    if (valor < aqui->dato) {
      nuevo = (elem*)malloc(sizeof(elem));
      nuevo->dato = valor; // pon el valor
      
    // aqui es el primer elemento
    nuevo->siguiente = aqui;
    aqui->anterior = nuevo;
    nuevo->anterior = NULL; 
    return nuevo;
  int pseudoaleatorio() {
  return ((rand() % (MAX - MIN + 1)) + MIN);
    }

    


1 comentario:

  1. Ahí separa agregar de pseudoaleatorio con las } faltantes y ponle un main o pon el otro archivo que tiene el main. Luego te lo califico.

    ResponderEliminar