akadjoker

linkilist4

Mar 30th, 2022
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. #define MAX_HEAP 100
  8.  
  9. typedef struct IMem
  10. {
  11. void* mem;
  12. int size;
  13. }IMem;
  14. int mem_index = 0;
  15. int max_stack = 0;
  16. int free_stack = 0;
  17.  
  18. IMem heap[MAX_HEAP];
  19.  
  20. void* Malloc(int size)
  21. {
  22. void* data = malloc(size);
  23. heap[mem_index].size= size;
  24. heap[mem_index].mem =data;
  25. max_stack += size;
  26. mem_index++;
  27. return data;
  28. }
  29.  
  30. void Free(void* data)
  31. {
  32. free(data);
  33. data = NULL;
  34. heap[mem_index-1].mem = NULL;
  35. free_stack+=heap[mem_index-1].size;
  36. heap[mem_index-1].size=0;
  37. mem_index--;
  38. }
  39.  
  40.  
  41. void mem_leak()
  42. {
  43. printf("\n");
  44. printf("*** Memory HEAP trace ***\n");
  45. printf("* *\n");
  46. printf("* Memory request : %d *\n",max_stack);
  47. printf("* Memory free : %d *\n",free_stack);
  48. printf("* *\n");
  49. if (max_stack!=free_stack)
  50. printf("* * memory leaks * :( *\n");
  51. else
  52. printf("* < no memory leaks > :) *\n");
  53. printf("* *\n");
  54. printf("***************************\n");
  55. printf("\n");
  56. }
  57.  
  58.  
  59.  
  60.  
  61. typedef struct Node
  62. {
  63. int data;
  64. struct Node* next;
  65. }Node;
  66.  
  67. Node *head_ref=NULL;
  68.  
  69. void insertAtBeginning( int new_data)
  70. {
  71. Node* new_node = ( Node*)Malloc(sizeof( Node));
  72. new_node->data = new_data;
  73. new_node->next = head_ref;
  74.  
  75. // a pilha da cebaca fica o novo node
  76. head_ref = new_node;
  77. }
  78.  
  79.  
  80. void insertAfter( Node* prev_node, int new_data)
  81. {
  82. if (prev_node == NULL)
  83. {
  84. printf("the given previous node cannot be NULL");
  85. return;
  86. }
  87.  
  88. Node* new_node = ( Node*)Malloc(sizeof( Node));
  89. new_node->data = new_data;
  90. new_node->next = prev_node->next;
  91. prev_node->next = new_node;
  92. }
  93.  
  94.  
  95. void insertAtEnd( int new_data)
  96. {
  97.  
  98. Node* new_node = ( Node*)Malloc(sizeof( Node));
  99. Node* last = head_ref;
  100.  
  101. new_node->data = new_data;
  102. new_node->next = NULL;
  103.  
  104. if (head_ref == NULL)
  105. {
  106. head_ref = new_node;
  107. return;
  108. }
  109.  
  110. while (last->next != NULL)
  111. last = last->next;
  112.  
  113. last->next = new_node;
  114.  
  115. }
  116.  
  117. void pop()
  118. {
  119. Node *temp = head_ref;
  120. head_ref = head_ref->next;
  121. Free(temp);
  122. }
  123.  
  124. void clear()
  125. {
  126. while(head_ref)
  127. {
  128. pop();
  129. }
  130. }
  131.  
  132. void deleteNode( int key)
  133. {
  134.  
  135. Node *temp = head_ref, *prev;
  136.  
  137. if (temp != NULL && temp->data == key)
  138. {
  139. head_ref = temp->next;
  140. Free(temp);
  141. return;
  142. }
  143. // prcuramos a chave na pilha
  144. while (temp != NULL && temp->data != key)
  145. {
  146. prev = temp;
  147. temp = temp->next;
  148. }
  149.  
  150. // se a pilha nao contem a chave
  151. if (temp == NULL) return;
  152.  
  153. // remove a pilha
  154. prev->next = temp->next;
  155.  
  156. Free(temp);
  157. }
  158.  
  159.  
  160. int searchNode( int key)
  161. {
  162. Node* current = head_ref;
  163.  
  164. while (current != NULL)
  165. {
  166. if (current->data == key) return 1;
  167. current = current->next;
  168. }
  169. return 0;
  170. }
  171.  
  172.  
  173. void sortLinkedList()
  174. {
  175. Node *current = head_ref, *index = NULL;
  176. int temp;
  177.  
  178. if (head_ref == NULL)
  179. {
  180. return;
  181. } else
  182. {
  183. while (current != NULL)
  184. {
  185.  
  186. index = current->next;
  187.  
  188. while (index != NULL)
  189. {
  190. if (current->data > index->data)
  191. {
  192. temp = current->data;
  193. current->data = index->data;
  194. index->data = temp;
  195. }
  196. index = index->next;
  197. }
  198. current = current->next;
  199. }
  200. }
  201. }
  202.  
  203.  
  204. void printList(Node* node)
  205. {
  206. while (node != NULL)
  207. {
  208. printf(" %d ", node->data);
  209. node = node->next;
  210. }
  211. printf("\n");
  212. }
  213.  
  214.  
  215.  
  216.  
  217.  
  218. int main()
  219. {
  220.  
  221.  
  222. insertAtEnd( 1);
  223. insertAtBeginning( 2);
  224. insertAtBeginning( 3);
  225. insertAtEnd( 4);
  226. insertAfter(head_ref->next, 5);
  227.  
  228. printf("Linked list: \n");
  229. printList(head_ref);
  230.  
  231. printf("\nAfter deleting an element: \n");
  232. deleteNode( 3);
  233. printList(head_ref);
  234.  
  235. int item_to_find = 5;
  236. if (searchNode(item_to_find))
  237. {
  238. printf("\n [%d] is found \n", item_to_find);
  239. } else {
  240. printf("\n [%d] is not found \n", item_to_find);
  241. }
  242.  
  243. sortLinkedList();
  244. printf("\nSorted List: \n");
  245. printList(head_ref);
  246.  
  247.  
  248. clear();
  249.  
  250. printList(head_ref);
  251.  
  252.  
  253. mem_leak();
  254.  
  255. return 0;
  256. }
  257.  
  258.  
Advertisement
Add Comment
Please, Sign In to add comment