Guest User

Untitled

a guest
May 20th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <windows.h>
  5. using namespace std;
  6.  
  7. struct element{
  8.     element *next, *prev;
  9.     int value;    
  10.     element(){
  11.         value=0;
  12.         next=prev=0;
  13.         }
  14.     ~element(){
  15.         }
  16.     };
  17.    
  18. struct lista{
  19.     element *head;
  20.     element *tail;
  21.     lista(){
  22.         head=tail=0;
  23.         }
  24.     ~lista() {
  25.         }
  26.     element *addHead(int a);
  27.     element *add(element *previous, int a);
  28.     void showList();
  29.     void showElement(int a);
  30.     void delElement(int a);
  31.     void changeElement(int a, int b);
  32.     bool ifExist(int a);
  33.     };
  34.  
  35. element *lista::add(element *previous, int a) {
  36.     element *x=new element;
  37.     x->value=a;
  38.     x->next=previous->next;
  39.     previous->next=x;
  40.     x->prev=previous;
  41.     if(x->next){
  42.         x->next->prev=x;
  43.         } else {
  44.         tail=x;
  45.         }
  46.     return x;
  47.     }
  48.    
  49. element *lista::addHead(int a){
  50.     element *x=new element;
  51.     x->value=a;
  52.     x->next=head;
  53.     head=x;
  54.     if(head) head->prev=x;
  55.     x=head;
  56.     //x=x->next;
  57.     return x;
  58.     }
  59.  
  60. void lista::showList(){
  61.     element *tmp=head;
  62.     int i=0;
  63.     while(tmp){
  64.         cout<<tmp->value<<" ";
  65.         tmp=tmp->next;
  66.         i++;
  67.     }
  68.     cout<<endl;
  69.     if(i==0) cout<<"Lista nie posiada elementow/nie istnieje."<<endl;
  70.     if(i==1) cout<<"Lista posiada 1 element."<<endl;
  71.     if(i>=2&&i<=4) cout<<"Lista posiada "<<i<<" elementy."<<endl;
  72.     if(i>4) cout<<"Lista posiada "<<i<<" elementow."<<endl;
  73.     tmp=head;
  74.     }
  75.    
  76. bool lista::ifExist(int a){
  77.     element *tmp=head;
  78.     int j=0;
  79.     if(a==0&&tmp) return true;
  80.     else if(a==0&&!tmp) return false;
  81.     tmp=head;
  82.     if(a!=0){    
  83.         while(tmp){
  84.             tmp=tmp->next;
  85.             j++;
  86.         }
  87.         if(j-1==a||j-1>a) return true;
  88.         else if(j-1!=a||j-1<a) return false;
  89.     }
  90. }
  91.  
  92. void lista::showElement(int a){
  93.     element *tmp=head;
  94.     int i;
  95.     bool er;    
  96.  
  97.     er=ifExist(a);
  98.    
  99.     if(er){
  100.         switch(a){
  101.             case 0:
  102.                 cout<<tmp->value;
  103.                 er=true;
  104.                 break;
  105.             default:
  106.                 for(i=0; i<a; i++) { tmp=tmp->next; }
  107.                 cout<<tmp->value; }
  108.  
  109.     } else { cout<<"Podany element nie istnieje"<<endl; }
  110. }
  111.    
  112. void lista::delElement(int a){
  113.     element *tmp=head;
  114.     int i,t; bool er;
  115.     er=ifExist(a);
  116.     if(er){
  117.         for(i=0; i<a; i++) tmp=tmp->next;
  118.        
  119.         if(a==0){
  120.             tmp->prev=head;
  121.             head=0;
  122.         } else {
  123.             while(tmp->next){
  124.                 tmp=tmp->next;
  125.                 t=tmp->value;
  126.                 tmp=tmp->prev;
  127.                 tmp->value=t;
  128.                 tmp=tmp->next;
  129.             }
  130.         }
  131.        
  132.     } else {
  133.         cout<<"Podany element nie istnieje!"<<endl;
  134.         }
  135.     }
  136.    
  137. void lista::changeElement(int a, int b){
  138.  element *tmp=head;
  139.  element *ta;
  140.  bool er1, er2;
  141.  int i, t=0;
  142.  if(a==b) return;
  143.  if(a>b){
  144.     t=a;
  145.     a=b;
  146.     b=t;
  147.     }
  148.  er1=ifExist(a);
  149.  er2=ifExist(b);
  150.  if(er1&&er2){
  151.         for(i=0; i<a; i++) { tmp=tmp->next; }
  152.         t=tmp->value;
  153.         ta=tmp;
  154.         for(i=a; i<b; i++) { tmp=tmp->next; }
  155.         ta->value=tmp->value;
  156.         tmp->value=t;
  157.     } else {
  158.         cout<<"Jeden z elementow nie istnieje!"<<endl;
  159.         return;
  160.     }
  161. }    
  162.  
  163. void pokazMenu() {
  164.  cout<<"1 - wyswietl liste"<<endl
  165.      <<"2 - dodaj element na poczatek listy"<<endl
  166.      <<"3 - dodaj element na koniec listy"<<endl
  167.      <<"4 - pokaz wybrany element"<<endl
  168.      <<"5 - usun wybrany element"<<endl
  169.      <<"6 - zamien miejscami wskazane elementy"<<endl
  170.      <<"7 - zwolnij pamiec"<<endl
  171.      <<"ESC - zakoncz dzialanie programu"<<endl;
  172. }
  173.  
  174. int main(int argc, char *argv[])
  175. {
  176.  int key, a, b;
  177.  string line="----------------------------\n";
  178.  lista r;
  179.  element *tmp;
  180.  
  181.  do{
  182.  pokazMenu();
  183.  key=getch()-48;
  184.  system("cls");
  185.  switch(key) {
  186.     case 1:
  187.         cout<<"Twoja lista:"<<endl<<line;
  188.         r.showList();
  189.         cout<<line;
  190.         getch();
  191.         system("cls");
  192.         break;
  193.     case 2:
  194.         cout<<"Podaj wartosc poczatkowego elementu: "; cin>>a;
  195.         tmp=r.addHead(a);
  196.         system("cls");
  197.         break;
  198.     case 3:
  199.         cout<<"Podaj wartosc koncowego elementu: "; cin>>a;
  200.         if(r.head) tmp=r.add(tmp,a);
  201.         else tmp=r.addHead(a);
  202.         system("cls");
  203.         break;
  204.     case 4:
  205.         cout<<"Podaj numer elementu ktory chcesz pokazac: "; cin>>a;
  206.         r.showElement(a);
  207.         getch();
  208.         system("cls");
  209.         break;
  210.     case 5:
  211.         cout<<"Podaj numer elementu do usuniecia: "; cin>>a;
  212.         r.delElement(a);
  213.         r.tail=0;
  214.         getch();
  215.         system("cls");
  216.         break;
  217.     case 6:
  218.         cout<<"Podaj numery elementow do zamiany: ";
  219.         cin>>a>>b;
  220.         r.changeElement(a,b);
  221.         getch();
  222.         system("cls");
  223.         break;
  224.     case 7:
  225.          delete tmp;
  226.          cout<<"Pamiec zwolniona."<<endl;
  227.          Sleep(750);
  228.          system("cls");
  229.          break;
  230.     case -21: cout<<"Zegnaj!"; break;
  231.     default:
  232.         cout<<"Nie ma takiej opcji!"<<endl;
  233.         Sleep(500);
  234.         system("cls");
  235.     }
  236.  }while(key!=-21);
  237.  
  238.  return EXIT_SUCCESS;
  239. }
Add Comment
Please, Sign In to add comment