#include #include "insertsort.h" node heap[MAX_NODES]; int node_p = 0; node* new_node() { if (node_p == MAX_NODES) { return 0; } return &(heap[node_p++]); } node* head; void initialize() { head = NULL; } void print_nodes() { node* p = head; printf ("("); while (p != NULL) { printf ("%d ", p->v); p = p->next; } printf (")"); } int is_sorted() { node* p = head; while (p != NULL) { if (p->next != NULL) { if (p->v > p->next->v) { return 0; } } p = p->next; } return 1; } int insert (int x) { node* p = head; if (p == NULL) { head = new_node(); if (head == NULL) { return 0; } else { head->v = x; head->next = NULL; } return 1; } while ((p->next != NULL) && (p->next->v < x)) { p = p->next; } /* At this point, either p->next == NULL or p->next->v >= x) */ if (p->next == NULL) { p->next = new_node(); if (p->next == NULL) { return 0; } else { p->next->v = x; p->next->next = NULL; } return 1; } else { node* t = new_node(); if (t == NULL) { return 0; } else { t->v = x; t->next = p->next; p->next = t; } return 1; } return -1; }