Advertisement
MrEfendi

ATH AISD cz2

Jan 18th, 2016
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.83 KB | None | 0 0
  1.  
  2. #include<iostream>
  3. #include <conio.h>
  4. #include<string>
  5. #include<iomanip>
  6. using namespace std;
  7.  
  8.  
  9. struct dane {
  10.     string nazwisko;
  11.     string imie;
  12.     int wynik;
  13. };
  14. typedef struct rob {
  15.     dane element;
  16.     struct rob * nastepny;
  17. } elem;
  18. typedef struct {
  19.     elem * glowa;
  20.     elem * ogon;
  21. } wskaznik;
  22. wskaznik wsk;
  23.  
  24.  
  25. void podaj_dane(dane  & element)
  26.  
  27. {
  28.     cout <<"podaj nazwisko ";
  29.     cin >> element.nazwisko;
  30.     cout << "\n";
  31.     cout << "podaj imie ";
  32.     cin >> element.imie;
  33.     cout << "\n";
  34.     cout << "podaj wynik ";
  35.     cin >> element.wynik;
  36.     cout << "\n";
  37. }
  38. void wypisz_dane(dane element)
  39.  
  40. {
  41.     cout <<left<< setw( 12)<<element.nazwisko;
  42.     cout << "\t";
  43.     cout << left<< setw( 10)<<element.imie;
  44.     cout << "\t";
  45.     cout << element.wynik;
  46.     cout << "\n";
  47. }
  48. void doloz_do_listy( dane element) {
  49.     dane el;
  50.     podaj_dane( el);
  51.     elem  * q=new(elem);
  52.     q->element=el;
  53.     q->nastepny=NULL;
  54.     if (wsk.glowa==NULL) wsk.glowa=wsk.ogon=q;
  55.     else {
  56.         wsk.ogon->nastepny=q;
  57.         wsk.ogon=q;
  58.     }
  59. }
  60. void wstaw_do_kolejki( dane element) {
  61.     dane el;
  62.     podaj_dane( el);
  63.     elem  * q=new(elem);
  64.     q->element=el;
  65.     q->nastepny=NULL;
  66.     if (wsk.glowa==NULL) wsk.glowa=wsk.ogon=q;
  67.     else {
  68.         wsk.ogon->nastepny=q;
  69.         wsk.ogon=q;
  70.     }
  71. }
  72.  
  73. void poloz_na_stos( dane & element) {
  74.     dane el;
  75.     elem  *p;
  76.     p=wsk.glowa;
  77.     podaj_dane( el);
  78.     elem  * q=new(elem);
  79.     if(wsk.glowa==NULL)wsk.glowa=wsk.ogon=q;
  80.     q->element=el;
  81.     q->nastepny=p;
  82.     wsk.glowa=q;
  83. }
  84.  
  85. void zdejmij_ze_stosu( dane & element) {
  86.     elem  * q;
  87.     dane el;
  88.     el=wsk.glowa->element;
  89.     q=wsk.glowa;
  90.     wsk.glowa=q->nastepny;
  91.     delete(q);
  92.     cout<<"zdjeto ze stosu "<<"\n";
  93.     wypisz_dane(el);
  94. }
  95. void usun_z_kolejki( dane & element) {
  96.     elem  * q, * p;
  97.     dane el;
  98.     el=wsk.glowa->element;
  99.     p=wsk.glowa->nastepny;
  100.     q=wsk.glowa;
  101.     wsk.glowa=p;
  102.     delete(q);
  103.     cout<<"usunieto z kolejki "<<"\n";
  104.     wypisz_dane(el);
  105. }
  106. void wypisz_liste() {
  107.     dane el;
  108.     elem  * q=wsk.glowa;
  109.     cout << "oto aktualny stan"<<"\n";
  110.     if (wsk.glowa==NULL) cout << "lista pusta"<<"\n";
  111.     else
  112.         while(q!=NULL) {
  113.             el=q->element;
  114.             wypisz_dane(el);
  115.             q=q->nastepny;
  116.         }
  117. }
  118. int oblicz_rozmiar() {
  119.     int roz=0;
  120.     elem * q=wsk.glowa;
  121.     if (wsk.glowa==NULL) roz=0;
  122.     else
  123.         while (q!=NULL) {
  124.             roz=roz+1;
  125.             q=q->nastepny;
  126.         }
  127.     return roz;
  128. }
  129. void wstaw_do_listy_za() {
  130.     int k;
  131.     do {
  132.         cout<<"podaj nr elementu za który wstawic element"<<"\n";
  133.         cin >>k;
  134.     } while(oblicz_rozmiar()<k);
  135.     dane el;
  136.     podaj_dane(el);
  137.     int j=0;
  138.     elem * q=new(elem);
  139.     elem * p=wsk.glowa;
  140.     q->element=el;
  141.     if (oblicz_rozmiar()==0) {
  142.         wsk.glowa=q;
  143.         wsk.ogon=q;
  144.         q->nastepny=NULL;
  145.     } else {
  146.         if (k==1) {
  147.             q->nastepny=p->nastepny;
  148.             p->nastepny=q;
  149.         } else if ((oblicz_rozmiar()==k) && (k!=0)) {
  150.             p=wsk.ogon;
  151.             p->nastepny=q;
  152.             q->nastepny=NULL;
  153.             wsk.ogon=q;
  154.         } else {
  155.             p=wsk.glowa;
  156.             j=2;
  157.             p=p->nastepny;
  158.             while (j<k) {
  159.                 j=j+1;
  160.                 p=p->nastepny;
  161.             }
  162.             q->nastepny=p->nastepny;
  163.             p->nastepny=q;
  164.         }
  165.     }
  166. }
  167.  
  168.  
  169. void wstaw_do_listy_kolejny() {
  170.     dane el;
  171.     podaj_dane(el);
  172.     elem *q=new(elem);
  173.     q->element=el;
  174.     if (wsk.glowa==NULL) {
  175.         wsk.glowa=wsk.ogon=q;
  176.         q->nastepny=NULL;
  177.     } else {
  178.         elem *przed=NULL,*po=wsk.glowa;
  179.         enum {SZUKAJ,ZAKONCZ} stan=SZUKAJ;
  180.         while ((stan==SZUKAJ) && (po!=NULL))
  181.             if (po->element.wynik>=el.wynik)
  182.                 stan=ZAKONCZ;
  183.             else {
  184.                 przed=po;
  185.                 po=po->nastepny;
  186.             }
  187.         if (przed==NULL) {
  188.             wsk.glowa=q;
  189.             q->nastepny=po;
  190.         } else if (po==NULL) {
  191.             wsk.ogon->nastepny=q;
  192.             q->nastepny=NULL;
  193.             wsk.ogon=q;
  194.         } else {
  195.             przed->nastepny=q;
  196.             q->nastepny=po;
  197.         }
  198.     }
  199. }
  200.  
  201. void wstaw_do_listy_na_koniec() { // dolaczamy rekord na koniec listy
  202.     dane el;
  203.  
  204.     elem *q=new(elem);
  205.     podaj_dane(el);
  206.     q->element=el;
  207.     q->nastepny=NULL;
  208.  
  209.     if (wsk.glowa==NULL)       // lista pusta
  210.         wsk.glowa=wsk.ogon=q;
  211.     else {               // coœ jest w liscie
  212.         (wsk.ogon)->nastepny=q;
  213.         wsk.ogon=q;
  214.     }
  215. }
  216.  
  217. void usun_z_listy_pierwszy( dane & element) {
  218.     elem  * q, * p;
  219.     dane el;
  220.     el=wsk.glowa->element;
  221.     p=wsk.glowa->nastepny;
  222.     q=wsk.glowa;
  223.     wsk.glowa=p;
  224.     delete(q);
  225.     cout<<"usunieto z listy "<<"\n";
  226.     wypisz_dane(el);
  227. }
  228.  
  229.  
  230.  
  231.  
  232. void wypisz_opcje_menu_stosu() {
  233.     cout<<"Opcje stosu \n";
  234.     cout<<"1.Poloz na stos element \n";
  235.     cout<<"2.Zdejmij ze stosu element \n";
  236.     cout<<"3.Wypisz stos \n";
  237.     cout<<"4.Oblicz rozmiar stosu \n";
  238.     cout<<"5.Wyjscie \n";
  239. }
  240. void wypisz_opcje_menu_kolejki() {
  241.     cout<<"Opcje stosu \n";
  242.     cout<<"1.Dolacz dokolejki element \n";
  243.     cout<<"2.Usun z kolejki element \n";
  244.     cout<<"3.Wypisz kolejke \n";
  245.     cout<<"4.Oblicz rozmiar kolejki \n";
  246.     cout<<"5.Wyjscie \n";
  247. }
  248.  
  249.  
  250. void wypisz_opcje_menu_lista() {
  251.     cout<<"Opcje listy \n";
  252.     cout<<"1.Dolacz do listy element na koniec \n";
  253.     cout<<"2.Usun z listy element pierwszy \n";
  254.     cout<<"3.Wypisz liste \n";
  255.     cout<<"4.Oblicz rozmiar listy \n";
  256.     cout<<"5. Wstaw do listy za\n";
  257.     cout<<"6. Wstaw do listy w kolejnoœci wyniku \n";
  258.     cout<<"7.Wyjscie \n";
  259. }
  260. void wypisz_opcje_menu() {
  261.     cout<<"Struktury listowe \n";
  262.     cout<<"1.Stosy \n";
  263.     cout<<"2.Kolejki \n";
  264.     cout<<"3.Listy \n";
  265.     cout<<"4.koniec \n";
  266. }
  267. int main() {
  268.     int k,n,opc;
  269.     wskaznik wsk;
  270.     dane element;
  271.     char opcja;
  272.     bool koniec=true;
  273.     while(1) {
  274.         koniec=true;
  275.         wypisz_opcje_menu();
  276.  
  277.         cin>>opc;
  278.  
  279.         switch(opc) {
  280.  
  281.         case 1:
  282.             while(koniec)
  283.  
  284.             {
  285.                 wypisz_opcje_menu_stosu();
  286.                 cin>>opcja;
  287.                 switch(opcja) {
  288.                 case '1':
  289.                     cout<<"Podaj liczbe elemantow \n";
  290.                     cin>>n;
  291.                     for (int i=1; i<=n; i++) poloz_na_stos(element);
  292.                     break;
  293.                 case '2':
  294.                     zdejmij_ze_stosu(element);
  295.                     break;
  296.  
  297.                 case '3':
  298.                     wypisz_liste();
  299.                     break;
  300.                 case '4':
  301.                     cout<<"rozmiar stosu "<<oblicz_rozmiar()<<" \n";
  302.                     break;
  303.  
  304.                 case '5':
  305.                     koniec=false;
  306.                     break;
  307.                 }
  308.  
  309.             }
  310.  
  311.             break;
  312.  
  313.         case 2:
  314.             while(koniec) {
  315.                 wypisz_opcje_menu_kolejki();
  316.                 cin>>opcja;
  317.                 switch(opcja) {
  318.                 case '1':
  319.                     cout<<"Podaj liczbe elemantow \n";
  320.                     cin>>n;
  321.                     for (int i=1; i<=n; i++) wstaw_do_kolejki(element);
  322.                     break;
  323.                 case '2':
  324.                     usun_z_kolejki(element);
  325.                     break;
  326.  
  327.                 case '3':
  328.                     wypisz_liste();
  329.                     break;
  330.                 case '4':
  331.                     cout<<"rozmiar kolejki "<<oblicz_rozmiar()<<" \n";
  332.                     break;
  333.  
  334.                 case '5':
  335.                     koniec=false;
  336.                     break;
  337.                 }
  338.             }
  339.             break;
  340.         case 3:
  341.             while(koniec) {
  342.                 wypisz_opcje_menu_lista();
  343.                 cin>>opcja;
  344.                 switch(opcja) {
  345.                 case '1':
  346.                     cout<<"Podaj liczbe elemantow \n";
  347.                     cin>>n;
  348.                     for (int i=1; i<=n; i++) wstaw_do_listy_na_koniec();
  349.                     break;
  350.                 case '2':
  351.                     usun_z_listy_pierwszy(element);
  352.                     break;
  353.  
  354.                 case '3':
  355.                     wypisz_liste();
  356.                     break;
  357.                 case '4':
  358.                     cout<<"rozmiar kolejki "<<oblicz_rozmiar()<<" \n";
  359.                     break;
  360.                 case '5':
  361.                     wstaw_do_listy_za();
  362.                     break;
  363.                 case '6':
  364.                     wstaw_do_listy_kolejny();
  365.                     break;
  366.  
  367.                 case '7':
  368.                     koniec=false;
  369.                     break;
  370.                 }
  371.             }
  372.             break;
  373.         case 4:
  374.             return 0;
  375.  
  376.  
  377.         }
  378.  
  379.  
  380.     }
  381. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement