Advertisement
adwas33

Untitled

May 7th, 2022
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. struct Node {
  5. int val;
  6. Node * next;
  7.  
  8. };
  9.  
  10. void add(Node *& H,int value)
  11. {
  12. Node * p= new Node;
  13. p-> val=value;
  14. p->next=H;
  15. H=p;
  16.  
  17. }
  18. void deleteFirst(Node *&H)
  19. {
  20. if(H!= nullptr)
  21. {
  22. Node *p=H;
  23. H=H->next;
  24. delete p;
  25. }
  26. }
  27. void addNodeToEnd(Node *&head,Node *& tail , Node * e )
  28. {
  29. e->next= nullptr;
  30. if(head== nullptr)
  31. {
  32. head=e;
  33. tail=e;
  34. } else
  35. {
  36. tail->next=e;
  37. tail=e;
  38. }
  39.  
  40. }
  41. void swap(Node *& h)
  42. {
  43. if(h!= nullptr&&h->next!= nullptr)
  44. {
  45. Node *p=h;
  46. h=p->next;
  47. p->next=h->next;
  48. h->next=p;
  49. }
  50. }
  51. void show_list_rek(Node * H)
  52. {
  53. if(H!= nullptr)
  54. {
  55. cout<<H->val<<"->";
  56. if(H->next!= nullptr)
  57. show_list_rek(H->next);
  58. else cout<<"nullptr";
  59. }
  60. }
  61. void reverse(Node *&h)
  62. {
  63. if(h!= nullptr)
  64. {
  65. Node* p=h;
  66. Node *h2= nullptr;
  67. while(p!= nullptr)
  68. {
  69. add(h2,p->val);
  70. p=p->next;
  71. }
  72. h=h2;
  73.  
  74. }
  75. }
  76.  
  77. void deleteAllWithOutMax(Node *&head) // OK działa dla wszystkich przypadków
  78. {
  79. if(head)
  80. {
  81. int max=head->val;
  82. Node* p=head;
  83. while(p)
  84. {
  85. if(p->val>max)
  86. {
  87. max=p->val;
  88. }
  89. p=p->next;
  90. }
  91. Node* biggest= nullptr;
  92. add(biggest,max);
  93. head=biggest;
  94.  
  95. }
  96. }
  97.  
  98.  
  99.  
  100. //void avarage(Node *&head)
  101. //{
  102. // if(head)
  103. // {
  104. // int sum=0;
  105. // int counter=0;
  106. // Node *p=head;
  107. // while(p)
  108. // {
  109. // sum+=p->val;
  110. // counter++;
  111. // p=p->next;
  112. // }
  113. // long double avearage = sum/counter;
  114. // Node * iterator= head;
  115. // Node *resoult= nullptr;
  116. // Node *tail= nullptr;
  117. // while (iterator)
  118. // {
  119. // if(iterator->val<avearage)
  120. // {
  121. // int value = iterator->val;
  122. // add(resoult,value);
  123. // deleteFirst(iterator);
  124. // iterator=iterator->next;
  125. // }
  126. //
  127. // iterator=iterator->next;
  128. // }
  129. // }
  130. //}
  131. void avarage(Node *&head)
  132. {
  133. int sum=0;
  134. int counter=0;
  135. Node *p=head;
  136. while(p)
  137. {
  138. sum+=p->val;
  139. counter++;
  140. p=p->next;
  141. }
  142. long double avarage = sum/counter;
  143. Node * below= nullptr;
  144. Node * above= nullptr;
  145. Node * iterator= head;
  146. while(iterator)
  147. {
  148. if(iterator->val<avarage)
  149. {
  150. add(below,iterator->val);
  151.  
  152. }else add(above,iterator->val);
  153. iterator=iterator->next;
  154. }
  155. reverse(below);
  156. while(above)
  157. {
  158. add(below,above->val);
  159. above=above->next;
  160. }
  161.  
  162. head=below;
  163.  
  164. }
  165.  
  166. void checkByPair(Node *&head)// test 1 -OK dane wejściowe K ? OK
  167. {
  168. if(head&&head->next)
  169. {
  170. Node *p=head;
  171. Node *pnext=head->next;
  172. Node *resoult= nullptr;
  173. while(p->next&&pnext->next)
  174. {
  175. if(p->val+pnext->val<0)
  176. {
  177. add(resoult,p->val);
  178. add(resoult,pnext->val);
  179. add(resoult,p->val);
  180. add(resoult,pnext->val);
  181. } else if(p->val+p->next->val>0)
  182. {
  183.  
  184. } else {
  185. add(resoult,p->val);
  186. add(resoult,pnext->val);
  187. }
  188. p=p->next->next;
  189. pnext=pnext->next->next;
  190. }
  191. if(p== nullptr)
  192. {
  193. head=resoult;
  194. }else
  195. {
  196. add(resoult,p->val);
  197. head=resoult;
  198. }
  199.  
  200.  
  201. }
  202. }
  203.  
  204.  
  205. void insert(Node *&head,int val) // nie skonczona
  206. {
  207. if(head)
  208. {
  209. Node *p=head;
  210.  
  211. while(p&&p->next&&p->val<val){
  212. p=p->next;
  213. }
  214. if(p->next== nullptr)
  215. {
  216. Node *e=new Node();
  217. e->val=val;
  218. addNodeToEnd(head,p,e);
  219.  
  220.  
  221. }else{
  222. // tutaj dodać element w środku ;
  223. Node *e=new Node();
  224. e->val=val;
  225. e->next=p->next->next;
  226. p->next=e;
  227.  
  228.  
  229.  
  230. }
  231.  
  232.  
  233. }else add(head,val);
  234. }
  235.  
  236. void split (Node *& head,Node *& min,Node *&max,int x)
  237. {
  238.  
  239. Node * p=head;
  240. while(p)
  241. {
  242. if(p->val<x)
  243. {
  244. add(min,p->val);
  245. }else if(p->val>=x) {
  246. add(max,p->val);
  247. }
  248. deleteFirst(p);
  249. }
  250. head= nullptr;
  251.  
  252.  
  253. }
  254.  
  255.  
  256.  
  257.  
  258.  
  259. int main()
  260. {
  261. Node * head= nullptr;
  262. for(int i =7;i>-5;i-=2)
  263. {
  264. add(head,i);
  265. }
  266. show_list_rek(head);
  267. cout<<endl;
  268. show_list_rek(head);
  269. checkByPair(head);
  270. cout<<endl;
  271. show_list_rek(head);
  272. Node *zadanie2= nullptr;
  273. add(zadanie2,3);
  274. add(zadanie2,1);
  275. add(zadanie2,-8);
  276. add(zadanie2,7);
  277. add(zadanie2,3);
  278. add(zadanie2,2);
  279. add(zadanie2,-5);
  280. add(zadanie2,5);
  281. add(zadanie2,1);
  282.  
  283. checkByPair(zadanie2);
  284. cout<<endl;
  285. show_list_rek(zadanie2);
  286. cout<<endl;
  287.  
  288.  
  289.  
  290. Node * zadanie3= nullptr;
  291. add(zadanie3,7);
  292. add(zadanie3,8);
  293. add(zadanie3,2);
  294. add(zadanie3,23);
  295. add(zadanie3,7);
  296. add(zadanie3,3);
  297. avarage(zadanie3);
  298. show_list_rek(zadanie3);
  299. cout<<endl;
  300.  
  301. Node * tab1= nullptr;
  302. Node *tab2= nullptr;
  303. Node *glowna=nullptr;
  304. add(glowna,2);
  305. add(glowna,3);
  306. add(glowna,6);
  307. add(glowna,7);
  308. add(glowna,8);
  309. split(glowna,tab1,tab2,5);
  310. show_list_rek(glowna);
  311. cout<<endl;
  312. show_list_rek(tab1);
  313. cout<<endl;
  314. show_list_rek(tab2);
  315. cout<<endl;
  316.  
  317. Node * tablica= nullptr;
  318. insert(tablica,3);
  319. insert(tablica,5);
  320. insert(tablica,2);
  321. show_list_rek(tablica);
  322.  
  323.  
  324.  
  325.  
  326.  
  327. return 0;
  328. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement