Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node Node;
  5.  
  6. struct node {
  7.     int item;
  8.     Node *previous;
  9.     Node *next;
  10. };
  11.  
  12. Node* insert_end(Node *end, int num) {
  13.     Node *new_node = (Node*) malloc(sizeof(Node));
  14.  
  15.     new_node->item = num;
  16.     new_node->previous = NULL;
  17.     new_node->next = NULL;
  18.  
  19.     if (end == NULL) return new_node;
  20.  
  21.     end->next = new_node;
  22.     new_node->previous = end;
  23.  
  24.     return new_node;
  25. }
  26.  
  27. Node* bubble_sort(Node *head, int size) {
  28.    Node *current, *temp;
  29.    
  30.     while (size > 0) {
  31.         current = head;
  32.  
  33.         while (current->next != NULL) {
  34.             temp = current->next;
  35.  
  36.             if (current->item > temp->item) {
  37.                
  38.                 if (current != head && temp->next != NULL) {
  39.                     temp->next->previous = current;
  40.                     temp->next->previous = current;
  41.                 }
  42.                 if (current == head) {
  43.                     temp->next->previous = current;
  44.                     head = temp;
  45.                 }
  46.                 if (temp->next == NULL)  {
  47.                     temp->next->previous = current;
  48.                 }
  49.                
  50.                 current->next = temp->next;
  51.                 temp->previous = current->previous;
  52.  
  53.                 current->previous = temp;
  54.                 temp->next = current;
  55.  
  56.                 current = temp;
  57.             }
  58.             current = current->next;
  59.         }
  60.         size--;
  61.     }
  62.     return head;
  63. }
  64.  
  65. void print_list(Node *head) {
  66.     while (head != NULL) {
  67.         printf("%d ", head->item);
  68.         head = head->next;
  69.     }
  70.     printf("\n");
  71. }
  72.  
  73. int main() {
  74.     Node *head = NULL;
  75.     Node *end = NULL;
  76.     int n, size = 0;
  77.  
  78.     while (scanf("%d", &n) != EOF) {
  79.         end = insert_end(end, n);
  80.         if (head == NULL) head = end;
  81.         size++;
  82.     }
  83.     head = bubble_sort(head, size);
  84.     print_list(head);
  85.    
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement