fork(3) download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct list{
  5. int data;
  6. struct list *next;
  7. } list;
  8.  
  9. struct list* create(int a){
  10. struct list *root;
  11. root = (struct list*)malloc(sizeof(struct list));
  12. root->data = a;
  13. root->next = NULL;
  14. return root;
  15. }
  16.  
  17. struct list* addelem(list *lst, int number){
  18. struct list *temp, *p;
  19. temp = (struct list*)malloc(sizeof(list));
  20. p = lst->next; /* сохранение указателя на следующий узел */
  21. lst->next = temp; /* предыдущий узел указывает на создаваемый */
  22. temp->data = number; /* сохранение поля данных добавляемого узла */
  23. temp->next = p; /* созданный узел указывает на следующий элемент */
  24. return temp;
  25. }
  26.  
  27. void printlist(list *lst){
  28. struct list *p;
  29. p = lst;
  30. do{
  31. printf("%d ",p->data); /* вывод значения элемента p */
  32. p = p->next; /* переход к следующему узлу */
  33. }while(p != NULL);
  34. }
  35.  
  36. void sort(list *root){
  37. list *p, *key;
  38. list *result = root;
  39. root = root->next; /* Головой стал следующий элемент */
  40. result->next = NULL; /* Первый элемент отсортированного списка */
  41.  
  42. while(root->next != NULL){
  43. key = root;
  44. root = root->next;
  45. if(key->data < result->data){ /* Вставляем результат в голову */
  46. key->next = result;
  47. result = key;
  48. }else{
  49. p = result;
  50. while(p->next != NULL){ /* Бежим по уже сформированному результату */
  51. if(p->next->data > key->data)
  52. break;
  53. p = p->next;
  54. }
  55. key->next = p->next;
  56. p->next = key;
  57. }
  58. }
  59. root = result;
  60. }
  61.  
  62. int main(void) {
  63. int i;
  64. list *temp, *root;
  65. int a[10] = {7, 3, 2, 1, 0, 0, 0, 5, 9, 4};
  66.  
  67. root = create(0);
  68. temp = root;
  69. /* Заполняем список */
  70. for(i = 0; i < 10; i++)
  71. temp = addelem(temp, a[i]);
  72. printlist(root);
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0s 2292KB
stdin
Standard input is empty
stdout
0 7 3 2 1 0 0 0 5 9 4