Advertisement
ErliPan

Untitled

Dec 30th, 2020
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define true 1
  5. #define false 0
  6.  
  7. typedef unsigned short int bool;
  8.  
  9. struct list
  10. {
  11.  
  12. int *buffer;
  13. int head;
  14. int tail;
  15. int size;
  16. };
  17.  
  18. bool createList(struct list *ptr, int size)
  19. {
  20. ptr->size = size;
  21. ptr->buffer = malloc(ptr->size * sizeof(int));
  22.  
  23. if (ptr->buffer == NULL)
  24. {
  25. return false;
  26. }
  27. ptr->head = 0;
  28. ptr->tail = 0;
  29.  
  30. return true;
  31. }
  32.  
  33. bool addElement(struct list *ptr, int value)
  34. {
  35. if (ptr->tail + 1 % ptr->size != ptr->head)
  36. {
  37. ptr->buffer[ptr->tail] = value;
  38. ptr->tail = ++ptr->tail % ptr->size;
  39. return true;
  40. }
  41. // Lista piena
  42. return false;
  43. }
  44.  
  45. bool addElementFirst(struct list *ptr, int value)
  46. {
  47. if (ptr->tail + 1 % ptr->size != ptr->head)
  48. {
  49. int prec = (ptr->head - 1 + ptr->size) % ptr->size;
  50. ptr->buffer[prec] = value;
  51. ptr->head = prec;
  52. return true;
  53. }
  54. //lista piena
  55. return false;
  56. }
  57.  
  58. bool printLista(struct list *ptr)
  59. {
  60. if (ptr->head == ptr->tail)
  61. {
  62. printf("Lista vuota \n");
  63. return false;
  64. }
  65.  
  66. int val = ptr->head;
  67.  
  68. while (val != ptr->tail) {
  69. printf("%d \t", ptr->buffer[val]);
  70. val = ++val % ptr->size;
  71. }
  72.  
  73. printf("\n");
  74.  
  75. return true;
  76. }
  77.  
  78. int ord_insert2(struct list * ptr, int val) {
  79. if (ptr->head != (++ptr->tail)%ptr->size) {
  80. int pos = ptr->tail, prec = (pos - 1 + ptr->size) % ptr->size;
  81. while (!(ptr->buffer[prec] < val || pos == ptr->head)) {
  82. ptr->buffer[pos] = ptr->buffer[prec];
  83. pos = prec;
  84. }
  85. ptr->buffer[pos] = val;
  86. return true;
  87. }
  88. return false;
  89. }
  90.  
  91. bool ins_ord(struct list *ptr, int value) {
  92.  
  93. if (1+ptr->tail % ptr->size == ptr->head) {
  94. return false;
  95. }
  96.  
  97. int val = ptr->tail;
  98. ptr->tail = ++ptr->tail % ptr->size;
  99. while (value < ptr->buffer[(val-1 + ptr->size) % ptr->size] && (val-1 + ptr->size) % ptr->size != ptr->head) {
  100. ptr->buffer[val] = ptr->buffer[(val-1 + ptr->size) % ptr->size];
  101. val = (val-1 + ptr->size) % ptr->size;
  102. }
  103. ptr->buffer[val] = value;
  104.  
  105. }
  106.  
  107. bool ord_insert3(struct list * ptr, int val) {
  108.  
  109. //if (ptr->tail+1%ptr->size == ptr->head) return false;
  110.  
  111. int pos = ptr->tail;
  112. ptr->tail = ptr->tail +1 % ptr->size;
  113.  
  114. if (ptr->buffer[(pos-1+ptr->size) % ptr->size] > val) {
  115. ptr->buffer[pos] = val;
  116. return true;
  117. }
  118.  
  119. do {
  120. int prec = (pos-1+ptr->size) % ptr->size;
  121. ptr->buffer[pos] = ptr->buffer[prec];
  122.  
  123. if (ptr->buffer[prec] > val || prec == ptr->head) {
  124. ptr->buffer[pos] = val;
  125. return true;
  126. }
  127.  
  128. pos = prec;
  129.  
  130. } while (pos != ptr->head);
  131.  
  132. return false;
  133. }
  134.  
  135. int main()
  136. {
  137. struct list lista;
  138.  
  139. createList(&lista, 30);
  140.  
  141. printLista(&lista);
  142.  
  143. addElement(&lista, 2);
  144. addElement(&lista, 4);
  145. addElement(&lista, 6);
  146. addElement(&lista, 8);
  147. addElementFirst(&lista, -1);
  148.  
  149.  
  150. printLista(&lista);
  151.  
  152. ord_insert3(&lista, -2);
  153. printLista(&lista);
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement