Unix – Crontab

Standard

#! /bin/sh
# Usage : ./crontabintf

 1: set -f
 2: choice=0
 3: while [ 0 ]
 4: do
 5:  
 6: echo "1.Display crontab jobs."
 7:  
 8: echo "2.Insert a job."
 9:  
 10: echo "3.Remove a job."
 11:  
 12: echo "4.Exit."
 13:  
 14: echo -n "Select>"
 15:  
 16: read choice
 17:  
 18: case $choice in
 19:  
 20: 1) line=1
 21:  
 22: crontab -l > $HOME/.jobs
 23:  
 24: res="`wc -l $HOME/.jobs`"
 25:  
 26: set - $res;lines=$1;
 27:  
 28: while [ $line -le $lines ]
 29:  
 30: do
 31:  
 32: res="`head -$line $HOME/.jobs | tail -1`"
 33:  
 34: set - $res;disp=" ";
 35:  
 36: for arg
 37:  
 38: do
 39:  
 40: if [ "$arg" = '*' ]
 41:  
 42: then
 43:  
 44: disp="$disp Any"
 45:  
 46: else
 47:  
 48: disp="$disp $arg"
 49:  
 50: fi
 51:  
 52: done
 53:  
 54: set - $disp
 55:  
 56: echo "JOB $line-->"
 57:  
 58: echo "minute: $1";shift;
 59:  
 60: echo "Hour: $1";shift;
 61:  
 62: echo "Date: $1/$2";shift;shift;
 63:  
 64: echo "Day of week: $1";shift;
 65:  
 66: echo "Command:$*"
 67:  
 68: line=`expr $line + 1`
 69:  
 70: done;;
 71:  
 72: 2) crontab -l >$HOME/.newjobs
 73:  
 74: selection=0
 75:  
 76: minutes="any"
 77:  
 78: hours="any"
 79:  
 80: monthday="any"
 81:  
 82: month="any"
 83:  
 84: weekday="any"
 85:  
 86: while [ $selection -ne 7 ]
 87:  
 88: do
 89:  
 90: echo "1.Set the command(-obligatory):"
 91:  
 92: echo "Set periodicity of command."
 93:  
 94: echo "2.Set minutes:0-59"
 95:  
 96: echo "3.Set hours:0-23"
 97:  
 98: echo "4.Set day of month:1-31"
 99:  
 100: echo "5.Set month:1-12"
 101:  
 102: echo "6.Set day of week:Mon-Sun"
 103:  
 104: echo "7.Ready."
 105:  
 106: echo -n "Enter>"
 107:  
 108: read selection
 109:  
 110: case $selection in
 111:  
 112: 1)echo -n "Enter>"
 113:  
 114: read command;;
 115:  
 116: 2) echo -n "If more than one choice,seperate by comma..Enter>"
 117:  
 118: read minutes;;
 119:  
 120: 3) echo -n "If more than one choice,seperate by comma..Enter>"
 121:  
 122: read hours;;
 123:  
 124: 4) echo -n "If more than one choice,seperate by comma..Enter>"
 125:  
 126: read monthday;;
 127:  
 128: 5) echo -n "If more than one choice,seperate by comma..Enter>"
 129:  
 130: read month;;
 131:  
 132: 6) echo -n "If more than one choice,seperate by comma..Enter>"
 133:  
 134: read weekday;;
 135:  
 136: 7) break;;
 137:  
 138: *) continue;;
 139:  
 140: esac
 141:  
 142: done
 143:  
 144: periodicity=" "
 145:  
 146: for inst in $minutes $hours $monthday $month $weekday
 147:  
 148: do
 149:  
 150: if [ "$inst" = "any" ]
 151:  
 152: then
 153:  
 154: periodicity="$periodicity *"
 155:  
 156: else
 157:  
 158: periodicity="$periodicity $inst"
 159:  
 160: fi
 161:  
 162: done
 163:  
 164: echo "$periodicity $command">>$HOME/.newjobs
 165:  
 166: crontab $HOME/.newjobs;;
 167:  
 168: 3) crontab -l >$HOME/.jobs
 169:  
 170: echo "Job to remove"
 171:  
 172: echo -n "Enter Job's number as listed above>"
 173:  
 174: read jobnmb
 175:  
 176: res="`wc -l $HOME/.jobs`"
 177:  
 178: set - $res;
 179:  
 180: rest=`expr $1 - $jobnmb`
 181:  
 182: jobnmb=`expr $jobnmb - 1`
 183:  
 184: head -$jobnmb $HOME/.jobs | cat >$HOME/.njobs
 185:  
 186: tail -$rest $HOME/.jobs | cat >>$HOME/.njobs
 187:  
 188: crontab $HOME/.njobs;;
 189:  
 190: 4) rm $HOME/.jobs $HOME/.newjobs
 191:  
 192: exit;;
 193:  
 194: *) continue;;
 195:  
 196: esac
 197:  
 198: done

Distributed Algorithms – Ring Orientation

Standard

C Code

File Main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include “list.c”

void main()
{
int i,megethos,id,num_arx,*arx,*temp,j,vrethike,k,messages,p,q,random_num,allagi;
char state[5];
int **link;
typos_deikti prodeiktis,arxi;
typos_deikti *riza;

        printf(“Doste to megethos tou daktiliou:\n”);
scanf(“%d”,&megethos);

        riza=malloc(megethos*sizeof(typos_deikti));

        //—————-Desmeusi pinaka 2-diastaseon gia ta links
link = (int **) malloc(megethos*sizeof(int));
for(i=0;i < megethos;i++)
{
link[i] = malloc(megethos*sizeof(int));
}
//——————-Arxikopoiisi tou pinaka ton links me 0
//—————— link[p][q] = epomenos = 1
//——————-link[p][q] = proigoumenos = 0
for(i=0;i < megethos;i++)
{
for(j=0;j < megethos;j++)
{
link[i][j] = 0;
}
}

        dimiourgia(riza);
prodeiktis=NULL;

        sprintf(state,”recei”);
id = 1;
eisagogi(riza,state,id,prodeiktis);
prodeiktis = *riza;

        for(i=0;i<megethos-1;i++)
{
id++;
eisagogi(riza,state,id,prodeiktis);
proxorise(&prodeiktis);
}

        printf(“\nEpilextikan tixaia oi parakato komvoi senders:\n”);
num_arx=fmod(rand(),megethos);
arx=malloc(num_arx*sizeof(int));
temp=malloc(num_arx*sizeof(int));
for(i=0;i<num_arx;i++)
{
arx[i] = fmod(rand(),megethos);
for(j=0;j<num_arx;j++)
{
if(temp[j]==arx[i])
{
vrethike=1;
break;
}
else
{
vrethike=0;
}
}

            if(vrethike==0)
{
temp[i] = arx[i];
printf(“%d\n”,arx[i]);

                prodeiktis = *riza;
for(k=0;k<arx[i];k++)
{
proxorise(&prodeiktis);
}
sprintf(prodeiktis->state,”sende”);

                //—————-Enimerosi ton links gia tin kateuthnisi ton senders——————//
if(arx[i]!=0 && arx[i]!=megethos-1)
{
p=arx[i];
q=arx[i]+1;
random_num = fmod(rand(),2);
if (random_num ==0)
{
link[p][q] = 1;
}
else
{
link[p][q-2] = 1;
}
}
else if(arx[i]==0)
{
p=0;
q=1;
link[p][q] = 1;
}
else
{
p=megethos-1;
q=0;
link[p][q] = 1;
}

            }
else
{
i–;
}
}

        //————–SET SUCC-PRED TO RECEIVERS————//
prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
if(strcmp(prodeiktis->state,”recei”)==0)
{
//Receiver = Node 0
if(i==0)
{
link[i][1]=1;
link[i][megethos-1]=0;
}
//Receiver = Last Node
if(i==megethos-1)
{
link[i][0]=1;
link[i][i-1]=0;
}
else
{
link[i][i+1]=1;
link[i][i-1]=0;
}
}
proxorise(&prodeiktis);
}

        //———Tipose arxiki katastasi———-//
printf(“Katastasi Komvon Daktiliou\n”);
printf(“————————–\n”);
prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
printf(“Komvos %d : “,i);
printf(“ID = %d “,node_id(prodeiktis));
printf(“State = %s\n”,periexomeno(prodeiktis));
proxorise(&prodeiktis);
}

        //———-Tipose ta links—————–//
printf(“Pinakas Zeukseon Succ kai Pred metaksi komvon\n”);
printf(“———————————————\n”);
for(i=0;i < megethos;i++)
{
for(j=0;j < megethos;j++)
{
printf(“%d “,link[i][j]);
}
printf(“\n”);
}
printf(“Kateuthinseis zeukseon metaksi komvon\n”);
printf(“————————————-\n”);
for(i=0;i < megethos;i++)
{
for(j=0;j < megethos;j++)
{
if(link[i][j] == 1)
{
printf(“%d->%d\n”,i,j);
}
}
}

        //———–Ring Orientation—————-//
allagi =1;
messages=0;
prodeiktis = *riza;
while(allagi==1)
{
allagi=0;

            for(i=0;i<megethos-2;i++)
{
////////Kainouria fasi – allagi katastaseon////////

                if (prodeiktis->temp == 1)
{
sprintf(prodeiktis->state,”sende”);
}
if (prodeiktis->temp == 2)
{
sprintf(prodeiktis->state,”recei”);
}
if (prodeiktis->temp == 3)
{
sprintf(prodeiktis->state,”inter”);
}

                ///////////////
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”inter”)==0) && link[i][i+1]==1)
{
prodeiktis->epomenos->temp = 2;
link[i+1][i+2]=1;
link[i+1][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”recei”)==0) && (link[i][i+1]==1) && (link[i+1][i]==0))
{
prodeiktis->temp = 3;
prodeiktis->epomenos->temp =1;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”sende”)==0) && (link[i][i+1]==1) && (link[i+1][i]==1))
{
prodeiktis->epomenos->temp =2;
link[i+1][i+2]=1;
link[i+1][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”inter”)==0) && (strcmp(prodeiktis->epomenos->state,”inter”)==0) && (link[i][i+1]==1) && (link[i+1][i]==1))
{
prodeiktis->temp =1;
allagi=1;
}
proxorise(&prodeiktis);
}

            //——————-Kikliki Lista -> Proteleutaios komvos——————//
if (prodeiktis->temp == 1)
{
sprintf(prodeiktis->state,”sende”);
}
if (prodeiktis->temp == 2)
{
sprintf(prodeiktis->state,”recei”);
}
if (prodeiktis->temp == 3)
{
sprintf(prodeiktis->state,”inter”);
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”inter”)==0) && link[i][i+1]==1)
{
prodeiktis->epomenos->temp = 2;
link[i+1][0]=1; //——-
link[i+1][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”recei”)==0) && (link[i][i+1]==1) && (link[i+1][i]==0))
{
prodeiktis->temp = 3;
prodeiktis->epomenos->temp =1;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(prodeiktis->epomenos->state,”sende”)==0) && (link[i][i+1]==1) && (link[i+1][i]==1))
{
prodeiktis->epomenos->temp =2;
link[i+1][0]=1; //——
link[i+1][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”inter”)==0) && (strcmp(prodeiktis->epomenos->state,”inter”)==0) && (link[i][i+1]==1) && (link[i+1][i]==1))
{
prodeiktis->temp =1;
allagi=1;
}
proxorise(&prodeiktis);

                //——————-Kikliki Lista -> Teleutaios komvos——————//
arxi = *riza;

                if (prodeiktis->temp == 1)
{
sprintf(prodeiktis->state,”sende”);
}
if (prodeiktis->temp == 2)
{
sprintf(prodeiktis->state,”recei”);
}
if (prodeiktis->temp == 3)
{
sprintf(prodeiktis->state,”inter”);
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(arxi->state,”inter”)==0) && link[i][0]==1)
{
arxi->temp = 2;
link[0][1]=1;
link[0][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(arxi->state,”recei”)==0) && (link[i][0]==1) && (link[0][i]==0))
{
prodeiktis->temp = 3;
arxi->temp =1;
allagi=1;
}
if((strcmp(prodeiktis->state,”sende”)==0) && (strcmp(arxi->state,”sende”)==0) && (link[i][0]==1) && (link[0][i]==1))
{
arxi->temp =2;
link[0][1]=1;
link[0][i]=0;
allagi=1;
}
if((strcmp(prodeiktis->state,”inter”)==0) && (strcmp(arxi->state,”inter”)==0) && (link[i][0]==1) && (link[0][i]==1))
{
prodeiktis->temp =1;
allagi=1;
}
prodeiktis = *riza;

        }

        //////////////////APOTELESMATA////////////////////////////
printf(“\n\n****************Apotelesmata*****************\n\n”);
printf(“Katastasi Komvon Daktiliou\n”);
printf(“————————–\n”);
prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
printf(“Komvos %d : “,i);
printf(“ID = %d “,node_id(prodeiktis));
printf(“State = %s\n”,periexomeno(prodeiktis));
proxorise(&prodeiktis);
}

        /////////Tipose ta links//////////////
printf(“Pinakas Zeukseon Succ kai Pred metaksi komvon\n”);
printf(“———————————————\n”);
for(i=0;i < megethos;i++)
{
for(j=0;j < megethos;j++)
{
printf(“%d “,link[i][j]);
}
printf(“\n”);
}
printf(“Kateuthinseis zeukseon metaksi komvon\n”);
printf(“————————————-\n”);
for(i=0;i < megethos;i++)
{
for(j=0;j < megethos;j++)
{
if(link[i][j] == 1)
{
printf(“%d->%d\n”,i,j);
}
}
}
//////////////////APOTELESMATA////////////////////////////
}

File List.c

/*************************************************************************
Αρχείο Υλoπoίησης    : list.c
Σκοπός                : Υλοποίηση με δείκτες ΑΤΔ, κυκλικά Συνδεδεμένη Λίστα
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>

typedef char   typos_stoixeiou;
typedef struct typos_komvou *typos_deikti;
typedef struct typos_komvou
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
};
typos_deikti lista;

void dimiourgia(typos_deikti *lista);
int keni(typos_deikti lista);
void proxorise(typos_deikti *p);
typos_stoixeiou *periexomeno(typos_deikti p);
void diagrafi(typos_deikti *lista, typos_deikti prodeiktis);

void eisagogi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id,typos_deikti prodeiktis);
void eisagogi_arxi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id);
void eisagogi_meta(typos_deikti prodeiktis,typos_stoixeiou *stoixeio,int id);

int node_id(typos_deikti p);
int send(int tok,typos_deikti p);

void dimiourgia(typos_deikti *lista)
{
/*
*    Πρo:         καμία
*    Μέτά:         Δημιoυργία κενής συνδεδεμένης λίστα
*/
*lista = NULL;
}

int keni(typos_deikti lista)
{
/*
*    Πρo:         Δημιoυργία λίστας
*    Μέτά:        επιστρέφει 1 αν η λίστα είναι κενή, διαφoρετικά 0
*/
return ( lista == NULL );
}

void proxorise(typos_deikti *p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        Ο δείκτης p δείχνει στον επόμενο κόμβο στην λίστα
*/
*p = (*p)->epomenos;
}

typos_stoixeiou *periexomeno(typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
return (p->state);
}

int node_id(typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
return (p->id);
}

int send(int tok,typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
if(p->id == tok)
{
sprintf(p->state,”leade”);
return 1;
}
p->temp = tok;

    return 0;

}

void eisagogi_meta(typos_deikti prodeiktis,typos_stoixeiou *stoixeio,int id)
{
/*
*    Πρo:         Δημιoυργία λίστα
*    Μέτά:         Ο κόμβος με τα δεδομένα stoixeio έχει εισαχθεί
*                μετά τον κόμβο που δείχνει ο prodeiktis
*/    int i;
typedef struct
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
}typos_komvou;
typos_deikti prosorinos; /*Δείχνει τον νέο κόμβο που πρόκειτε να εισαχθεί*/

    prosorinos = (typos_deikti)malloc(sizeof(typos_komvou));
if ( prosorinos == NULL )
{
fprintf(stderr,”Η μνήμη είναι γεμάτη\n”);
exit(-1);
}
for(i=0;i<5;i++)
prosorinos->state[i] = stoixeio[i];
prosorinos->state[i] = ‘\0’;
prosorinos->id = id;
prosorinos->tok = id;
prosorinos->temp = 0;
prosorinos->epomenos = prodeiktis->epomenos;
prodeiktis->epomenos = prosorinos;
}

void eisagogi_arxi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id)
{
/*
*    Πρo:         O δείκτης p δείχνει ττην αρχή της λίστας
*    Μέτά:         Ο κόμβος με τα δεδομένα stoixeio έχει εισαχθεί
*                πριν τον κόμβο που εδείχνει ο p, ο p δείχνει πλέον την νέα αρχή της λίστας
*/
int i;
typedef struct
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
}typos_komvou;
typos_deikti prosorinos; /*Δείχνει τον νέο κόμβο που πρόκειτε να εισαχθεί*/

    prosorinos = (typos_deikti)malloc(sizeof(typos_komvou));
if ( prosorinos == NULL )
{
fprintf(stderr,”Η μνήμη είναι γεμάτη\n”);
exit(-1);
}
for(i=0;i<5;i++)
prosorinos->state[i] = stoixeio[i];
prosorinos->state[i] = ‘\0’;
prosorinos->id = id;
prosorinos->tok = id;
prosorinos->temp = 0;
prosorinos->epomenos = *lista;
*lista = prosorinos;
}

void eisagogi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id,typos_deikti prodeiktis)
{
/*
*    Πρo:         Ο prodeiktis δείχνει ένα κόμβο στην λίστα ή είναι NULL
*    Μέτά:         Αν ο prodeiktis είναι NULL τοτε ο κόμβος με τα δεδομένα
*                stoixeio έχει εισαχθεί στην αρχή της λίστας αλλιώς ο εισάγεται μετά
*                τον κόμβο που δείχνει ο prodeiktis
*/
if (keni(prodeiktis)) /*εισαγωγή στην αρχή της λίστας*/
eisagogi_arxi(lista,stoixeio,id);
else
eisagogi_meta(prodeiktis,stoixeio,id);
}

Distributed Algorithms, Chang and Roberts

Standard


C Code


Main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include “list.c”

void main()
{
int i,megethos,id,num_arx,*arx,*temp,j,vrethike,k,messages;
char state[5];
typos_deikti prodeiktis;
typos_deikti *riza;

        printf(“Doste to megethos tou daktiliou:\n”);
scanf(“%d”,&megethos);

        riza=malloc(megethos*sizeof(typos_deikti));
dimiourgia(riza);
prodeiktis=NULL;

        sprintf(state,”sleep”);
id = 1;
eisagogi(riza,state,id,prodeiktis);
prodeiktis = *riza;

        for(i=0;i<megethos-1;i++)
{
id++;
//id=id*rand();
eisagogi(riza,state,id,prodeiktis);
proxorise(&prodeiktis);
}

        prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
printf(“Komvos %d : “,i);
printf(“ID = %d “,node_id(prodeiktis));
printf(“State = %s\n”,periexomeno(prodeiktis));
proxorise(&prodeiktis);
}

        printf(“\nEpilextikan tixaia oi parakato komvoi arxikopoiites:\n”);
num_arx=fmod(rand(),megethos);
arx=malloc(num_arx*sizeof(int));
temp=malloc(num_arx*sizeof(int));
for(i=0;i<num_arx;i++)
{
arx[i] = fmod(rand(),megethos);
for(j=0;j<num_arx;j++)
{
if(temp[j]==arx[i])
{
vrethike=1;
break;
}
else
{
vrethike=0;
}
}

            if(vrethike==0)
{
temp[i] = arx[i];
printf(“%d\n”,arx[i]);

                prodeiktis = *riza;
for(k=0;k<arx[i];k++)
{
proxorise(&prodeiktis);
}
sprintf(prodeiktis->state,”candi”);
}
else
{
i–;
}
}

        ////////////////TEST – NODE CANDIDATES//////////
/*prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
sprintf(prodeiktis->state,”sleep”);
proxorise(&prodeiktis);
}

        prodeiktis = *riza;
for(i=0;i<3;i++)
{
sprintf(prodeiktis->state,”candi”);
proxorise(&prodeiktis);
}*/
///////////////////////////////////////////

        printf(“\n”);
//////////////////DEBUG////////////////////////////
prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
printf(“Komvos %d : “,i);
printf(“ID = %d “,node_id(prodeiktis));
printf(“State = %s\n”,periexomeno(prodeiktis));
proxorise(&prodeiktis);
}
//////////////////DEBUG////////////////////////////
vrethike =0;
messages=0;
prodeiktis = *riza;
while(vrethike==0)
{
for(i=0;i<megethos-1;i++)
{
//ean den einai arxikopoiitis apla proothei to minima
if(strcmp(prodeiktis->state,”sleep”)==0)
{
if(prodeiktis->temp!=prodeiktis->tok)
{
vrethike = send(prodeiktis->temp ,prodeiktis->epomenos);
messages++;
}
}
//ean einai arxikopoitis
if(strcmp(prodeiktis->state,”candi”)==0)
{
vrethike = send(prodeiktis->tok ,prodeiktis->epomenos);
messages++;
if(prodeiktis->temp>prodeiktis->tok)
{
prodeiktis->tok = prodeiktis->temp;
}
}
if(vrethike==1)
{
break;
}
proxorise(&prodeiktis);
}

            if(vrethike==1)
{
break;
}

            //////Kikliki Lista -> o teleutaios komvos send sti riza////////

            //ean den einai arxikopoiitis apla proothei to minima
if(strcmp(prodeiktis->state,”sleep”)==0)
{
if(prodeiktis->temp!=prodeiktis->tok)
{
vrethike = send(prodeiktis->temp ,*riza);
messages++;
}
}
//ean einai arxikopoitis
if(strcmp(prodeiktis->state,”candi”)==0)
{
vrethike = send(prodeiktis->tok ,*riza);
messages++;
if(prodeiktis->temp>prodeiktis->tok)
{
prodeiktis->tok = prodeiktis->temp;
}
}

            if(vrethike==1)
{
break;
}

            ///Epistrofi sti riza – ksekinaei o epomenos kiklos me tis nees times
prodeiktis = *riza;
if(strcmp(prodeiktis->state,”candi”)==0)
{
if(prodeiktis->temp>prodeiktis->tok)
{
prodeiktis->tok = prodeiktis->temp;
}
}
}

        printf(“\n”);
//////////////////APOTELESMATA////////////////////////////
prodeiktis = *riza;
for(i=0;i<megethos;i++)
{
if(strcmp(prodeiktis->state,”leade”)==0)
{
printf(“Komvos %d : “,i);
printf(“ID = %d “,node_id(prodeiktis));
printf(“State = %s\n”,periexomeno(prodeiktis));
}
proxorise(&prodeiktis);
}

        printf(“Arithmos Minimaton = %d\n\n”,messages);
//////////////////APOTELESMATA////////////////////////////
}

List.c

/*************************************************************************
Αρχείο Υλoπoίησης    : list.c
Σκοπός                : Υλοποίηση με δείκτες ΑΤΔ, κυκλικά Συνδεδεμένη Λίστα
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>

typedef char   typos_stoixeiou;
typedef struct typos_komvou *typos_deikti;
typedef struct typos_komvou
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
};
typos_deikti lista;

void dimiourgia(typos_deikti *lista);
int keni(typos_deikti lista);
void proxorise(typos_deikti *p);
typos_stoixeiou *periexomeno(typos_deikti p);
void diagrafi(typos_deikti *lista, typos_deikti prodeiktis);

void eisagogi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id,typos_deikti prodeiktis);
void eisagogi_arxi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id);
void eisagogi_meta(typos_deikti prodeiktis,typos_stoixeiou *stoixeio,int id);

int node_id(typos_deikti p);
int send(int tok,typos_deikti p);

void dimiourgia(typos_deikti *lista)
{
/*
*    Πρo:         καμία
*    Μέτά:         Δημιoυργία κενής συνδεδεμένης λίστα
*/
*lista = NULL;
}

int keni(typos_deikti lista)
{
/*
*    Πρo:         Δημιoυργία λίστας
*    Μέτά:        επιστρέφει 1 αν η λίστα είναι κενή, διαφoρετικά 0
*/
return ( lista == NULL );
}

void proxorise(typos_deikti *p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        Ο δείκτης p δείχνει στον επόμενο κόμβο στην λίστα
*/
*p = (*p)->epomenos;
}

typos_stoixeiou *periexomeno(typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
return (p->state);
}

int node_id(typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
return (p->id);
}

int send(int tok,typos_deikti p)
{
/*
*    Πρo:         Ο δείκτης p δείχνει ένα κόμβο στην λίστα
*    Μέτά:        επιστρέφει τα δεδομένα στον κόμβο που δείχνει ο p
*/
if(p->id == tok)
{
sprintf(p->state,”leade”);
return 1;
}
p->temp = tok;

    return 0;

}

void eisagogi_meta(typos_deikti prodeiktis,typos_stoixeiou *stoixeio,int id)
{
/*
*    Πρo:         Δημιoυργία λίστα
*    Μέτά:         Ο κόμβος με τα δεδομένα stoixeio έχει εισαχθεί
*                μετά τον κόμβο που δείχνει ο prodeiktis
*/    int i;
typedef struct
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
}typos_komvou;
typos_deikti prosorinos; /*Δείχνει τον νέο κόμβο που πρόκειτε να εισαχθεί*/

    prosorinos = (typos_deikti)malloc(sizeof(typos_komvou));
if ( prosorinos == NULL )
{
fprintf(stderr,”Η μνήμη είναι γεμάτη\n”);
exit(-1);
}
for(i=0;i<5;i++)
prosorinos->state[i] = stoixeio[i];
prosorinos->state[i] = ‘\0’;
prosorinos->id = id;
prosorinos->tok = id;
prosorinos->temp = id;
prosorinos->epomenos = prodeiktis->epomenos;
prodeiktis->epomenos = prosorinos;
}

void eisagogi_arxi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id)
{
/*
*    Πρo:         O δείκτης p δείχνει ττην αρχή της λίστας
*    Μέτά:         Ο κόμβος με τα δεδομένα stoixeio έχει εισαχθεί
*                πριν τον κόμβο που εδείχνει ο p, ο p δείχνει πλέον την νέα αρχή της λίστας
*/
int i;
typedef struct
{
typos_stoixeiou state[5];
typos_deikti epomenos;
int id;
int tok;
int temp;
}typos_komvou;
typos_deikti prosorinos; /*Δείχνει τον νέο κόμβο που πρόκειτε να εισαχθεί*/

    prosorinos = (typos_deikti)malloc(sizeof(typos_komvou));
if ( prosorinos == NULL )
{
fprintf(stderr,”Η μνήμη είναι γεμάτη\n”);
exit(-1);
}
for(i=0;i<5;i++)
prosorinos->state[i] = stoixeio[i];
prosorinos->state[i] = ‘\0’;
prosorinos->id = id;
prosorinos->tok = id;
prosorinos->temp = id;
prosorinos->epomenos = *lista;
*lista = prosorinos;
}

void eisagogi(typos_deikti *lista,typos_stoixeiou *stoixeio,int id,typos_deikti prodeiktis)
{
/*
*    Πρo:         Ο prodeiktis δείχνει ένα κόμβο στην λίστα ή είναι NULL
*    Μέτά:         Αν ο prodeiktis είναι NULL τοτε ο κόμβος με τα δεδομένα
*                stoixeio έχει εισαχθεί στην αρχή της λίστας αλλιώς ο εισάγεται μετά
*                τον κόμβο που δείχνει ο prodeiktis
*/
if (keni(prodeiktis)) /*εισαγωγή στην αρχή της λίστας*/
eisagogi_arxi(lista,stoixeio,id);
else
eisagogi_meta(prodeiktis,stoixeio,id);
}

yeezy boost 350 ua yeezytrainer yeezy boost 350 ua yeezytrainer yeezytrainer yeezy boost 350 ua yeezy boost 350 ua yeezy shoes yeezy shoes yeezy boost online

yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes yeezy 350 boost for sale yeezy boost online yeezy shoes