Advertisement
Guest User

kacka

a guest
Nov 21st, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.18 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef struct vozilo{
  6.     char registracija[10];
  7.     int trenutnaPozicija;
  8.     int iskljucenje;
  9.     struct vozilo *prethodni;
  10.     struct vozilo *sledeci;
  11. }vozilo;
  12.  
  13. #define novi(x) x=(vozilo*)malloc(sizeof(vozilo))
  14.  
  15. void dodaj(vozilo **p, char *reg, int tp, int isklj){
  16.     vozilo *t, *prvi, *trenutni;
  17.    
  18.     novi(t);
  19.     strcpy(t->registracija,reg);
  20.     t->trenutnaPozicija=tp;
  21.     t->iskljucenje=isklj;
  22.     t->prethodni=NULL;
  23.     t->sledeci=NULL;
  24.    
  25.     prvi=(*p);
  26.     if(prvi==NULL){     //ubacivanje u praznu listu
  27.         (*p)=t;
  28.         (*p)->sledeci=(*p);
  29.         (*p)->prethodni=(*p);
  30.     }
  31.     else{
  32.         if( t->trenutnaPozicija < prvi->trenutnaPozicija ){     //novi < prvi
  33.             t->sledeci = prvi;
  34.             t->prethodni = prvi->prethodni;
  35.             prvi->prethodni->sledeci = t;
  36.             prvi->prethodni = t;
  37.             (*p) = t;
  38.         }
  39.         else{
  40.             trenutni = prvi;
  41.             while( trenutni->sledeci->trenutnaPozicija < t->trenutnaPozicija && trenutni->sledeci != prvi ){
  42.                 trenutni=trenutni->sledeci;
  43.             }
  44.             if( trenutni->sledeci != prvi ){
  45.                 t->sledeci = trenutni->sledeci;
  46.                 t->prethodni = trenutni;
  47.                 trenutni->sledeci->prethodni = t;
  48.                 trenutni->sledeci = t;
  49.             }
  50.             else{
  51.                 t->sledeci = prvi;
  52.                 t->prethodni = trenutni;
  53.                 trenutni->sledeci = t;
  54.                 prvi->prethodni = t;
  55.             }
  56.         }
  57.     }
  58.    
  59. }
  60.  
  61. void formiraj(vozilo **p){
  62.     int n,i,trenutnaPozicija,iskljucenje;
  63.     char registracija[10];
  64.     printf("n\n");
  65.     scanf("%d",&n);
  66.     printf("registracija - trenutnaPozicija - iskljucenje\n");
  67.     for(i=0;i<n;i++){
  68.         scanf("%s",registracija);
  69.         scanf("%d%d",&trenutnaPozicija,&iskljucenje);
  70.         dodaj(p,registracija,trenutnaPozicija,iskljucenje);
  71.     }
  72. }
  73.  
  74. void stampaj(vozilo *p){
  75.     vozilo *prvi;
  76.     prvi=p;
  77.     if(p){
  78.         printf("\nREGISTRACIJA: %s --- POZICIJA: %d --- ISKLJUCENJE: %d\n",p->registracija,p->trenutnaPozicija,p->iskljucenje);
  79.         p=p->sledeci;
  80.         while(prvi!=p){
  81.             printf("REGISTRACIJA: %s --- POZICIJA: %d --- ISKLJUCENJE: %d\n",p->registracija,p->trenutnaPozicija,p->iskljucenje);
  82.             p=p->sledeci;
  83.         }
  84.     }
  85.     else{
  86.         printf("PRAZAN KRUZNI TOK\n");
  87.     }
  88.     printf("---------------------------------------------------------------------------\n");
  89. }
  90.  
  91. void jednoKretanje(vozilo **p){
  92.     vozilo *trenutni, *prvi;
  93.    
  94.     prvi=(*p);
  95.     if(*p){
  96.         while(*p){
  97.            
  98.         if( prvi == prvi->sledeci ){        //samo jedan element u listi
  99.             if( prvi->iskljucenje==0 ){
  100.                 if( prvi->trenutnaPozicija + 1 >= 360 || prvi->trenutnaPozicija + 2 >= 360 || prvi->trenutnaPozicija + 3 >= 360 ){
  101.                     free(prvi);
  102.                     (*p)=NULL;
  103.                     stampaj(*p);
  104.                 }
  105.                 else{
  106.                     prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  107.                     stampaj(*p);
  108.                 }
  109.             }
  110.             else{
  111.                 if( prvi->trenutnaPozicija + 1 == prvi->iskljucenje || prvi->trenutnaPozicija + 2 == prvi->iskljucenje || prvi->trenutnaPozicija + 3 == prvi->iskljucenje ){
  112.                     free(prvi);
  113.                     (*p)=NULL;
  114.                     stampaj(*p);
  115.                 }
  116.                 else{
  117.                    
  118.                     if(prvi->trenutnaPozicija + 3 > 359){
  119.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  120.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
  121.                     }
  122.                     else
  123.                     prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  124.                     stampaj(*p);
  125.                 }
  126.             }
  127.         }
  128.        
  129.        
  130.         else if( prvi->sledeci->sledeci == prvi && prvi->sledeci != prvi ){     //tacno dva elementa u listi
  131.             trenutni = prvi->sledeci;
  132.             if(prvi->iskljucenje==0){
  133.                 if( prvi->trenutnaPozicija + 1 >= 360 || prvi->trenutnaPozicija + 2 >= 360 || prvi->trenutnaPozicija + 3 >= 360 ){
  134.                     free(prvi);
  135.                     (*p)=trenutni;
  136.                     trenutni->sledeci=trenutni;
  137.                     trenutni->prethodni=trenutni;
  138.                     prvi=trenutni;
  139.                 }
  140.                 else{
  141.                     if(prvi->trenutnaPozicija + 3 > 359){
  142.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  143.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
  144.                     }
  145.                     else
  146.                     prvi->trenutnaPozicija= prvi->trenutnaPozicija + 3;
  147.                 }
  148.             }
  149.             else{
  150.                 if( prvi->trenutnaPozicija + 1 == prvi->iskljucenje || prvi->trenutnaPozicija + 2 == prvi->iskljucenje || prvi->trenutnaPozicija + 3 == prvi->iskljucenje ){
  151.                     free(prvi);
  152.                     (*p)=trenutni;
  153.                     trenutni->sledeci=trenutni;
  154.                     trenutni->prethodni=trenutni;
  155.                     prvi=trenutni;
  156.                 }
  157.                 else{
  158.                     if(prvi->trenutnaPozicija + 3 > 359){
  159.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  160.                         prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
  161.                     }
  162.                     else
  163.                     prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
  164.                 }
  165.             }
  166.             if(trenutni==trenutni->sledeci){        //drugi element ostao jedini
  167.                
  168.                 if( trenutni->iskljucenje==0 ){
  169.                     if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
  170.                         free(trenutni);
  171.                         (*p)=NULL;
  172.                     }
  173.                     else{
  174.                         if(trenutni->trenutnaPozicija + 3 > 359){
  175.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  176.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  177.                     }
  178.                     else
  179.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  180.                     }
  181.                 }
  182.                 else{
  183.                     if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
  184.                         free(trenutni);
  185.                         (*p)=NULL;
  186.                     }
  187.                     else{
  188.                         if(trenutni->trenutnaPozicija + 3 > 359){
  189.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  190.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  191.                     }
  192.                     else
  193.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  194.                     }
  195.                 }
  196.                        
  197.             }
  198.             else{                               //drugi element nije ostao jedini
  199.                 if(trenutni->iskljucenje==0){
  200.                     if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
  201.                         free(trenutni);
  202.                         (*p)=prvi;
  203.                         prvi->sledeci=prvi;
  204.                         prvi->prethodni=prvi;
  205.                     }
  206.                     else{
  207.                         if(trenutni->trenutnaPozicija + 3 > 359){
  208.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  209.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  210.                     }
  211.                     else
  212.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  213.                     }
  214.                 }
  215.                 else{
  216.                     if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
  217.                         free(trenutni);
  218.                         (*p)=prvi;
  219.                         prvi->sledeci=prvi;
  220.                         prvi->prethodni=prvi;
  221.                     }
  222.                     else{
  223.                         if(trenutni->trenutnaPozicija + 3 > 359){
  224.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  225.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  226.                     }
  227.                     else
  228.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  229.                     }
  230.                 }
  231.             }
  232.             stampaj(*p);
  233.         }
  234.        
  235.        
  236.         else{                                                                           //vise od dva      
  237.             trenutni=prvi;
  238.             while( prvi!=trenutni->sledeci  ){
  239.                 if( trenutni->iskljucenje==0 ){     //iskljucuje se na 0
  240.                     if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){      //treba da se iskljuci
  241.                         if(trenutni==prvi){     //iskljucuje se prvi
  242.                             if(trenutni==trenutni->sledeci){        //iskljucuje se jedini
  243.                                 free(trenutni);
  244.                                 (*p)=NULL;
  245.                             }
  246.                             else{                                   //ne iskljucuje se jedini, ali jeste prvi
  247.                                 prvi->prethodni->sledeci = prvi->sledeci;
  248.                                 prvi->sledeci->prethodni = prvi->prethodni;
  249.                                 prvi=prvi->sledeci;
  250.                                 trenutni=trenutni->sledeci;
  251.                                 (*p) = (*p)->sledeci;
  252.                                 free(prvi);
  253.                             }
  254.                         }
  255.                         else{               //nije prvi, ali se iskljucuje
  256.                             trenutni->sledeci->prethodni=trenutni->prethodni;
  257.                             trenutni->prethodni->sledeci=trenutni->sledeci;
  258.                             vozilo *pom;
  259.                             pom=trenutni;
  260.                             trenutni=trenutni->sledeci;
  261.                             free(pom);
  262.                         }
  263.                     }
  264.                     else{               //ne iskljucuje se
  265.                     if(trenutni->trenutnaPozicija + 3 > 359){
  266.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  267.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  268.                     }
  269.                     else
  270.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  271.                         trenutni=trenutni->sledeci;
  272.                     }
  273.                 }
  274.                 else{                   //iskljucjuje se, ali ne na 0
  275.                     if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){    //treba da se iskljuci
  276.                         if(trenutni==prvi){     //iskljucuje se prvi
  277.                             if(trenutni==trenutni->sledeci){        //iskljucuje se jedini
  278.                                 free(trenutni);
  279.                                 (*p)=NULL;
  280.                             }
  281.                             else{                                   //ne iskljucuje se jedini, ali jeste prvi
  282.                                 prvi->prethodni->sledeci = prvi->sledeci;
  283.                                 prvi->sledeci->prethodni = prvi->prethodni;
  284.                                 prvi=prvi->sledeci;
  285.                                 trenutni=trenutni->sledeci;
  286.                                 (*p) = (*p)->sledeci;
  287.                                 free(prvi);
  288.                             }
  289.                         }
  290.                         else{           //nije prvi, ali se iskljucuje
  291.                             trenutni->sledeci->prethodni=trenutni->prethodni;
  292.                             trenutni->prethodni->sledeci=trenutni->sledeci;
  293.                             vozilo *pom;
  294.                             pom=trenutni;
  295.                             trenutni=trenutni->sledeci;
  296.                             free(pom);
  297.                         }
  298.                     }
  299.                     else{
  300.                         if(trenutni->trenutnaPozicija + 3 > 359){
  301.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  302.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  303.                     }
  304.                     else
  305.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  306.                         trenutni=trenutni->sledeci;
  307.                     }
  308.                 }
  309.             }
  310.            
  311.             if(trenutni->iskljucenje==0){
  312.                 if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
  313.                     if(trenutni->sledeci==trenutni){
  314.                         free(trenutni);
  315.                         (*p)=NULL;
  316.                     }
  317.                     else{
  318.                         trenutni->sledeci->prethodni=trenutni->prethodni;
  319.                         trenutni->prethodni->sledeci=trenutni->sledeci;
  320.                         vozilo *pom;
  321.                         pom=trenutni;
  322.                         trenutni=trenutni->sledeci;
  323.                         free(pom);
  324.                     }
  325.                 }
  326.                 if(trenutni->trenutnaPozicija + 3 > 359){
  327.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  328.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  329.                     }
  330.                     else
  331.                 trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  332.                 trenutni=trenutni->sledeci;
  333.             }
  334.             else{
  335.                 if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
  336.                     if(trenutni->sledeci==trenutni){
  337.                         free(trenutni);
  338.                         (*p)=NULL;
  339.                     }
  340.                     else{
  341.                         trenutni->sledeci->prethodni=trenutni->prethodni;
  342.                         trenutni->prethodni->sledeci=trenutni->sledeci;
  343.                         vozilo *pom;
  344.                         pom=trenutni;
  345.                         trenutni=trenutni->sledeci;
  346.                         free(pom);
  347.                     }
  348.                 }
  349.                 else{
  350.                     if(trenutni->trenutnaPozicija + 3 > 359){
  351.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  352.                         trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
  353.                     }
  354.                     else
  355.                     trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
  356.                     trenutni=trenutni->sledeci;
  357.                 }
  358.             }
  359.            
  360.             stampaj(*p);
  361.         }
  362.            
  363.         }
  364.  
  365.        
  366.     }
  367.    
  368. }
  369.  
  370.  
  371.  
  372. int main(){
  373.    
  374.     vozilo *p=NULL;
  375.     formiraj(&p);
  376.     stampaj(p);
  377.     jednoKretanje(&p);
  378.    
  379.    
  380.     return 0;
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement