Advertisement
Guest User

Untitled

a guest
Apr 27th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.85 KB | None | 0 0
  1. Zadanie 1
  2. Napisz program, który tworzy n elementową listę i ją wypisuje. Elementem listy jest struktura zawierająca dwa pola: liczbę całkowitą i wskaźnik do następnego elementu listy.
  3.  
  4. #include <iostream>
  5. using namespace std;
  6. struct element
  7. { int liczba;
  8. element * nast;
  9. } * pocz=NULL; //tworzenie listy pustej
  10. void wypiszList (element *p)
  11. {
  12. while(p)
  13. { cout<<p->liczba<<" ";
  14. p=p->nast;
  15. }
  16. }
  17. void wstawNaPoczatek(int x)
  18. //wstawia na początek listy element z wartością przekazaną w parametrze
  19. { element * p = new element;
  20. p->liczba = x;
  21. p->nast = pocz;
  22. pocz = p; //nowy początek listy
  23. }
  24. int main()
  25. { int n;
  26. element * pom;
  27. cout<<"Liczba elementow = "; cin>>n;
  28. for (int i=0; i<n; i++) wstawNaPoczatek(i);
  29. pom=pocz;
  30. wypiszList(pocz);
  31. return 0;
  32. }
  33.  
  34. Zadanie 2
  35. Napisz program, który z listy utworzonej w zadaniu1 k razy usuwa pierwszy element oraz następnie zlicza ilość pozostałych elementów listy.
  36.  
  37. #include <iostream>
  38. using namespace std;
  39. struct element
  40. { int liczba;
  41. element * nast;
  42. } * pocz=NULL; //tworzenie listy pustej
  43.  
  44. void wypiszList (element *p)
  45. {
  46. while(p)
  47. { cout<<p->liczba<<" ";
  48. p=p->nast;
  49. }
  50. }
  51.  
  52. unsigned suma(element *p)
  53. { unsigned c=0;
  54. while(p)
  55. { c++;
  56. p=p->nast;
  57. }
  58. return c;
  59. }
  60.  
  61. void wstawNaPoczatek(int x)
  62. //wstawia na początek listy element z wartością przekazaną w parametrze
  63. { element * p = new element;
  64. p->liczba = x;
  65. p->nast = pocz;
  66. pocz = p; //nowy początek listy
  67. }
  68.  
  69. void usunPierwszy()
  70. { element *p=pocz;
  71. if(p!=NULL) //jeśli pierwszy nie jest pusty
  72. { pocz = p->nast; //nowy poczatek
  73. delete p; //usun element z pamieci
  74. }
  75. }
  76. int main()
  77. { int n,k;
  78. element * pom;
  79. cout<<"Liczba elementow = "; cin>>n;
  80. for (int i=0; i<n; i++) wstawNaPoczatek(i);
  81. pom=pocz;
  82. wypiszList(pocz);
  83. cout<<endl<<"Ile elementow usunac="; cin>>k;
  84. for (int i=0;i<k;i++)
  85. usunPierwszy();
  86. wypiszList(pocz);
  87. pom=pocz;
  88. unsigned z=suma(pom);
  89. if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
  90. else cout<<"Lista jest pusta";
  91. return 0;
  92. }
  93.  
  94.  
  95.  
  96.  
  97.  
  98. Zadanie 3
  99. Napisz program, który z listy utworzonej w zadaniu1 k razy usuwa pierwszy element, następnie zlicza i wypisuje liczbę pozostałych elementów listy oraz usuwa całą listę
  100. Całość zadania:
  101. #include <iostream>
  102. using namespace std;
  103. struct element
  104. { int liczba;
  105. element * nast;
  106. } * pocz=NULL; //tworzenie listy pustej
  107.  
  108. void wypiszList ()
  109. { element * p=pocz;
  110. while(p)
  111. { cout<<p->liczba<<" ";
  112. p=p->nast;
  113. }
  114. }
  115. unsigned suma(element *p)
  116. { unsigned c=0;
  117. while(p)
  118. { c++;
  119. p=p->nast;
  120. }
  121. return c;
  122. }
  123. void wstawNaPoczatek(int x)
  124. //wstawia na początek listy element z wartością przekazaną w parametrze
  125. { element * p = new element;
  126. p->liczba = x;
  127. p->nast = pocz;
  128. pocz = p; //nowy początek listy
  129. }
  130. void usunPierwszy()
  131. { element *p=pocz;
  132. if(p!=NULL) //jeśli pierwszy nie jest pusty
  133. { pocz = p->nast; //nowy poczatek
  134. delete p; //usun element z pamieci
  135. }
  136. }
  137. void usunListe() //usuwa cala liste
  138. { element * p;
  139. while(pocz)
  140. {
  141. p=pocz; //zapamiętujemy wskaźnik na pierwszy element listy
  142. pocz=p->nast; //przesuwamy początek na następny element listy
  143. delete p; //usun element zapamiętany w zmiennej p
  144. } cout<<"Cala lista usunieta"<<endl;
  145. }
  146. int main()
  147. { int n,k;
  148. element * pom;
  149. //utworzenie listy n elementowej
  150. cout<<"Liczba elementow = "; cin>>n;
  151. for (int i=0; i<n; i++) wstawNaPoczatek(i);
  152. wypiszList();
  153. // usuniecie z listy k poczatkowych elementow
  154. cout<<endl<<"Ile elementow usunac="; cin>>k;
  155. for (int i=0;i<k;i++)
  156. usunPierwszy();
  157. wypiszList();
  158. //obliczenie liczby pozostałych elementow listy
  159. unsigned z=suma(pocz);
  160. if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
  161. else cout<<"Lista jest pusta"<<endl;
  162. //usuniecie całej listy
  163. usunListe();
  164. z=suma(pocz);
  165. if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
  166. else cout<<"Lista jest pusta"<<endl;
  167. return 0;
  168. }
  169.  
  170.  
  171.  
  172. Zadanie 4
  173. Napisz program, który utworzy n elementową listę (taką jak w zad.1) i usunie z niej k początkowych elementów, następnie doda nowy element na jej końcu oraz doda do tej listy drugi nowy element przed wskazanym elementem.
  174. Po każdej operacji należy wypisać listę. Zaimplementuj także wskaźnikową funkcję wyszukaj, która wyszuka element listy o zadanej wartości w polu liczba. Wynikiem funkcji wyszukaj ma być wskaźnik do tego elementu
  175. lub wskaźnik pusty (NULL) jeśli takiego elementu nie ma.
  176.  
  177. Rozwiązanie:
  178. //zad4
  179. #include <iostream>
  180. using namespace std;
  181. struct element
  182. { int liczba;
  183. element * nast;
  184. } * pocz=NULL; //tworzenie listy pustej
  185.  
  186. void wypiszList ()
  187. { element * p=pocz;
  188. while(p)
  189. { cout<<p->liczba<<" ";
  190. p=p->nast;
  191. }
  192. }
  193. void wstawNaPoczatek(int x)
  194. //wstawia na początek listy element z wartością przekazaną w parametrze
  195. { element * p = new element;
  196. p->liczba = x;
  197. p->nast = pocz;
  198. pocz = p; //nowy początek listy
  199. }
  200. void usunPierwszy()
  201. { element *p=pocz;
  202. if(p!=NULL) //jeśli pierwszy nie jest pusty
  203. { pocz = p->nast; //nowy poczatek
  204. delete p; //usun element z pamieci
  205. }
  206. }
  207. void usunListe() //usuwa cala liste
  208. { element * p;
  209. while(pocz)
  210. {
  211. p=pocz; //zapamiętujemy wskaźnik na pierwszy element listy
  212. pocz=p->nast; //przesuwamy początek na następny element listy
  213. delete p; //usun element zapamiętany w zmiennej p
  214. } cout<<"Cala lista usunieta"<<endl;
  215. }
  216. void dodajNaKoniec(int x)
  217. { element * p, * n;
  218. n=new element; //tworzymy nowy element
  219. n->nast=NULL; //będzie on ostatnim elementem listy
  220. n->liczba=x; //wstawiamy podaną wartość
  221. p=pocz;
  222. if(p!=NULL) //jeśli lista nie jest pusta
  223. { while(p->nast) p=p->nast;//szukamy końca listy
  224. p->nast=n; //wstawiamy utworzony element na końcu
  225. }
  226. else pocz=n; //lista była pusta
  227. }
  228. void dodajPrzedWskazanym(element * t,int x)
  229. { element * p=pocz;
  230. if (t==pocz) wstawNaPoczatek(x);
  231. else
  232. { while(p->nast != t) p=p->nast;
  233. p->nast=new element;
  234. p->nast->nast=t;
  235. p->nast->liczba=x;
  236. }
  237. }
  238.  
  239. element * wyszukaj(int x)
  240. { element * p = pocz;
  241. while(p!=NULL && p->liczba!=x)
  242. { p=p->nast;
  243. }
  244. return p;
  245. }
  246. int main()
  247. { int n,k,z;
  248. element * pom;
  249. //utworzenie listy n elementowej
  250. cout<<"Liczba elementow = "; cin>>n;
  251. for (int i=0; i<n; i++) wstawNaPoczatek(i);
  252. wypiszList();
  253. // usuniecie z listy k poczatkowych elementow
  254. cout<<endl<<"Ile elementow usunac z poczatku listy="; cin>>k;
  255. for (int i=0;i<k;i++)
  256. usunPierwszy();
  257. wypiszList();
  258. //dodanie nowego elementu na koniec listy
  259. cout<<endl<<"Jaka wartosc dodac na koncu listy ="; cin>>k;
  260. dodajNaKoniec(k);
  261. wypiszList();
  262. //dodanie nowego elementu listy przed wskazanym
  263. cout<<endl<<"Jaka wartosc dodac wewnatrz listy="; cin>>k;
  264. cout<<"Przed jaki element dodac="; cin>>z;
  265. pom=wyszukaj(z);
  266. if (pom) dodajPrzedWskazanym(pom,k);
  267. else cout<<"Nie ma elementu o wartosci "<<z<<endl;
  268. wypiszList();
  269. return 0;
  270. }
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279. Zadanie 5
  280. Napisz program, który utworzy n elementową listę (taką jak w zad.1) i usunie z niej k początkowych elementów, następnie usunie element znajdujący się na jej końcu.
  281.  
  282. //zad5
  283. #include <iostream>
  284. using namespace std;
  285. struct element
  286. { int liczba;
  287. element * nast;
  288. } * pocz=NULL; //tworzenie listy pustej
  289.  
  290. void wypiszList ()
  291. { element * p=pocz;
  292. while(p)
  293. { cout<<p->liczba<<" ";
  294. p=p->nast;
  295. }
  296. }
  297. void wstawNaPoczatek(int x)
  298. //wstawia na początek listy element z wartością przekazaną w parametrze
  299. { element * p = new element;
  300. p->liczba = x;
  301. p->nast = pocz;
  302. pocz = p; //nowy początek listy
  303. }
  304. void usunPierwszy()
  305. { element *p=pocz;
  306. if(p!=NULL) //jeśli pierwszy nie jest pusty
  307. { pocz = p->nast; //nowy poczatek
  308. delete p; //usun element z pamieci
  309. }
  310. }
  311. void usunOstatni()
  312. { element * p=pocz;
  313. if(p!=NULL)
  314. { if(p->nast)
  315. { while(p->nast->nast) p=p->nast;
  316. delete p->nast;
  317. p->nast=NULL;
  318. }
  319. else
  320. { delete p;
  321. pocz=NULL;
  322. }
  323. }
  324. }
  325.  
  326. int main()
  327. { int n,k,z;
  328. element * pom;
  329. //utworzenie listy n elementowej
  330. cout<<"Liczba elementow = "; cin>>n;
  331. for (int i=0; i<n; i++) wstawNaPoczatek(i);
  332. wypiszList();
  333. // usuniecie z listy k poczatkowych elementow
  334. cout<<endl<<"Ile elementow usunac z poczatku listy="; cin>>k;
  335. for (int i=0;i<k;i++)
  336. usunPierwszy();
  337. wypiszList();
  338. //usuniecie ostatniego elementu z listy
  339. cout<<endl<<"Usuniecie ostatniego elementu listy"<<endl; usunOstatni();
  340. wypiszList();
  341. return 0;
  342. }
  343.  
  344.  
  345.  
  346. //zad6
  347. #include <iostream>
  348. using namespace std;
  349.  
  350. struct element
  351. { int liczba;
  352. element * nast;
  353. } * pocz=NULL; //tworzenie listy pustej
  354.  
  355. void wypiszList ()
  356. { element * p=pocz;
  357. while(p)
  358. { cout<<p->liczba<<" ";
  359. p=p->nast;
  360. } cout<<endl;
  361. }
  362.  
  363. void wstawRosnaco(int x)
  364. {
  365. element * p=pocz, * pop=NULL;
  366. while(p!=NULL && p->liczba<x)
  367. { pop=p;
  368. p=p->nast;
  369. }
  370. element * temp=new element;
  371. temp->liczba=x;
  372. if (p==pocz)
  373. //jezeli lista jest pusta lub wstawiamy na poczatku
  374. { temp->nast=pocz;
  375. pocz=temp;
  376. }
  377. else //jesli wstawiamy w srodek lub na koniec
  378. { temp->nast=p;
  379. pop->nast=temp;
  380. }
  381. }
  382.  
  383. int main()
  384. { for (int i=10; i>=5; i--)
  385. { wstawRosnaco(2*i);}
  386. wypiszList();
  387. system("PAUSE");
  388. return 0;
  389. }
  390.  
  391.  
  392.  
  393. Zadanie 7
  394. Utwórz k elementową listę dwukierunkową dopisując nowe elementy na początku. Wypisz tę listę od początku i od końca.
  395.  
  396. //zad7
  397. #include <iostream>
  398. using namespace std;
  399.  
  400. struct element
  401. { int liczba;
  402. element * pop;
  403. element * nast;
  404. } * pocz = NULL, * koniec = NULL;
  405.  
  406. void wypiszOdPoczatku()
  407. { element * p=pocz;
  408. while(p)
  409. { cout<<p->liczba<<" ";
  410. p=p->nast;
  411. }
  412. }
  413.  
  414. void wypiszOdKonca()
  415. { element * p=koniec;
  416. while(p)
  417. { cout<<p->liczba<<" ";
  418. p=p->pop;
  419. }
  420. }
  421.  
  422. void wstawNaPoczatek(int x)
  423. { element * p = new element;
  424. p->liczba = x;
  425. p->pop = NULL;
  426. if (pocz==NULL)
  427. { p->nast = NULL;
  428. pocz = p;
  429. koniec = p;
  430. } else
  431. { pocz->pop = p;
  432. p->nast = pocz;
  433. pocz = p;
  434. }
  435. }
  436.  
  437. void wstawNaKoniec(int x)
  438. { element * p = new element;
  439. p->liczba = x;
  440. p->nast = NULL;
  441. if (koniec==NULL)
  442. { p->pop = NULL;
  443. pocz = p;
  444. koniec = p;
  445. } else
  446. { koniec->nast = p;
  447. p->pop = koniec;
  448. koniec = p;
  449. }
  450. }
  451.  
  452. int main()
  453. { int n;
  454. element * pom1, * pom2;
  455. cout<<"Liczba elementow = "; cin>>n;
  456. for (int i=0; i<n; i++)
  457. wstawNaPoczatek(i);
  458. cout<<endl<<"lista wypisana od poczatku"<<endl;
  459. wypiszOdPoczatku();
  460. cout<<endl<<"lista wypisana od konca"<<endl;
  461. wypiszOdKonca();
  462. return 0;
  463. }
  464.  
  465. Zadanie 8
  466. Utwórz k elementową listę dwukierunkową dopisując nowe elementy na końcu. Wypisz tę listę od początku i od końca.
  467.  
  468. //zad8
  469. #include <iostream>
  470. using namespace std;
  471. struct element
  472. { int liczba;
  473. element * pop;
  474. element * nast;
  475. } * pocz = NULL, * koniec = NULL;
  476.  
  477. void wypiszOdPoczatku()
  478. { element * p=pocz;
  479. while(p)
  480. { cout<<p->liczba<<" ";
  481. p=p->nast;
  482. }
  483. }
  484.  
  485. void wypiszOdKonca()
  486. { element * p=koniec;
  487. while(p)
  488. { cout<<p->liczba<<" ";
  489. p=p->pop;
  490. }
  491. }
  492.  
  493. void wstawNaPoczatek(int x)
  494. { element * p = new element;
  495. p->liczba = x;
  496. p->pop = NULL;
  497. if (pocz==NULL)
  498. { p->nast = NULL;
  499. pocz = p;
  500. koniec = p;
  501. } else
  502. { pocz->pop = p;
  503. p->nast = pocz;
  504. pocz = p;
  505. }
  506. }
  507.  
  508. void wstawNaKoniec(int x)
  509. { element * p = new element;
  510. p->liczba = x;
  511. p->nast = NULL;
  512. if (koniec==NULL)
  513. { p->pop = NULL;
  514. pocz = p;
  515. koniec = p;
  516. } else
  517. { koniec->nast = p;
  518. p->pop = koniec;
  519. koniec = p;
  520. }
  521. }
  522.  
  523. void wypiszOdPoczatku()
  524. { element * p=pocz;
  525. while(p)
  526. { cout<<p->liczba<<" ";
  527. p=p->nast;
  528. }
  529. }
  530.  
  531. void wypiszOdKonca()
  532. { element * p=koniec;
  533. while(p)
  534. { cout<<p->liczba<<" ";
  535. p=p->pop;
  536. }
  537. }
  538.  
  539. int main()
  540. { int n;
  541. element * pom1, * pom2;
  542. cout<<"Liczba elementow = "; cin>>n;
  543. for (int i=0; i<n; i++)
  544. wstawNaKoniec(2*i);
  545. cout<<endl<<"lista wypisana od poczatku"<<endl;
  546. wypiszOdPoczatku();
  547. cout<<endl<<"lista wypisana od konca"<<endl;
  548. wypiszOdKonca();
  549. return 0;
  550. }
  551.  
  552.  
  553. Zadanie 9
  554. Utwórz listę dwukierunkową składającą się z n elementów oraz usuń z niej element o wskazanej wartości pola klucza (pola liczba), a następnie usuń całą listę od początku lub od końca. Po każdej operacji wydrukuj listę od początku oraz od końca.
  555.  
  556.  
  557. //zad9
  558. #include <iostream>
  559. using namespace std;
  560. struct element
  561. { char liczba;
  562. element * pop;
  563. element * nast;
  564. } * pocz = NULL, * koniec = NULL;
  565. void wstawNaPoczatek(char x)
  566. { element * p = new element;
  567. p->liczba = x;
  568. p->pop = NULL;
  569. if (pocz==NULL)
  570. { p->nast = NULL;
  571. pocz = p;
  572. koniec = p;
  573. } else
  574. { pocz->pop = p;
  575. p->nast = pocz;
  576. pocz = p;
  577. }
  578. }
  579. void znajdzUsun(char x)
  580. { element *temp=pocz, *n, *p;
  581. while (temp)
  582. { if (temp->liczba==x)
  583. { if (temp->pop==NULL)
  584. { if (temp->nast==NULL)
  585. { pocz=NULL;
  586. koniec=NULL;
  587. } else
  588. { n=temp->nast;
  589. n->pop=temp->pop;
  590. pocz=n;
  591. }
  592. } else
  593. { if (temp->nast==NULL)
  594. { p=temp->pop;
  595. p->nast=temp->nast;
  596. koniec=temp->pop;
  597. } else
  598. { n=temp->nast;
  599. p=temp->pop;
  600. p->nast=temp->nast;
  601. n->pop=temp->pop;
  602. }
  603. }
  604. p=temp;
  605. temp=temp->nast;
  606. delete p;
  607. } else temp=temp->nast;
  608. }
  609. }
  610. void usunListe()
  611. //usuwanie listy od poczatku
  612. { element *p;
  613. while(koniec)
  614. { p=koniec;
  615. koniec=koniec->pop;
  616. delete p;
  617. }
  618. }
  619. void wypiszOdPoczatku()
  620. { element * p=pocz;
  621. while(p)
  622. { cout<<p->liczba<<" ";
  623. p=p->nast;
  624. }
  625. }
  626. int main()
  627. { int n; char k;
  628. element * pom1, * pom2;
  629. // cout<<"Liczba elementow = "; cin>>n;
  630. for (char k='a'; k<'z'; k++)
  631. wstawNaPoczatek(k);
  632. cout<<endl<<"lista wypisana od poczatku"<<endl;
  633. wypiszOdPoczatku();
  634. //usuniecie wybranego elementu listy
  635. cout<<endl<<"Ktory element usunac = "; cin>>k;
  636. znajdzUsun(k);
  637. cout<<endl<<"lista wypisana od poczatku"<<endl;
  638. wypiszOdPoczatku();
  639. cout<<endl<<"Lista w calosci usunieta"<<endl;
  640. usunListe();
  641. system("PAUSE");
  642. return 0;
  643. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement