karlangadas

ALGORITMIA 2016-1 EX2 pregunta 5

Dec 1st, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct  nodo{
  6.     char nombre[20];
  7.     struct nodo *sig;
  8. }TNodo;
  9.  
  10. typedef struct  listacirc{
  11.     TNodo *ini;
  12.     TNodo *fin;
  13.     int numElem;
  14. }TListaC;
  15.  
  16. void L_init(TListaC *L){
  17.     L->ini=NULL;
  18.     L->fin=NULL;
  19.     L->numElem=0;
  20. }
  21. void L_Insert(TListaC *L, char *nombre){
  22.     TNodo *nodo=malloc(sizeof(TNodo));
  23.     strcpy(nodo->nombre, nombre);
  24.     if (L->numElem==0)
  25.         L->ini=nodo;
  26.     else
  27.         L->fin->sig=nodo;
  28.    
  29.     nodo->sig=L->ini;
  30.     L->fin=nodo;
  31.     L->numElem++;
  32. }
  33.  
  34.  
  35. void L_delete(TListaC *L,TNodo *nodo){
  36.     TNodo *crt=nodo->sig;
  37.    
  38.     if (crt==L->ini)
  39.         L->ini=L->ini->sig;
  40.     else if (crt==L->fin)
  41.         L->fin=nodo;
  42.    
  43.     nodo->sig=crt->sig;
  44.     free(crt);
  45.     L->numElem--;
  46. }
  47.  
  48. void RuletaRusa(TListaC *L,char *inicio,int k){
  49.     //comenzamos en n
  50.     TNodo *crt=L->ini;
  51.     while (strcmp(crt->nombre,inicio)!=0){
  52.         crt=crt->sig;
  53.     }
  54.     TNodo *ant;
  55.    
  56.     while (L->numElem>1){
  57.         for (int i=0;i<k;i++){
  58.             ant=crt;
  59.             crt=crt->sig;
  60.         }
  61.         crt=crt->sig;
  62.         L_delete(L,ant);
  63.     }
  64. }
  65. void L_finalize(TListaC *L){
  66.     TNodo *crt=L->ini;
  67.     TNodo *ant;
  68.    
  69.     while (L->numElem>0){
  70.         ant=crt;
  71.         crt=crt->sig;
  72.         L_delete(L,ant);
  73.     }
  74. }
  75. int main(){
  76.     int t,n,k;
  77.     char *inicio=malloc(sizeof(20));
  78.     char *s=malloc(sizeof(20));
  79.     TListaC L;
  80.     L_init(&L);
  81.     scanf("%d",&t);
  82.     while (t--){
  83.         scanf("%d\n",&n);
  84.         for (int i=0;i<n;i++){
  85.             gets(s);
  86.             L_Insert(&L,s);
  87.         }
  88.         //verificar esto
  89.         gets(inicio);
  90.         scanf("%d",&k);
  91.         RuletaRusa(&L,inicio,k);
  92.         printf("%s\n",L.ini->nombre);
  93.         L_finalize(&L);
  94.     }
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment