fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX_ELEMENTS 10
  5. #define EMPTY_ELEMVAL 0
  6.  
  7. #define ARR_ISEMPTY(arr) ( (arr)[0] == EMPTY_ELEMVAL )//εάν το πρώτο τμήμα του arr είναι 0 τότε επέστρεψε 0 αλλιώς 1
  8. #define ARR_ISFULL(arr, maxlen) ( (arr)[(maxlen)-1] != EMPTY_ELEMVAL )//εάν το τελευταίο τμήμα του arr είναι γεμάτο τότε επέστρεψε 0 αλλιώς 1
  9.  
  10. typedef struct {
  11. int len;
  12. int arr[ MAX_ELEMENTS] ;
  13. } List;
  14.  
  15. // -----------------------------------------------------------------------------
  16. void list_reset( List *list, int maxelems)
  17. {
  18. register int i;
  19.  
  20. for (i=0; i<maxelems; i++)//ενώ το i είναι μικρότερο των ορίων του maxelems
  21. list->arr[i] = EMPTY_ELEMVAL;//το arr[i] γίνεται 0
  22. list->len = 0;//το length του list γίνεται 0
  23.  
  24. return;
  25. }
  26. // -------------------------------------------------------------------------------------
  27. int list_append( List *list, int maxelems, int val)
  28. {
  29. if ( ARR_ISFULL( list->arr, maxelems ) )//εάν είναι γεμάτο το arr
  30. return -1;
  31.  
  32. if ( ARR_ISEMPTY( list->arr ) ) { //εάν είναι άδειο το arr
  33. list->arr[0] = val; //το val εκχωρείται στο arr[0]
  34. list->len = 1; //το μήκος του arr γίνεται 1
  35. return 0;
  36. }
  37.  
  38. register int i;
  39. for (i=maxelems-1; list->arr[i] == EMPTY_ELEMVAL; i--)//ενώ(ι=μήκος-1;το arr[i] είναι 0; i--)
  40. ;
  41. list->arr[++i] = val;//το arr[i+1] = val
  42. (list->len)++; //το μήκος αυξάνεται κατά 1
  43.  
  44. return i;
  45. }
  46. // -------------------------------------------------------------------------------------
  47. void list_print( List list, int maxelems )
  48. {
  49. register int i;
  50.  
  51. for (i=0; i < maxelems; i++) //ενώ(i εισούται με 0;i είναι μικρότερο του maxlems;i++)
  52. printf("%d ", list.arr[i] ); //εκτύπωσε το iοστό του arr
  53. putchar('\n');//εκτύπωσε '\n'
  54. return;
  55. }
  56. // -----------------------------------------------------------------------------
  57. int main( void )
  58. {
  59. List mylist;//δημιουργία ενός struct τύπου list με όνομα mylist
  60.  
  61. list_reset( &mylist, MAX_ELEMENTS);
  62. list_append( &mylist, MAX_ELEMENTS, 999);
  63. list_print( mylist, MAX_ELEMENTS );
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 1720KB
stdin
Standard input is empty
stdout
999 0 0 0 0 0 0 0 0 0