Advertisement
DMG

Doubly linked list in C

DMG
Dec 16th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. // Dvostruko spregnuta lista
  2. // dmarjanovic
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. typedef struct Node ListNode;
  8.  
  9. struct Node {
  10.      // Pokazivac na prethodni i pokazivac na sljedeci
  11.      ListNode *prev;
  12.      ListNode *next;  
  13.      int element;
  14. };
  15.  
  16. // Inicijalizacija liste
  17. void initialize_list(ListNode **head, ListNode **tail) {
  18.      // Pokazivac na "glavu" i na "rep" list postavimo na NULL
  19.      *head = NULL;
  20.      *tail = NULL;
  21. }
  22.  
  23. // Dodavanje novog elementa u listu
  24. void add_element(ListNode **head, ListNode **tail, int element_data) {
  25.      ListNode *new_node;
  26.      new_node = (ListNode *)malloc(sizeof(ListNode));
  27.      new_node -> element = element_data;
  28.      new_node -> next = NULL;
  29.      
  30.      // Prvi element liste
  31.      if (*head == NULL && *tail == NULL) {
  32.         new_node -> prev = NULL;
  33.         *head = new_node;
  34.         *tail = new_node;
  35.         return;
  36.     }
  37.    
  38.     ListNode *current;
  39.     current = *tail;
  40.    
  41.     new_node -> prev = current;
  42.     current -> next = new_node;
  43.     *tail = new_node;
  44. }
  45.  
  46. // Brisanje elementa liste
  47. void delete_element(ListNode **head, ListNode **tail, int element_data) {
  48.      ListNode *current;
  49.  
  50.     current = *head;
  51.  
  52.     while (current != NULL) {
  53.         if (current -> element == element_data) {
  54.             current -> prev -> next = current -> next;
  55.             current -> next -> prev = current -> prev;
  56.             free(current);
  57.             return;
  58.         }
  59.  
  60.         current = current -> next;
  61.     }
  62. }
  63.  
  64. // Stampanje elemenata liste
  65. void print_list(ListNode **head, ListNode **tail) {
  66.      ListNode *current;
  67.  
  68.      current = *head;
  69.  
  70.      while (current != NULL) {
  71.            printf("Element je: %d \n", current -> element);
  72.            current = current -> next;
  73.      }
  74.      
  75.      printf("\n");
  76. }
  77.  
  78. int main() {
  79.  
  80.     ListNode *head;
  81.     ListNode *tail;
  82.     initialize_list(&head, &tail);
  83.  
  84.     add_element(&head, &tail, 4);
  85.     add_element(&head, &tail, 23);
  86.     add_element(&head, &tail, 7);
  87.     add_element(&head, &tail, 1);
  88.     add_element(&head, &tail, 2);
  89.  
  90.     print_list(&head, &tail);
  91.  
  92.     delete_element(&head, &tail, 1);
  93.  
  94.     print_list(&head, &tail);
  95.  
  96.     system("PAUSE");
  97.    
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement