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);
}
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