fork(1) download
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX_ELEMENTS 10 // μέγιστο πλήθος στοιχείων
  5. #define EMPTY_ELEMVAL 0 // τιμή κενών στοιχείων
  6.  
  7. // έλεγχος για κενό πίνακα
  8. #define ARR_ISEMPTY(arr) ( (arr)[0] == EMPTY_ELEMVAL )
  9. // έλεγχος για γεμάτο πίνακα
  10. #define ARR_ISFULL(arr, len) ( (arr)[(len)-1] != EMPTY_ELEMVAL )
  11.  
  12. typedef enum { FALSE=0, TRUE } Bool; // ο δικός μας τύπος boolean
  13.  
  14. // -------------------------------------------------------------------------------------
  15. // Εκτύπωση όλων των στοιχείων του πίνακα
  16. //
  17. void arr_print( int arr[], int maxelems )
  18. {
  19. register int i;
  20.  
  21. for (i=0; i < maxelems; i++) // διέτρεξε όλο τον πίνακα
  22. printf("%d ", arr[i]); // τυπώνοντας τα στοιχεία του
  23. putchar('\n'); // αλλαγή γραμμής στην οθόνη
  24.  
  25. return;
  26. }
  27. // -------------------------------------------------------------------------------------
  28. // Εισαγωγή νέου στοιχείου με τιμή val στο τέλος του πίνακα arr (επιστρέφει τη θέση στην
  29. // οποία εισήχθη το νέο στοιχειο, ή -1 σε περίπτωση που ο πίνακας ήταν ήδη γεμάτος)
  30. //
  31. int arr_append( int arr[], int maxelems, int val)
  32. {
  33. if ( ARR_ISFULL(arr, maxelems) ) // σε γεμάτο πίνακα...
  34. return -1; // επιστροφή αποτυχίας
  35.  
  36. if ( ARR_ISEMPTY(arr) ) { // σε κενό πίνακα...
  37. arr[0] = val; // εισαγωγή στην αρχή
  38. return 0; // επιστροφή 1ης θέσης
  39. }
  40. register int i; // σε μη κενό πίνακα...
  41. for (i=maxelems-1; arr[i] == EMPTY_ELEMVAL; i--)// αναζήτηση πρώτου...
  42. ; // κενού στοιχείου
  43. arr[++i] = val; // αντικατάστασή του...
  44. // με το νέο στοιχείο
  45. return i; // επιστροφή θέσης εισαγωγής
  46. }
  47. // -------------------------------------------------------------------------------------
  48. // Εισαγωγή νέου στοιχείου με τιμή val στην αρχή του πίνακα arr (επιστρέφει FALSE σε
  49. // περίπτωση που ο πίνακας ήταν ήδη γεμάτος, αλλιώς TRUE)
  50. //
  51. Bool arr_prepend( int arr[], int maxelems, int val)
  52. {
  53. if ( ARR_ISFULL(arr, maxelems) ) // σε γεμάτο πίνακα
  54. return FALSE; // επιστροφή αποτυχίας
  55.  
  56. // μετακίνηση των στοιχείων μια
  57. // θέση προς τα δεξιά, ξεκινώντας
  58. memmove( &arr[1], &arr[0], (maxelems-1) * sizeof(int) );// από το 1ο στοιχείο
  59.  
  60. arr[0] = val; // εισαγωγή νέου στοιχείου
  61.  
  62. return TRUE; // επιστροφή επιτυχίας
  63. }
  64. // -------------------------------------------------------------------------------------
  65. // Αναζήτηση του στοιχείου με τιμή val στον πίνακα arr (επιστρέφει τη θέση στην οποία
  66. // βρέθηκε το στοιχείο, αλλιώς επιστρέφει -1)
  67. //
  68. int arr_elemindex( int arr[], int maxelems, int val )
  69. {
  70. register int i;
  71. // όσο τα στοιχεία του πίνακα διαφέρουν του val
  72. for (i=0; i < maxelems && arr[i] != val; i++) // και υπάρχουν ακόμα στοιχεία
  73. ; // συνέχισε
  74. return i == maxelems ? -1 : i; // τέλειωσαν τα στοιχεία ? -1 αλλιώς i
  75. }
  76. // ------------------------------------------------------------------------------------
  77. // Διαγραφή του στοιχείου με τιμή val από τον πίνακα arr (επιστρέφει FALSE αν το
  78. // στοιχείο δεν βρέθηκε στον πίνακα, αλλιώς το διαγράφει κι επιστρέφει TRUE)
  79. //
  80. Bool arr_delete( int arr[], int maxelems, int val)
  81. {
  82. register int i;
  83.  
  84. int elem = arr_elemindex( arr, maxelems, val); // εύρεση στοιχείου με τιμή val
  85. if ( elem == -1 ) // το στοιχείο δεν βρέθηκε...
  86. return FALSE; // επιστροφή αποτυχίας
  87.  
  88. // μετακίνηση των στοιχείων μια θέση προς τα αριστερά ...
  89. // ξεκινώντας από τη θέση που βρέθηκε το στοιχείο
  90. for (i=elem; arr[i+1] != EMPTY_ELEMVAL && i < maxelems-1; i++)
  91. arr[i] = arr[i+1];
  92.  
  93. arr[i] = EMPTY_ELEMVAL; // μηδενισμός του τέως τελευταίου στοιχείου
  94.  
  95. return TRUE; // επιστροφή επιτυχίας
  96. }
  97. // -------------------------------------------------------------------------------------
  98. int main( void )
  99. {
  100. int arr[ MAX_ELEMENTS ] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
  101.  
  102. // μηδενισμός όλων των στοιχείων του arr
  103. // memset(arr, 0, MAX_ELEMENTS * sizeof(int) );
  104.  
  105. arr_print( arr, MAX_ELEMENTS );
  106.  
  107. return 0;
  108. }
  109.  
  110.  
Success #stdin #stdout 0s 1720KB
stdin
Standard input is empty
stdout
10 20 30 40 50 60 70 80 90 100