Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct node Node;
- struct node {
- int item;
- Node *previous;
- Node *next;
- };
- Node* insert_end(Node *end, int num) {
- Node *new_node = (Node*) malloc(sizeof(Node));
- new_node->item = num;
- new_node->previous = NULL;
- new_node->next = NULL;
- if (end == NULL) return new_node;
- end->next = new_node;
- new_node->previous = end;
- return new_node;
- }
- Node* bubble_sort(Node *head, int size) {
- Node *current, *temp;
- while (size > 0) {
- current = head;
- while (current->next != NULL) {
- temp = current->next;
- if (current->item > temp->item) {
- if (current != head && temp->next != NULL) {
- temp->next->previous = current;
- temp->next->previous = current;
- }
- if (current == head) {
- temp->next->previous = current;
- head = temp;
- }
- if (temp->next == NULL) {
- temp->next->previous = current;
- }
- current->next = temp->next;
- temp->previous = current->previous;
- current->previous = temp;
- temp->next = current;
- current = temp;
- }
- current = current->next;
- }
- size--;
- }
- return head;
- }
- void print_list(Node *head) {
- while (head != NULL) {
- printf("%d ", head->item);
- head = head->next;
- }
- printf("\n");
- }
- int main() {
- Node *head = NULL;
- Node *end = NULL;
- int n, size = 0;
- while (scanf("%d", &n) != EOF) {
- end = insert_end(end, n);
- if (head == NULL) head = end;
- size++;
- }
- head = bubble_sort(head, size);
- print_list(head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement