• Merge – Sort

    A merge sort algorithm used to sort an array o...Image via Wikipedia
    Source Code in C

    (more…)

  • Unix – Crontab

    #! /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

    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


    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);
    }