#include <stdlib.h>
#include <stdio.h>
typedef struct list{
int data;
struct list *next;
} list;
struct list* create(int a){
struct list *root;
root
= (struct list
*)malloc(sizeof(struct list
)); root->data = a;
root->next = NULL;
return root;
}
struct list* addelem(list *lst, int number){
struct list *temp, *p;
temp
= (struct list
*)malloc(sizeof(list
)); p = lst->next; /* сохранение указателя на следующий узел */
lst->next = temp; /* предыдущий узел указывает на создаваемый */
temp->data = number; /* сохранение поля данных добавляемого узла */
temp->next = p; /* созданный узел указывает на следующий элемент */
return temp;
}
void printlist(list *lst){
struct list *p;
p = lst;
do{
printf("%d ",p
->data
); /* вывод значения элемента p */ p = p->next; /* переход к следующему узлу */
}while(p != NULL);
}
void sort(list *root){
list *p, *key;
list *result = root;
root = root->next; /* Головой стал следующий элемент */
result->next = NULL; /* Первый элемент отсортированного списка */
while(root->next != NULL){
key = root;
root = root->next;
if(key->data < result->data){ /* Вставляем результат в голову */
key->next = result;
result = key;
}else{
p = result;
while(p->next != NULL){ /* Бежим по уже сформированному результату */
if(p->next->data > key->data)
break;
p = p->next;
}
key->next = p->next;
p->next = key;
}
}
root = result;
}
int main(void) {
int i;
list *temp, *root;
int a[10] = {7, 3, 2, 1, 0, 0, 0, 5, 9, 4};
root = create(0);
temp = root;
/* Заполняем список */
for(i = 0; i < 10; i++)
temp = addelem(temp, a[i]);
printlist(root);
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IGxpc3R7CglpbnQgZGF0YTsKCXN0cnVjdCBsaXN0ICpuZXh0Owp9IGxpc3Q7CgpzdHJ1Y3QgbGlzdCogY3JlYXRlKGludCBhKXsKCXN0cnVjdCBsaXN0ICpyb290OwoJcm9vdCA9IChzdHJ1Y3QgbGlzdCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdCkpOwoJcm9vdC0+ZGF0YSA9IGE7Cglyb290LT5uZXh0ID0gTlVMTDsKCXJldHVybiByb290Owp9CgpzdHJ1Y3QgbGlzdCogYWRkZWxlbShsaXN0ICpsc3QsIGludCBudW1iZXIpewoJc3RydWN0IGxpc3QgKnRlbXAsICpwOwoJdGVtcCA9IChzdHJ1Y3QgbGlzdCopbWFsbG9jKHNpemVvZihsaXN0KSk7CglwID0gbHN0LT5uZXh0OwkJCS8qINGB0L7RhdGA0LDQvdC10L3QuNC1INGD0LrQsNC30LDRgtC10LvRjyDQvdCwINGB0LvQtdC00YPRjtGJ0LjQuSDRg9C30LXQuyAqLwoJbHN0LT5uZXh0ID0gdGVtcDsJCS8qINC/0YDQtdC00YvQtNGD0YnQuNC5INGD0LfQtdC7INGD0LrQsNC30YvQstCw0LXRgiDQvdCwINGB0L7Qt9C00LDQstCw0LXQvNGL0LkgKi8KCXRlbXAtPmRhdGEgPSBudW1iZXI7CS8qINGB0L7RhdGA0LDQvdC10L3QuNC1INC/0L7Qu9GPINC00LDQvdC90YvRhSDQtNC+0LHQsNCy0LvRj9C10LzQvtCz0L4g0YPQt9C70LAgKi8KCXRlbXAtPm5leHQgPSBwOwkJCS8qINGB0L7Qt9C00LDQvdC90YvQuSDRg9C30LXQuyDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDRgdC70LXQtNGD0Y7RidC40Lkg0Y3Qu9C10LzQtdC90YIgKi8KCXJldHVybiB0ZW1wOwp9Cgp2b2lkIHByaW50bGlzdChsaXN0ICpsc3QpewoJc3RydWN0IGxpc3QgKnA7CglwID0gbHN0OwoJZG97CgkJcHJpbnRmKCIlZCAiLHAtPmRhdGEpOwkvKiDQstGL0LLQvtC0INC30L3QsNGH0LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCBwICovCgkJcCA9IHAtPm5leHQ7CQkJLyog0L/QtdGA0LXRhdC+0LQg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YPQt9C70YMgKi8KCX13aGlsZShwICE9IE5VTEwpOwp9Cgp2b2lkIHNvcnQobGlzdCAqcm9vdCl7CglsaXN0ICpwLCAqa2V5OwoJbGlzdCAqcmVzdWx0ID0gcm9vdDsKCXJvb3QgPSByb290LT5uZXh0OwkJLyog0JPQvtC70L7QstC+0Lkg0YHRgtCw0Lsg0YHQu9C10LTRg9GO0YnQuNC5INGN0LvQtdC80LXQvdGCICovCglyZXN1bHQtPm5leHQgPSBOVUxMOwkvKiDQn9C10YDQstGL0Lkg0Y3Qu9C10LzQtdC90YIg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC90L3QvtCz0L4g0YHQv9C40YHQutCwICovCgoJd2hpbGUocm9vdC0+bmV4dCAhPSBOVUxMKXsKCQlrZXkgPSByb290OwoJCXJvb3QgPSByb290LT5uZXh0OwoJCWlmKGtleS0+ZGF0YSA8IHJlc3VsdC0+ZGF0YSl7CS8qINCS0YHRgtCw0LLQu9GP0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0LIg0LPQvtC70L7QstGDICovCgkJCWtleS0+bmV4dCA9IHJlc3VsdDsKCQkJcmVzdWx0ID0ga2V5OwoJCX1lbHNlewoJCQlwID0gcmVzdWx0OwoJCQl3aGlsZShwLT5uZXh0ICE9IE5VTEwpewkJLyog0JHQtdC20LjQvCDQv9C+INGD0LbQtSDRgdGE0L7RgNC80LjRgNC+0LLQsNC90L3QvtC80YMg0YDQtdC30YPQu9GM0YLQsNGC0YMgKi8KCQkJCWlmKHAtPm5leHQtPmRhdGEgPiBrZXktPmRhdGEpCgkJCQkJYnJlYWs7CgkJCQlwID0gcC0+bmV4dDsKCQkJfQoJCQlrZXktPm5leHQgPSBwLT5uZXh0OwoJCQlwLT5uZXh0ID0ga2V5OwoJCX0KCX0KCXJvb3QgPSByZXN1bHQ7Cn0KCmludCBtYWluKHZvaWQpIHsKCWludCBpOwoJbGlzdCAqdGVtcCwgKnJvb3Q7CglpbnQgYVsxMF0gPSB7NywgMywgMiwgMSwgMCwgMCwgMCwgNSwgOSwgNH07CgkKCXJvb3QgPSBjcmVhdGUoMCk7Cgl0ZW1wID0gcm9vdDsKCS8qINCX0LDQv9C+0LvQvdGP0LXQvCDRgdC/0LjRgdC+0LogKi8KCWZvcihpID0gMDsgaSA8IDEwOyBpKyspCgkJdGVtcCA9IGFkZGVsZW0odGVtcCwgYVtpXSk7CglwcmludGxpc3Qocm9vdCk7CglyZXR1cm4gMDsKfQo=