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 * 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 NODOPTR fin=NULL,aux=NULL; int isEmpty(NODOPTR cima){//RECIBE LA CIMA PARA LA COMPARACION return (cima == NULL); } void add(NODOPTR * cima,NODOPTR * final,char nombre[128],char fecha[10],int cuenta,float saldo){//se agrega un nodo que la ara de final 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 *final=nuevo;//AL SER EL ULTIMO SE ESTABLECE COMO EL FINAL }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 } } } /*void remove(NODOPTR *cima,int id){//RECIBE EL APUNTADOR DONDE SE ENCUENTRA LA CIMA 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 free(temp);//SE LIBERA LA LOCACION DE MEMORIA TEMPORAL DONDE SE ENCONTRABA LA CIMA ACTUAL }*/ void baja(NODOPTR cima,NODOPTR final,NODOPTR aux,int cuentaa) { NODOPTR nuevo; for(nuevo=cima;nuevo!=NULL;aux=nuevo,nuevo=nuevo->sig) { if(nuevo->cuenta==cuentaa) { if(nuevo==cima) { cima=cima->sig; } else if(nuevo==final) { final=aux; final->sig=NULL; } else { aux->sig=nuevo->sig; } break; } } } 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 main(){ NODOPTR cima = NULL; /*NODOPTR cuenta_1 = NULL; NODOPTR cuenta_2 = NULL;*/ int cuenta_1,cuenta_2; int x = 0; //Variables char nombre[128]; char fecha[100]; int cuenta,cuenta_3; float cantidad; add(&cima,&fin,nombre,fecha,1,1000.00); add(&cima,&fin,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,&fin,nombre,fecha,cuenta,0.00);//////////////// SE AGREGO FINAL 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:// ELIMINA baja(cima,fin,aux,cuenta_3); break; } }while(x!=0); return 0; }