Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct vozilo{
- char registracija[10];
- int trenutnaPozicija;
- int iskljucenje;
- struct vozilo *prethodni;
- struct vozilo *sledeci;
- }vozilo;
- #define novi(x) x=(vozilo*)malloc(sizeof(vozilo))
- void dodaj(vozilo **p, char *reg, int tp, int isklj){
- vozilo *t, *prvi, *trenutni;
- novi(t);
- strcpy(t->registracija,reg);
- t->trenutnaPozicija=tp;
- t->iskljucenje=isklj;
- t->prethodni=NULL;
- t->sledeci=NULL;
- prvi=(*p);
- if(prvi==NULL){ //ubacivanje u praznu listu
- (*p)=t;
- (*p)->sledeci=(*p);
- (*p)->prethodni=(*p);
- }
- else{
- if( t->trenutnaPozicija < prvi->trenutnaPozicija ){ //novi < prvi
- t->sledeci = prvi;
- t->prethodni = prvi->prethodni;
- prvi->prethodni->sledeci = t;
- prvi->prethodni = t;
- (*p) = t;
- }
- else{
- trenutni = prvi;
- while( trenutni->sledeci->trenutnaPozicija < t->trenutnaPozicija && trenutni->sledeci != prvi ){
- trenutni=trenutni->sledeci;
- }
- if( trenutni->sledeci != prvi ){
- t->sledeci = trenutni->sledeci;
- t->prethodni = trenutni;
- trenutni->sledeci->prethodni = t;
- trenutni->sledeci = t;
- }
- else{
- t->sledeci = prvi;
- t->prethodni = trenutni;
- trenutni->sledeci = t;
- prvi->prethodni = t;
- }
- }
- }
- }
- void formiraj(vozilo **p){
- int n,i,trenutnaPozicija,iskljucenje;
- char registracija[10];
- printf("n\n");
- scanf("%d",&n);
- printf("registracija - trenutnaPozicija - iskljucenje\n");
- for(i=0;i<n;i++){
- scanf("%s",registracija);
- scanf("%d%d",&trenutnaPozicija,&iskljucenje);
- dodaj(p,registracija,trenutnaPozicija,iskljucenje);
- }
- }
- void stampaj(vozilo *p){
- vozilo *prvi;
- prvi=p;
- if(p){
- printf("\nREGISTRACIJA: %s --- POZICIJA: %d --- ISKLJUCENJE: %d\n",p->registracija,p->trenutnaPozicija,p->iskljucenje);
- p=p->sledeci;
- while(prvi!=p){
- printf("REGISTRACIJA: %s --- POZICIJA: %d --- ISKLJUCENJE: %d\n",p->registracija,p->trenutnaPozicija,p->iskljucenje);
- p=p->sledeci;
- }
- }
- else{
- printf("PRAZAN KRUZNI TOK\n");
- }
- printf("---------------------------------------------------------------------------\n");
- }
- void jednoKretanje(vozilo **p){
- vozilo *trenutni, *prvi;
- prvi=(*p);
- if(*p){
- while(*p){
- if( prvi == prvi->sledeci ){ //samo jedan element u listi
- if( prvi->iskljucenje==0 ){
- if( prvi->trenutnaPozicija + 1 >= 360 || prvi->trenutnaPozicija + 2 >= 360 || prvi->trenutnaPozicija + 3 >= 360 ){
- free(prvi);
- (*p)=NULL;
- stampaj(*p);
- }
- else{
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- stampaj(*p);
- }
- }
- else{
- if( prvi->trenutnaPozicija + 1 == prvi->iskljucenje || prvi->trenutnaPozicija + 2 == prvi->iskljucenje || prvi->trenutnaPozicija + 3 == prvi->iskljucenje ){
- free(prvi);
- (*p)=NULL;
- stampaj(*p);
- }
- else{
- if(prvi->trenutnaPozicija + 3 > 359){
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
- }
- else
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- stampaj(*p);
- }
- }
- }
- else if( prvi->sledeci->sledeci == prvi && prvi->sledeci != prvi ){ //tacno dva elementa u listi
- trenutni = prvi->sledeci;
- if(prvi->iskljucenje==0){
- if( prvi->trenutnaPozicija + 1 >= 360 || prvi->trenutnaPozicija + 2 >= 360 || prvi->trenutnaPozicija + 3 >= 360 ){
- free(prvi);
- (*p)=trenutni;
- trenutni->sledeci=trenutni;
- trenutni->prethodni=trenutni;
- prvi=trenutni;
- }
- else{
- if(prvi->trenutnaPozicija + 3 > 359){
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
- }
- else
- prvi->trenutnaPozicija= prvi->trenutnaPozicija + 3;
- }
- }
- else{
- if( prvi->trenutnaPozicija + 1 == prvi->iskljucenje || prvi->trenutnaPozicija + 2 == prvi->iskljucenje || prvi->trenutnaPozicija + 3 == prvi->iskljucenje ){
- free(prvi);
- (*p)=trenutni;
- trenutni->sledeci=trenutni;
- trenutni->prethodni=trenutni;
- prvi=trenutni;
- }
- else{
- if(prvi->trenutnaPozicija + 3 > 359){
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- prvi->trenutnaPozicija = prvi->trenutnaPozicija % 3;
- }
- else
- prvi->trenutnaPozicija = prvi->trenutnaPozicija + 3;
- }
- }
- if(trenutni==trenutni->sledeci){ //drugi element ostao jedini
- if( trenutni->iskljucenje==0 ){
- if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
- free(trenutni);
- (*p)=NULL;
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- }
- }
- else{
- if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
- free(trenutni);
- (*p)=NULL;
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- }
- }
- }
- else{ //drugi element nije ostao jedini
- if(trenutni->iskljucenje==0){
- if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
- free(trenutni);
- (*p)=prvi;
- prvi->sledeci=prvi;
- prvi->prethodni=prvi;
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- }
- }
- else{
- if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
- free(trenutni);
- (*p)=prvi;
- prvi->sledeci=prvi;
- prvi->prethodni=prvi;
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- }
- }
- }
- stampaj(*p);
- }
- else{ //vise od dva
- trenutni=prvi;
- while( prvi!=trenutni->sledeci ){
- if( trenutni->iskljucenje==0 ){ //iskljucuje se na 0
- if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){ //treba da se iskljuci
- if(trenutni==prvi){ //iskljucuje se prvi
- if(trenutni==trenutni->sledeci){ //iskljucuje se jedini
- free(trenutni);
- (*p)=NULL;
- }
- else{ //ne iskljucuje se jedini, ali jeste prvi
- prvi->prethodni->sledeci = prvi->sledeci;
- prvi->sledeci->prethodni = prvi->prethodni;
- prvi=prvi->sledeci;
- trenutni=trenutni->sledeci;
- (*p) = (*p)->sledeci;
- free(prvi);
- }
- }
- else{ //nije prvi, ali se iskljucuje
- trenutni->sledeci->prethodni=trenutni->prethodni;
- trenutni->prethodni->sledeci=trenutni->sledeci;
- vozilo *pom;
- pom=trenutni;
- trenutni=trenutni->sledeci;
- free(pom);
- }
- }
- else{ //ne iskljucuje se
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni=trenutni->sledeci;
- }
- }
- else{ //iskljucjuje se, ali ne na 0
- if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){ //treba da se iskljuci
- if(trenutni==prvi){ //iskljucuje se prvi
- if(trenutni==trenutni->sledeci){ //iskljucuje se jedini
- free(trenutni);
- (*p)=NULL;
- }
- else{ //ne iskljucuje se jedini, ali jeste prvi
- prvi->prethodni->sledeci = prvi->sledeci;
- prvi->sledeci->prethodni = prvi->prethodni;
- prvi=prvi->sledeci;
- trenutni=trenutni->sledeci;
- (*p) = (*p)->sledeci;
- free(prvi);
- }
- }
- else{ //nije prvi, ali se iskljucuje
- trenutni->sledeci->prethodni=trenutni->prethodni;
- trenutni->prethodni->sledeci=trenutni->sledeci;
- vozilo *pom;
- pom=trenutni;
- trenutni=trenutni->sledeci;
- free(pom);
- }
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni=trenutni->sledeci;
- }
- }
- }
- if(trenutni->iskljucenje==0){
- if( trenutni->trenutnaPozicija + 1 >= 360 || trenutni->trenutnaPozicija + 2 >= 360 || trenutni->trenutnaPozicija + 3 >= 360 ){
- if(trenutni->sledeci==trenutni){
- free(trenutni);
- (*p)=NULL;
- }
- else{
- trenutni->sledeci->prethodni=trenutni->prethodni;
- trenutni->prethodni->sledeci=trenutni->sledeci;
- vozilo *pom;
- pom=trenutni;
- trenutni=trenutni->sledeci;
- free(pom);
- }
- }
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni=trenutni->sledeci;
- }
- else{
- if( trenutni->trenutnaPozicija + 1 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 2 == trenutni->iskljucenje || trenutni->trenutnaPozicija + 3 == trenutni->iskljucenje ){
- if(trenutni->sledeci==trenutni){
- free(trenutni);
- (*p)=NULL;
- }
- else{
- trenutni->sledeci->prethodni=trenutni->prethodni;
- trenutni->prethodni->sledeci=trenutni->sledeci;
- vozilo *pom;
- pom=trenutni;
- trenutni=trenutni->sledeci;
- free(pom);
- }
- }
- else{
- if(trenutni->trenutnaPozicija + 3 > 359){
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija % 3;
- }
- else
- trenutni->trenutnaPozicija = trenutni->trenutnaPozicija + 3;
- trenutni=trenutni->sledeci;
- }
- }
- stampaj(*p);
- }
- }
- }
- }
- int main(){
- vozilo *p=NULL;
- formiraj(&p);
- stampaj(p);
- jednoKretanje(&p);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement