Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct nodo {
- float valor;
- struct nodo *ptrSiguiente;
- struct nodo *ant; // Este campo no lo tenias declarado
- } nodo; // Al hacer eso, ya no escribirás "struct nodo", solo "nodo"
- nodo* ptr_pila (nodo *pila, float numero);
- float i_sacaPila (nodo **pila);
- void visualizar(nodo *);
- void destruir_pila(nodo **); // El nombre de una funcion dar una idea clara de lo que hace
- int estaVacia();
- nodo* ptr_cola(nodo *cola, float numero);
- float i_sacaCola (nodo **cola);
- void v_imprimir(nodo *cola);
- void destruir_cola(nodo **); // Hace casi lo mismo que "destruir_pila"
- void menu(nodo *,nodo *);
- int main() {
- nodo *ultimo = NULL;
- nodo *cola = NULL;
- menu(ultimo,cola);
- }
- nodo *ptr_pila (nodo *pila, float numero){
- system("cls");
- nodo *nuevo = (nodo*)malloc(sizeof(nodo));
- nuevo->valor = numero;
- nuevo->ant = pila;
- return nuevo;
- }
- float i_sacaPila (nodo **pila){
- int ultimo;
- if (*pila == NULL) {
- return -1;
- } else {
- ultimo = (*pila)->valor;
- nodo* aux = *pila;
- *pila = (*pila)->ant;
- free(aux);
- }
- return ultimo;
- }
- void visualizar(nodo *ultimo){
- if (ultimo==NULL){
- printf("No hay elementos para listar");
- /* system("pause>null"); // Esto no es necesario aqui */
- } else {
- nodo *actual = ultimo;
- while (actual!=NULL){
- printf("[%f]\n", actual->valor);
- actual=actual->ant;
- }
- }
- /* system("pause>null"); // Esto no es necesario aqui */
- }
- void destruir_pila(nodo **ultimo){
- system("cls");
- if (ultimo==NULL){
- printf("No hay elementos en la lista");
- /* system("pause>null"); // Esto no es necesario */
- } else{
- while (i_sacaPila(ultimo) != -1); /* Aprende a re-utilizar codigo */
- }
- }
- nodo *ptr_cola (nodo *cola, float numero){
- nodo *nuevo = (nodo *)malloc(sizeof(nodo));
- nuevo->valor = numero;
- nuevo->ptrSiguiente = NULL;
- if (estaVacia(cola)) {
- cola = nuevo;
- } else {
- nodo *aux = cola;
- while (aux->ptrSiguiente != NULL) {
- aux = aux->ptrSiguiente;
- }
- aux->ptrSiguiente = nuevo;
- }
- return cola;
- }
- void v_imprimir(nodo *cola) {
- while (cola != NULL){
- printf("[%f]->", cola->valor);
- cola = cola->ptrSiguiente;
- }
- printf("NULL\n");
- }
- float i_sacaCola(nodo **cola) {
- nodo *aux;
- float num;
- if (estaVacia(*cola)) {
- return -1;
- } else {
- num = (*cola)->valor;
- aux = (*cola);
- *cola = (*cola)->ptrSiguiente;
- free(aux);
- }
- return num;
- }
- void destruir_cola(nodo **cola) {
- system("cls");
- if (cola==NULL){
- printf("No hay elementos en la lista");
- } else{
- while (i_sacaCola(cola) != -1); /* Aprende a re-utilizar codigo */
- }
- }
- int estaVacia(nodo *cola){
- if(cola == NULL)
- return 1;
- else
- return 0;
- }
- void menu(nodo *cola,nodo *ultimo){
- int opc;
- float numero;
- do{
- system("cls");
- printf("1- Agregar numero a la pila\n");
- printf("2- Sacar numero de la pila\n");
- printf("3- Visualizar la pila\n");
- printf("4- Sacar elemento de la pila e ingresarlo en la cola\n");
- printf("5- Eliminar todos los elementos de la pila\n"); //Al hacer esta operacion, estas destruyendo la pila
- printf("6- Agregar numero a la cola\n");
- printf("7- Sacar numero de la cola\n");
- printf("8- Visualizar la cola\n");
- printf("9- Sacar elemento de la cola e ingresarlo en la pila\n");
- printf("10- Eliminar todos los elementos de la cola\n"); //Al hacer esta operacion, estas destruyendo la cola
- printf("11- Salir");
- printf("\n\nIntroducir opcion: ");
- scanf("%d", &opc);
- system("cls"); /* De acuerdo a tu tarea, se tiene que limpiar la pantalla cada vez que se selecciona algo del menu*/
- switch(opc){
- case 1:
- printf("Ingresar numero a la pila: ");
- scanf("%f",&numero);
- ultimo=ptr_pila(ultimo, numero);
- printf("Ok");
- break;
- case 2:
- if (i_sacaPila(&ultimo) == - 1) {
- printf("Pila vacia");
- } else {
- printf("Ok");
- }
- break;
- case 3:
- visualizar(ultimo);
- break;
- case 4: /* Sacar elemento de pila e introducirlo a la cola */
- numero = i_sacaPila(&ultimo);
- if (numero == -1) {
- printf("Pila vacia");
- } else {
- cola = ptr_cola(cola, numero);
- printf("Ok");
- }
- break;
- case 5:
- destruir_pila(&ultimo);
- printf("Ok");
- break;
- case 6:
- printf("Ingrese valor ");
- scanf("%f", &numero);
- cola = ptr_cola(cola, numero);
- printf("Ok");
- break;
- case 7:
- if(!estaVacia(cola)) {
- i_sacaCola(&cola);
- printf("Ok");
- }
- else {
- printf("Cola vacia\n");
- }
- break;
- case 8:
- if(!estaVacia(cola))
- v_imprimir(cola);
- else
- printf("Cola vacia\n");
- break;
- case 9: /* Sacar elemento de cola e introducirlo a la pila */
- numero = i_sacaCola(&cola);
- if (numero == -1) {
- printf("Cola vacia");
- } else {
- ultimo = ptr_pila(ultimo, numero);
- printf("Ok");
- }
- break;
- case 10:
- destruir_cola(&cola);
- printf("Ok");
- break;
- }
- system("pause>null");
- } while (opc != 11); /* En el menu la opcion salir es la 11, aqui tenias 8. Todo debe coincidir */
- destruir_pila(&ultimo);
- destruir_cola(&cola);
- return 0; /* Todos los programas c/c++ deben regresar 0 en caso de exito en la funcion main, es un estandar. */
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement