fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct node node;
  5.  
  6. struct node {
  7. int data;
  8. node * next;
  9. };
  10.  
  11.  
  12. void initialize(node **first);
  13. int isEmpty(node *first);
  14. void push(node **first,int key);
  15. void pop(node **first);
  16. node *searchNode(node *first,int key);
  17. void reverse(node **first);
  18. void printNodes(node* first);
  19.  
  20. node *getTail(node *first);
  21. void tailins(node *r,node **first,node **last);
  22. node *sort(node *r,node **last);
  23.  
  24.  
  25. int main()
  26. {
  27. int key,ch;
  28. node *head, *tail, *found;
  29. initialize(&head);
  30. do {
  31. printf("0. Wyjscie \n");
  32. printf("1. Wstaw element na poczatek listy\n");
  33. printf("2. Usun element z poczatku listy\n");
  34. printf("3. Wyszukaj element listy \n");
  35. printf("4. Odwroc kolejnosc elementow listy\n");
  36. printf("5. Posortuj elementy listy \n");
  37. printf("6. Wypisz elementy listy \n");
  38. scanf("%d",&ch);
  39. switch(ch) {
  40. case 0: {
  41. while(!isEmpty(head)) {
  42. pop(&head);
  43. }
  44. break;
  45. }
  46. case 1: {
  47. printf("Podaj element jaki chcesz wstawic \n");
  48. scanf("%d",&key);
  49. push(&head,key);
  50. break;
  51. }
  52. case 2: {
  53. pop(&head);
  54. break;
  55. }
  56. case 3: {
  57. printf("Podaj element jaki chcesz wyszukac \n");
  58. scanf("%d",&key);
  59. found = searchNode(head,key);
  60. if(found == NULL)
  61. printf("Elementu %d nie znaleziono na liscie\n",key);
  62. else
  63. printf("Element %d znaleziono na liscie\n",key);
  64. break;
  65. }
  66. case 4: {
  67. reverse(&head);
  68. break;
  69. }
  70. case 5: {
  71. tail = getTail(head);
  72. head = sort(head,&tail);
  73. break;
  74. }
  75. case 6: {
  76. printNodes(head);
  77. break;
  78. }
  79. default:
  80. printf("Brak operacji wybierz inny numer");
  81. }
  82. } while(ch != 0);
  83. return 0;
  84. }
  85.  
  86. void initialize(node **first)
  87. {
  88. (*first) = NULL;
  89. }
  90.  
  91. int isEmpty(node *first)
  92. {
  93. return first == NULL;
  94. }
  95.  
  96. void push(node **first,int key)
  97. {
  98. node * x = (node *)malloc(sizeof(node));
  99. x->data = key;
  100.  
  101. x->next = (*first);
  102. (*first) = x;
  103.  
  104. }
  105.  
  106. void pop(node **first)
  107. {
  108. node *x;
  109. if((*first) != NULL) {
  110. x = (*first);
  111. (*first) = x->next;
  112. free(x);
  113. }
  114. }
  115.  
  116. node *searchNode(node *first,int key)
  117. {
  118. node *x = first;
  119. while(x != NULL && x->data != key)
  120. x = x->next;
  121. return x;
  122. }
  123.  
  124. void reverse(node **first)
  125. {
  126. node *p, *q, *r;
  127.  
  128. p = NULL;
  129. q = (*first);
  130. while(q != NULL) {
  131. r = q->next;
  132. q->next = p;
  133. p = q;
  134. q = r;
  135. }
  136. (*first) = p;
  137. }
  138.  
  139. void printNodes(node* first)
  140. {
  141. node *x = first;
  142. int counter = 0;
  143. while(x != NULL) {
  144. printf("%d -> ",x->data);
  145. x = x->next;
  146. counter++;
  147. }
  148. printf("NULL\n");
  149. printf("Liczba elementow listy : %d\n",counter);
  150. }
  151.  
  152. node *getTail(node *first)
  153. {
  154. node *x;
  155. if(first == NULL) {
  156. x = NULL;
  157. } else {
  158. x = first;
  159. while(x->next != NULL) {
  160. x = x->next;
  161. }
  162. }
  163. return x;
  164. }
  165.  
  166. void tailins(node *r,node **first,node **last)
  167. {
  168. if((*first) == NULL)
  169. (*first) = r;
  170. else
  171. (*last)->next = r;
  172. (*last) = r;
  173. }
  174.  
  175. node *sort(node *r,node **last)
  176. {
  177. node *result;
  178. node *lowf,*lowl,*midf,*midl,*highf,*highl;
  179. if(r == NULL) {
  180. (*last) = NULL;
  181. result = r;
  182. } else {
  183. lowf = NULL;
  184. midf = NULL;
  185. highf = NULL;
  186.  
  187. tailins(r,&midf,&midl);
  188. r = r->next;
  189. while(r != NULL) {
  190. if(r->data < midf->data)
  191. tailins(r,&lowf,&lowl);
  192. else if(r->data == midf->data)
  193. tailins(r,&midf,&midl);
  194. else
  195. tailins(r,&highf,&highl);
  196. r = r->next;
  197. }
  198. if(lowf != NULL) {
  199. lowl->next = NULL;
  200. result = sort(lowf,last);
  201. (*last)->next = midf;
  202. } else
  203. result = midf;
  204. if(highf != NULL)
  205. highl->next = NULL;
  206. midl->next = sort(highf,last);
  207. if((*last)==NULL)
  208. (*last) = midl;
  209. }
  210. return result;
  211. }
  212.  
Success #stdin #stdout 0s 4540KB
stdin
1
17
1
89
1
27
1
89
1
67
1
75
1
45
1
37
1
54
6
5
6
0
stdout
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
Podaj element jaki chcesz wstawic 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
54 -> 37 -> 45 -> 75 -> 67 -> 89 -> 27 -> 89 -> 17 -> NULL
Liczba elementow listy : 9
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy 
17 -> 27 -> 37 -> 45 -> 54 -> 67 -> 75 -> 89 -> 89 -> NULL
Liczba elementow listy : 9
0. Wyjscie 
1. Wstaw element  na poczatek listy
2. Usun element z poczatku listy
3. Wyszukaj element listy 
4. Odwroc kolejnosc elementow listy
5. Posortuj elementy listy 
6. Wypisz elementy listy