Código
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> #include <string.h> /*malloc-free-alloc-realloc unsigned*/ struct nodo{//DEFINE LA ESTRUCTURA char nombre[128]; char fecha[10]; int cuenta; float saldo; struct nodo *ant, *sig; //SE CREA EL APUNTADOR DEL TAMAÑO DE UN NODO SIMILAR }; typedef struct nodo NODO;//DEFINE TIPO DE DATO A PARTIR DE LA ESTRUCTURA DE nodo typedef NODO *NODOPTR;//DEFINE UN TIPO DE APUNTADOR BASADO EN EL TAMAÑO DE NODO int isEmpty(NODOPTR cima){//RECIBE LA CIMA PARA LA COMPARACION return (cima == NULL); } void add(NODOPTR * cima,char nombre[128],char fecha[10],int cuenta,float saldo){ NODOPTR nuevo;//APUNTADOR PARA EL NUEVO DATO NODOPTR actual;//APUNTADOR TEMPORAL QUE SE UTILIZA CUANDO EXISTE AL MENOS UN DATO nuevo = (NODO *) malloc(sizeof(NODO));//REGRESA LA DIRECCION DE UN BLOQUE DE MEMORIA EN EL CUAL SE ASIGNARAN LOS VALORES if(nuevo==NULL){ }else{ if(isEmpty(*cima)){//SE ASIGNAN LOS VALORES RECIBIDOS POR LA FUNCION nuevo->cuenta = cuenta; nuevo->saldo = saldo; nuevo->sig = NULL;//SE ASIGNA NULO POR QUE EL PRIMERO *cima = nuevo;//AL SER EL PRIMERO SE ESTABLECE COMO LA CIMA }else{ actual = *cima;//SE ALMACENA EL APUNTADOR DE LA CIMA ACTUAL while(actual->sig != NULL){//SE RECORREN TODOS LOS ELEMENTOS DE LA COLA HASTA ENCONTRAR UN VALOR "NULL" EN LA PROPIEDAD DE SIGUIENTE actual = actual->sig;//SE ASIGNA LA ESTRUCTURA SIGUIENTE A LA ACTUAL } nuevo->cuenta = cuenta; nuevo->saldo = saldo; nuevo->sig = NULL; actual->sig = nuevo;//SE ASIGNA EL APUNTADOR DEL NUEVO ELEMENTO AL ULTIMO } } } NODOPTR temp;//SE CREA UN NODO TEMPORAL temp = *cima;//ALMACENA EL APUNTADOR DE LA CIMA *cima = (*cima)->sig;//SE ALMACENA EL APUNTADOR DEL SIGUIENTE ELEMENTO EN LA LOCACION DE LA CIMA } void show(NODOPTR cima){//RECIBE LA CIMA if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } } int find(NODOPTR cima,int cuenta){//RECIBE LA CIMA int found = 0; if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO if(cima->cuenta == cuenta){ found = 1; break; } cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } return found; } int edit(NODOPTR cima,int cuenta,char nombre[128],char fecha[10]){//RECIBE LA CIMA int success = 0; if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO if(cima->cuenta == cuenta){ success = 1; break; } cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } return success; } int deposito(NODOPTR cima,int cuenta,int cantidad){//RECIBE LA CIMA int success = 0; if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO if(cima->cuenta == cuenta){ cima->saldo+=cantidad; success = 1; break; } cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } return success; } int retirar(NODOPTR cima,int cuenta,int cantidad){//RECIBE LA CIMA int success = 0; if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO if(cima->cuenta == cuenta){ if(cima->saldo>=cantidad){ cima->saldo-=cantidad; success = 1; break; }else } cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } return success; } //RETORNO DE APUNTADOR NODOPTR findptr(NODOPTR cima,int cuenta){//RECIBE LA CIMA NODOPTR found = NULL; if(cima == NULL){ }else{ while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO if(cima->cuenta == cuenta){ found = cima; break; } cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL } } return found; } int borrar(NODOPTR *ptr,int cuenta,NODOPTR *sig) { NODOPTR antesptr, actualptr, tempptr; if(cuenta == (*ptr)-> cuenta) { tempptr = *ptr; *ptr = (*ptr)->sig; (*ptr)-> ant = NULL; return cuenta; } else { antesptr = *ptr; actualptr = (*ptr)->sig; while(actualptr != NULL && actualptr->cuenta != cuenta) { antesptr = actualptr; actualptr = actualptr->sig; } if(actualptr != NULL) { tempptr = actualptr; antesptr->sig = actualptr->sig; actualptr = actualptr->sig; actualptr->ant = antesptr; return cuenta; } } return -1; } int main() { NODOPTR cima = NULL; NODOPTR inicio = NULL, actual = NULL; /*NODOPTR cuenta_1 = NULL; NODOPTR cuenta_2 = NULL;*/ int cuenta_1,cuenta_2; int x = 0; //Variables char nombre[128]; char fecha[10]; int cuenta; float cantidad; add(&cima,nombre,fecha,1,1000.00); add(&cima,nombre,fecha,2,1900.00); //show(cima); /*cuenta_1 = findptr(cima,1); cuenta_2 = findptr(cima,2); printf("%f\n",cuenta_1->saldo); printf("%f\n",cuenta_2->saldo); return 0; */ do{ switch(x){ case 1: do{ }while(find(cima,cuenta)==1); add(&cima,nombre,fecha,cuenta,0.00); break; case 2: do{ }while((find(cima,cuenta))==0); if(cuenta != 0){ if(edit(cima,cuenta,nombre,fecha)==1) else } break; case 3: show(cima); break; case 4: do{ }while((find(cima,cuenta))==0); if(cuenta != 0){ if(deposito(cima,cuenta,cantidad)==1) else } break; case 5: do{ }while((find(cima,cuenta))==0); if(cuenta != 0){ if(retirar(cima,cuenta,cantidad)==1) else } break; case 6: do{ }while((find(cima,cuenta_1))==0); do{ }while((find(cima,cuenta_2))==0); if(cuenta_1 != 0 && cuenta_2 != 0){ if(retirar(cima,cuenta_1,cantidad)==1){ if(deposito(cima,cuenta_2,cantidad)) }else } break; case 7: if(!isEmpy(inicio)) { if(borrar(&actual,cuenta,&actual)) { show(cima); } else } else break; } }while(x!=0); return 0; }