Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement