Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Estructura de Datos [Cola Circular][C]

  • 1 Respuestas
  • 11080 Vistas

0 Usuarios y 8 Visitantes están viendo este tema.

Desconectado Olger346

  • *
  • Underc0der
  • Mensajes: 38
  • Actividad:
    0%
  • Reputación 1
    • Ver Perfil
  • Twitter: @Olger346
« en: Junio 26, 2015, 12:23:05 pm »
Este es el primer tema que aporto a la comunidad. Espero que ayude a más de uno que se esta aventurando en estos temas. El programa tiene un pequeño error en la eliminación de los datos (cola circular) que no he podido arreglar, pero servirá como algoritmo base para cualquier pionero o perdido del tema.
Código: C
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. /*PROYECTO#2
  6.  Grupo:11R-122 Universidad Tecnológica de Panamá
  7. //Importante-----------------La cola funciona, hay que eliminar dos elementos y luego introducir, es un error que no hemos podido arreglar, pero por todo lo demas funciona bien
  8. */
  9. // COLA
  10. main(){
  11.  
  12.         int cola[6]={NULL}, fr,fn, max, dato, opcion,x,eliminar,i,num,k;
  13.         int *frente,*puntero;
  14.         max=6;
  15.         //cola[0]=0;
  16.         fr=0;
  17.         fn=0;
  18.         i=0;
  19.  
  20. do{
  21.  
  22. system("color 1f");
  23.  
  24. system("cls");
  25.  
  26. printf("\n\t OPERACIONES QUE SE PUEDEN HACER EN UNA COLA \n\n\n");
  27. printf("\n\t 1. Ingresar valores en la cola \n");
  28. printf("\n\t 2. Mostrar datos que contiene la cola \n");
  29. printf("\n\t 3. Eliminar valores de la cola \n");
  30. printf("\n\t 4. Salir del programa \n");
  31.  
  32. scanf("%d",&opcion);
  33.  
  34. switch(opcion){
  35. /*---------------------------------------------------*/
  36. /*---------------------------------------------------*/
  37. /* INSERTAR VALORES EN LA COLA */
  38. case 1:{
  39.         system("cls");
  40.     printf("\n\t Introduzca la cantidad de elementos de la Cola, max 5: ");
  41.         scanf("%d",&num);
  42. //      max=max+1; //quitar si se estropea
  43.         printf("\n\t La posicion %d esta reservada en la cola circular como frente \n",fr);
  44.  
  45.  
  46.         if(fr!=(fn+1)%max){
  47.  
  48.  
  49.     //fn=(fn+1)%max;
  50.     for(i=0; i<=num; i++){
  51.  
  52.     printf("\n\t %d final esta ",fn);
  53.     if(fn==fr)
  54.     {
  55.       i=i+1;
  56.     }
  57.     fn=fn+1;
  58.  
  59.         printf("\n\t Introduzca el dato %d de la cola:\n",fn);
  60.         scanf("%d",&dato);
  61.         cola[fn]=dato;
  62.  
  63.  
  64.         printf("\n fn =%d ",fn);
  65.         printf("\n fr =%d", fr);
  66.  
  67.      }
  68.     }
  69.  
  70.     else
  71.     printf("La cola esta llena");
  72.     printf("\n final es %d ",fn);
  73.      if(fn==max)
  74.      {
  75.          fn=0;
  76.      }
  77.  
  78. }
  79. break;
  80.  
  81.  
  82. /*---------------------------------------------------*/
  83. /*---------------------------------------------------*/
  84. /* MOSTRAR VALORES DE LA COLA */
  85. case 2:{
  86.  
  87.         system("cls");
  88.  
  89.         if(fr==fn)
  90.         {
  91.          printf("\n\t La cola esta vacia");
  92.         }
  93.     else
  94.         {
  95.         printf("\n Datos de la cola: \n"); i=i+20;
  96.     for(i=1; i<max; i++)
  97.         {
  98.  
  99.     printf("%d \n",cola[i]); //cambiar a fn si se estropea el programa
  100.      }
  101.         }
  102.     printf("\n Final=%d ",fn);
  103.     printf("\n Frente=%d ",fr);
  104. }
  105. break;
  106. /*---------------------------------------------------*/
  107. /*---------------------------------------------------*/
  108. /* ELIMINAR VALORES EN LA COLA */
  109. case 3:{
  110.  
  111.  system("cls");
  112.  
  113. if(fn==fr)
  114. {
  115.         printf("\n\t Cola vacia");
  116. }
  117. else
  118. {
  119.     printf("\n\t Cuantos elementos desea eliminar: ");
  120.     scanf("%d",&eliminar);
  121.         //fr=(fr(fr+1)%max);
  122.         for(x=0; x<eliminar; x++)
  123.         {
  124.     frente=&cola[0];
  125.     //cambiar a menos si se estropea el programa
  126.         frente[fr]=NULL; //quitar esto si se estropea el programa
  127.         fr++;
  128.     frente[fr]=NULL;
  129.         frente=&cola[fr];
  130.         printf("\n\t El elemento de la posicion %d fue eliminado",fr);
  131.         /* if(fr>fr-1)
  132.      {
  133.          i=i-fn;
  134.       //   fn=fn-1;
  135.       //   puntero=&num;
  136.        //  puntero=NULL;
  137.  
  138.     }*/
  139.  
  140.  
  141.      }
  142. }
  143. }
  144.  
  145. break;
  146.  
  147. /*---------------------------------------------------*/
  148. /*---------------------------------------------------*/
  149. /* SALIR DEL PROGRAMA*/
  150. case 4:{
  151.  
  152. printf("\n Saliendo del programa ");
  153. return 0;
  154. }
  155. break;
  156. }
  157. }while(opcion<5);
  158. }
  159.  
  160.  
  161.  
  162.  
« Última modificación: Junio 28, 2015, 09:14:01 pm por rollth »
"Cuando se nace pobre, estudiar es el mayor acto de rebeldía contra el sistema. El saber rompe las cadenas de la esclavitud" -Tomas Bulat.

Desconectado sitoftonic

  • *
  • Underc0der
  • Mensajes: 3
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Abril 06, 2017, 10:28:13 am »
Aquí te dejo una alternativa implementada con dos archivos, uno .h y otro .c

cola.h

Código: C
  1.  
  2. #include <stdio.h>
  3. #define MAX 100
  4.  
  5. typedef int Elemento; //Cambiar int por cualquier otro tipo.
  6.  
  7. typedef struct{
  8.         Elemento info[MAX];
  9.         int q;
  10.         int cabeza;
  11. } Cola;
  12.  
  13. typedef struct n{
  14.   Element e;
  15.   struct n *sig;
  16. } Nodo;
  17.  
  18.  
  19. Cola COLA_crea();
  20. void COLA_anadir(Cola *c, Elemento e);
  21. Elemento COLA_primero(Cola c);
  22. void COLA_sacar(Cola *c);
  23. int COLA_vacia(Cola c);
  24. void COLA_destruye(Cola *c);
  25.  
  26.  
  27.  

cola.c

Código: C
  1.  
  2. #include <stdio.h>
  3. #include "cola.h"
  4.  
  5. //CREA LA COLA
  6. Cola COLA_crea(){
  7.   Cola c;
  8.  
  9.   c.cabeza = NULL;
  10.   c.ult = NULL;
  11.   return c;
  12. }
  13.  
  14. //AÑADIR ELEMENTO A LA COLA
  15. void COLA_anadir(Cola *c, Element e){
  16.   Nodo *aux;
  17.  
  18.   aux=(Nodo*)malloc(sizeof(Nodo));
  19.   if(aux == NULL){
  20.     printf("Error en la peticio de memoria");
  21.   }
  22.   else{
  23.     (*aux).e = e;
  24.     (*aux).sig = NULL;
  25.     if(((*c).cabeza || (*c).ult) == NULL){
  26.       (*c).cabeza = aux;
  27.     }
  28.     else{
  29.       (*(*c).ult).sig = aux;
  30.     }
  31.     (*c).ult = aux;
  32.   }
  33. }
  34.  
  35. //SACAR ELEMENTO A LA COLA
  36. void COLA_sacar(Cola *c){
  37.   Nodo *aux;
  38.  
  39.   if((*c).cabeza == NULL){
  40.     printf("Cola buida!\n");
  41.   }
  42.   else{
  43.     aux = (*c).cabeza;
  44.     (*c).cabeza = (*aux).sig; //El contingut del punter que apunta al primer node de la cola passa a apuntar el sigüent node
  45.     free(aux);
  46.     if ((*c).cabeza == NULL){
  47.       (*c).ult = NULL;
  48.     }
  49.   }
  50. }
  51.  
  52. //COMPROBAR SI LA COLA ESTÁ VACÍA
  53. int COLA_vacia(Cola c){
  54.   return ((*c).cabeza) == NULL);
  55. }
  56.  
  57. //DESTRUIR COLA
  58. int COLA_destruye(Cola *c){
  59.   Nodo *aux;
  60.  
  61.   while(*c) != NULL){
  62.     aux = *c;
  63.     *c = (*aux).sig;
  64.   }
  65.   free(aux);
  66.   free(*p);
  67. }
  68.  
  69.  

 

¿Te gustó el post? COMPARTILO!



[Libro] Programacion en C, metodología, algoritmos y estructuras datos

Iniciado por Stiuvert

Respuestas: 3
Vistas: 7300
Último mensaje Diciembre 11, 2016, 12:41:12 pm
por sanosuken
Script de C / Biblioteca / {Estructura}

Iniciado por Kr3L

Respuestas: 0
Vistas: 3912
Último mensaje Junio 22, 2016, 03:29:09 am
por Kr3L
[ESTRUCTURA DE DATOS] Listas doblemente ligadas [C++] (otro ejemplo)

Iniciado por 2Fac3R

Respuestas: 1
Vistas: 2919
Último mensaje Octubre 17, 2014, 04:01:51 pm
por ANTRAX
[ESTRUCTURA DE DATOS] Listas doblemente ligadas [C++]

Iniciado por 2Fac3R

Respuestas: 1
Vistas: 8038
Último mensaje Octubre 17, 2014, 04:04:50 pm
por Khala
[ESTRUCTURA DE DATOS] Árbol binario [C++]

Iniciado por 2Fac3R

Respuestas: 0
Vistas: 3023
Último mensaje Octubre 17, 2014, 04:06:25 pm
por 2Fac3R