#include #include struct numberlist { long long number; struct numberlist * next; }; void add(struct numberlist **, long long); unsigned dump(struct numberlist *, long long **); int compareLL(void *, void *); int main (void) { int result; long long value; struct numberlist * numberlist = NULL; long long * array; unsigned arrayCount; do { printf("Input value, non-numeric ends input: "); result = scanf("%llu", &value); if (result) add(&numberlist, value); } while (result); if (!numberlist) { printf("No numbers entered\n"); return 0; } arrayCount = dump(numberlist, &array); qsort(array, arrayCount, sizeof(long long), &compareLL); unsigned current; printf("Numbers: %lld", *array); // print the first for (current = 1; current < arrayCount; current ++) printf(", %lld", array[current]); // print the rest putchar('\n'); // end the line free(array); return 0; } void add (struct numberlist ** plist, long long number) { struct numberlist * newNode = malloc(sizeof(struct numberlist)); newNode -> number = number; newNode -> next = *plist; *plist = newNode; } unsigned dump (struct numberlist * list, long long ** parray) { unsigned count = 0; struct numberlist * temp = list; while (temp) { temp = temp -> next; count ++; } *parray = malloc(count * sizeof(long long)); unsigned current; for (current = 0; current < count; current ++) { (*parray)[current] = list -> number; list = list -> next; } return count; } int compareLL (void * number1, void * number2) { long long a = *((long long *) number1); long long b = *((long long *) number2); if (a == b) return 0; return (a < b) ? -1 : 1; }