Skip to content

Instantly share code, notes, and snippets.

@MrDave1999
Last active June 28, 2019 22:22
Show Gist options
  • Save MrDave1999/921cb85abf4cee891c9ba76014a675a0 to your computer and use it in GitHub Desktop.
Save MrDave1999/921cb85abf4cee891c9ba76014a675a0 to your computer and use it in GitHub Desktop.
Operaciones básicas de una cola.
#ifndef _OP_H
#define _OP_H
struct _node
{
int data;
struct _node* sig;
};
//Le asigna un alias a "struct _node"
typedef struct _node node;
//Esta función encola un elemento al final de la cola
void enqueue(node** firstNode, node** lastNode)
{
node* newNode = malloc(sizeof(node));
if (newNode == NULL)
puts("Error: No se pudo reservar memoria.");
else
{
int data;
dataread("%d", &data, "Ingrese un valor:");
newNode->data = data;
/*
- Si firstNode apunta a NULL, entonces solo creamos un nodo inicial, donde lastNode y firstNode
quedaría apuntando a newNode.
- Si firstNode no llegara apuntar a NULL, entonces ya estamos creando más de un nodo, donde lastNode sería
el penúltimo nodo apuntaría al nuevo nodo (el último nodo actual).
*/
(*firstNode == NULL) ? (*firstNode = newNode) : ((*lastNode)->sig = newNode);
*lastNode = newNode;
newNode->sig = NULL;
}
}
//Esta función desencola un elemento al inicio de la cola
void dequeue(node** firstNode)
{
node* aux = *firstNode;
*firstNode = (*firstNode)->sig;
free(aux);
}
//Esta función muestra todos los elementos de la cola.
void show(node* firstNode)
{
node* aux = firstNode;
puts("-> Elementos de la lista:\n");
while (aux != NULL)
{
printf("%d\n", aux->data);
aux = aux->sig;
}
}
//Esta función elimina todos los elementos de la cola.
void clear(node** firstNode)
{
node* aux = *firstNode;
while (aux != NULL)
{
*firstNode = aux;
aux = aux->sig;
free(*firstNode);
}
*firstNode = NULL;
}
#endif
#include <stdio.h>
#include <stdlib.h>
/*
Este archivo de cabecera proporciona macros para pedir los datos de forma segura.
Enlace: www.github.com/MrDave1999/pscanf.h
*/
#include <pscanf.h>
//En este archivo están las funciones que realizan la operación básica en una cola
#include "op.h"
int main(void)
{
char option;
//Este puntero guarda la dirección base del primer nodo
node* firstNode = NULL;
//Este puntero guarda la dirección base del último nodo
node* lastNode = NULL;
while (1)
{
puts("-> Menu de opciones:");
puts("a. Insertar elemento en la cola.");
puts("b. Mostrar lista");
puts("c. Eliminar elemento de la cola.");
puts("d. Eliminar toda la lista desde el inicio.");
puts("e. Salir");
dataread("%c", &option, "Ingrese una opcion <a-e>");
if (!(option >= 'a' && option <= 'e'))
{
puts("Error: Usted debe ingresar una opcion valida <a-e>\n");
continue;
}
//Solo en las opciones b hasta d detectamos si la lista está vacía.
if ((option >= 'b' && option <= 'd') && (firstNode == NULL))
{
puts("Error: La lista esta vacia\n");
continue;
}
switch (option)
{
case 'a':
enqueue(&firstNode, &lastNode);
break;
case 'b':
show(firstNode);
break;
case 'c':
dequeue(&firstNode);
break;
case 'd':
clear(&firstNode);
puts("-> Todos los elementos fueron eliminados de la lista.");
break;
case 'e':
if (firstNode != NULL)
clear(&firstNode);
return 0;
}
pauseprogram();
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment