#include <stdio.h>
#include <stdlib.h>
#define MAX_ELEMENTS 10
#define EMPTY_ELEMVAL 0
#define ARR_ISEMPTY(arr) ( (arr)[0] == EMPTY_ELEMVAL )//εάν το πρώτο τμήμα του arr είναι 0 τότε επέστρεψε 0 αλλιώς 1
#define ARR_ISFULL(arr, maxlen) ( (arr)[(maxlen)-1] != EMPTY_ELEMVAL )//εάν το τελευταίο τμήμα του arr είναι γεμάτο τότε επέστρεψε 0 αλλιώς 1
typedef struct {
int len;
int arr[ MAX_ELEMENTS] ;
} List;
// -----------------------------------------------------------------------------
void list_reset( List *list, int maxelems)
{
register int i;
for (i=0; i<maxelems; i++)//ενώ το i είναι μικρότερο των ορίων του maxelems
list->arr[i] = EMPTY_ELEMVAL;//το arr[i] γίνεται 0
list->len = 0;//το length του list γίνεται 0
return;
}
// -------------------------------------------------------------------------------------
int list_append( List *list, int maxelems, int val)
{
if ( ARR_ISFULL( list->arr, maxelems ) )//εάν είναι γεμάτο το arr
return -1;
if ( ARR_ISEMPTY( list->arr ) ) { //εάν είναι άδειο το arr
list->arr[0] = val; //το val εκχωρείται στο arr[0]
list->len = 1; //το μήκος του arr γίνεται 1
return 0;
}
register int i;
for (i=maxelems-1; list->arr[i] == EMPTY_ELEMVAL; i--)//ενώ(ι=μήκος-1;το arr[i] είναι 0; i--)
;
list->arr[++i] = val;//το arr[i+1] = val
(list->len)++; //το μήκος αυξάνεται κατά 1
return i;
}
// -------------------------------------------------------------------------------------
void list_print( List list, int maxelems )
{
register int i;
for (i=0; i < maxelems; i++) //ενώ(i εισούται με 0;i είναι μικρότερο του maxlems;i++)
printf("%d ", list.
arr[i
] ); //εκτύπωσε το iοστό του arr return;
}
// -----------------------------------------------------------------------------
int main( void )
{
List mylist;//δημιουργία ενός struct τύπου list με όνομα mylist
list_reset( &mylist, MAX_ELEMENTS);
list_append( &mylist, MAX_ELEMENTS, 999);
list_print( mylist, MAX_ELEMENTS );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgTUFYX0VMRU1FTlRTICAgIDEwCiNkZWZpbmUgRU1QVFlfRUxFTVZBTCAgIDAKCiNkZWZpbmUgQVJSX0lTRU1QVFkoYXJyKSAgICAgICAgKCAoYXJyKVswXSA9PSBFTVBUWV9FTEVNVkFMICkvL861zqzOvSDPhM6/IM+Az4HPjs+Ezr8gz4TOvM6uzrzOsSDPhM6/z4UgYXJyIM61zq/Ovc6xzrkgMCDPhM+Mz4TOtSDOtc+Azq3Pg8+Ez4HOtc+IzrUgMCDOsc67zrvOuc+Oz4IgMQojZGVmaW5lIEFSUl9JU0ZVTEwoYXJyLCBtYXhsZW4pICAgICggKGFycilbKG1heGxlbiktMV0gIT0gRU1QVFlfRUxFTVZBTCApLy/Otc6szr0gz4TOvyDPhM61zrvOtc+Fz4TOsc6vzr8gz4TOvM6uzrzOsSDPhM6/z4UgYXJyIM61zq/Ovc6xzrkgzrPOtc68zqzPhM6/IM+Ez4zPhM61IM61z4DOrc+Dz4TPgc61z4jOtSAwIM6xzrvOu865z47PgiAxCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgICAgIGxlbjsKICAgIGludCAgICAgYXJyWyBNQVhfRUxFTUVOVFNdIDsKfSBMaXN0OwoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnZvaWQgbGlzdF9yZXNldCggTGlzdCAqbGlzdCwgaW50IG1heGVsZW1zKQp7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3IgKGk9MDsgaTxtYXhlbGVtczsgaSsrKS8vzrXOvc+OIM+Ezr8gaSDOtc6vzr3Osc65IM68zrnOus+Bz4zPhM61z4HOvyDPhM+Jzr0gzr/Pgc6vz4nOvSDPhM6/z4UgbWF4ZWxlbXMKICAgICAgICBsaXN0LT5hcnJbaV0gPSBFTVBUWV9FTEVNVkFMOy8vz4TOvyBhcnJbaV0gzrPOr869zrXPhM6xzrkgMAogICAgbGlzdC0+bGVuID0gMDsvL8+Ezr8gbGVuZ3RoIM+Ezr/PhSBsaXN0IM6zzq/Ovc61z4TOsc65IDAKCiAgICByZXR1cm47Cn0KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaW50IGxpc3RfYXBwZW5kKCBMaXN0ICpsaXN0LCBpbnQgbWF4ZWxlbXMsIGludCB2YWwpCnsKICAgICAgIGlmICggQVJSX0lTRlVMTCggbGlzdC0+YXJyLCBtYXhlbGVtcyApICkvL861zqzOvSDOtc6vzr3Osc65IM6zzrXOvM6sz4TOvyDPhM6/IGFycgogICAgICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmICggQVJSX0lTRU1QVFkoIGxpc3QtPmFyciApICkgeyAgICAgIC8vzrXOrM69IM61zq/Ovc6xzrkgzqzOtM61zrnOvyDPhM6/IGFycgogICAgICAgICAgICAgICBsaXN0LT5hcnJbMF0gPSB2YWw7ICAgICAgICAgICAgIC8vz4TOvyB2YWwgzrXOus+Hz4nPgc61zq/PhM6xzrkgz4PPhM6/IGFyclswXQogICAgICAgICAgICAgICBsaXN0LT5sZW4gPSAxOyAgICAgICAgICAgICAgICAgIC8vz4TOvyDOvM6uzrrOv8+CIM+Ezr/PhSBhcnIgzrPOr869zrXPhM6xzrkgMQogICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICAgIHJlZ2lzdGVyIGludCBpOwogICAgICAgIGZvciAoaT1tYXhlbGVtcy0xOyBsaXN0LT5hcnJbaV0gPT0gRU1QVFlfRUxFTVZBTDsgaS0tKS8vzrXOvc+OKM65Pc68zq7Ous6/z4ItMTvPhM6/IGFycltpXSDOtc6vzr3Osc65IDA7IGktLSkKICAgICAgICAgICAgICAgIDsKICAgICAgICBsaXN0LT5hcnJbKytpXSA9IHZhbDsvL8+Ezr8gYXJyW2krMV0gPSB2YWwKICAgICAgICAobGlzdC0+bGVuKSsrOyAgICAgICAvL8+Ezr8gzrzOrs66zr/PgiDOsc+Fzr7OrM69zrXPhM6xzrkgzrrOsc+EzqwgMQoKICAgICAgICByZXR1cm4gaTsKfQogICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQp2b2lkIGxpc3RfcHJpbnQoIExpc3QgbGlzdCwgaW50IG1heGVsZW1zICkKewogICAgICAgIHJlZ2lzdGVyIGludCBpOwoKICAgICAgICBmb3IgKGk9MDsgaSA8IG1heGVsZW1zOyBpKyspICAgICAgICAgICAgLy/Otc69z44oaSDOtc65z4POv8+Nz4TOsc65IM68zrUgMDtpIM61zq/Ovc6xzrkgzrzOuc66z4HPjM+EzrXPgc6/IM+Ezr/PhSBtYXhsZW1zO2krKykKICAgICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBsaXN0LmFycltpXSApOyAgICAgLy/Otc66z4TPjc+Az4nPg861IM+Ezr8gac6/z4PPhM+MIM+Ezr/PhSBhcnIKICAgICAgIHB1dGNoYXIoJ1xuJyk7Ly/Otc66z4TPjc+Az4nPg861ICdcbicKICAgICAgICByZXR1cm47Cn0KICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludCBtYWluKCB2b2lkICkKewogICAgIExpc3QgbXlsaXN0Oy8vzrTOt868zrnOv8+Fz4HOs86vzrEgzrXOvc+Mz4Igc3RydWN0IM+Ez43PgM6/z4UgbGlzdCDOvM61IM+Mzr3Ov868zrEgbXlsaXN0CgogICAgIGxpc3RfcmVzZXQoICZteWxpc3QsIE1BWF9FTEVNRU5UUyk7CiAgICAgbGlzdF9hcHBlbmQoICZteWxpc3QsIE1BWF9FTEVNRU5UUywgOTk5KTsKICAgICBsaXN0X3ByaW50KCBteWxpc3QsIE1BWF9FTEVNRU5UUyApOwoKICAgICByZXR1cm4gMDsKfQ==