Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <conio.h>
- #include <windows.h>
- using namespace std;
- struct element{
- element *next, *prev;
- int value;
- element(){
- value=0;
- next=prev=0;
- }
- ~element(){
- }
- };
- struct lista{
- element *head;
- element *tail;
- lista(){
- head=tail=0;
- }
- ~lista() {
- }
- element *addHead(int a);
- element *add(element *previous, int a);
- void showList();
- void showElement(int a);
- void delElement(int a);
- void changeElement(int a, int b);
- bool ifExist(int a);
- };
- element *lista::add(element *previous, int a) {
- element *x=new element;
- x->value=a;
- x->next=previous->next;
- previous->next=x;
- x->prev=previous;
- if(x->next){
- x->next->prev=x;
- } else {
- tail=x;
- }
- return x;
- }
- element *lista::addHead(int a){
- element *x=new element;
- x->value=a;
- x->next=head;
- head=x;
- if(head) head->prev=x;
- x=head;
- //x=x->next;
- return x;
- }
- void lista::showList(){
- element *tmp=head;
- int i=0;
- while(tmp){
- cout<<tmp->value<<" ";
- tmp=tmp->next;
- i++;
- }
- cout<<endl;
- if(i==0) cout<<"Lista nie posiada elementow/nie istnieje."<<endl;
- if(i==1) cout<<"Lista posiada 1 element."<<endl;
- if(i>=2&&i<=4) cout<<"Lista posiada "<<i<<" elementy."<<endl;
- if(i>4) cout<<"Lista posiada "<<i<<" elementow."<<endl;
- tmp=head;
- }
- bool lista::ifExist(int a){
- element *tmp=head;
- int j=0;
- if(a==0&&tmp) return true;
- else if(a==0&&!tmp) return false;
- tmp=head;
- if(a!=0){
- while(tmp){
- tmp=tmp->next;
- j++;
- }
- if(j-1==a||j-1>a) return true;
- else if(j-1!=a||j-1<a) return false;
- }
- }
- void lista::showElement(int a){
- element *tmp=head;
- int i;
- bool er;
- er=ifExist(a);
- if(er){
- switch(a){
- case 0:
- cout<<tmp->value;
- er=true;
- break;
- default:
- for(i=0; i<a; i++) { tmp=tmp->next; }
- cout<<tmp->value; }
- } else { cout<<"Podany element nie istnieje"<<endl; }
- }
- void lista::delElement(int a){
- element *tmp=head;
- int i,t; bool er;
- er=ifExist(a);
- if(er){
- for(i=0; i<a; i++) tmp=tmp->next;
- if(a==0){
- tmp->prev=head;
- head=0;
- } else {
- while(tmp->next){
- tmp=tmp->next;
- t=tmp->value;
- tmp=tmp->prev;
- tmp->value=t;
- tmp=tmp->next;
- }
- }
- } else {
- cout<<"Podany element nie istnieje!"<<endl;
- }
- }
- void lista::changeElement(int a, int b){
- element *tmp=head;
- element *ta;
- bool er1, er2;
- int i, t=0;
- if(a==b) return;
- if(a>b){
- t=a;
- a=b;
- b=t;
- }
- er1=ifExist(a);
- er2=ifExist(b);
- if(er1&&er2){
- for(i=0; i<a; i++) { tmp=tmp->next; }
- t=tmp->value;
- ta=tmp;
- for(i=a; i<b; i++) { tmp=tmp->next; }
- ta->value=tmp->value;
- tmp->value=t;
- } else {
- cout<<"Jeden z elementow nie istnieje!"<<endl;
- return;
- }
- }
- void pokazMenu() {
- cout<<"1 - wyswietl liste"<<endl
- <<"2 - dodaj element na poczatek listy"<<endl
- <<"3 - dodaj element na koniec listy"<<endl
- <<"4 - pokaz wybrany element"<<endl
- <<"5 - usun wybrany element"<<endl
- <<"6 - zamien miejscami wskazane elementy"<<endl
- <<"7 - zwolnij pamiec"<<endl
- <<"ESC - zakoncz dzialanie programu"<<endl;
- }
- int main(int argc, char *argv[])
- {
- int key, a, b;
- string line="----------------------------\n";
- lista r;
- element *tmp;
- do{
- pokazMenu();
- key=getch()-48;
- system("cls");
- switch(key) {
- case 1:
- cout<<"Twoja lista:"<<endl<<line;
- r.showList();
- cout<<line;
- getch();
- system("cls");
- break;
- case 2:
- cout<<"Podaj wartosc poczatkowego elementu: "; cin>>a;
- tmp=r.addHead(a);
- system("cls");
- break;
- case 3:
- cout<<"Podaj wartosc koncowego elementu: "; cin>>a;
- if(r.head) tmp=r.add(tmp,a);
- else tmp=r.addHead(a);
- system("cls");
- break;
- case 4:
- cout<<"Podaj numer elementu ktory chcesz pokazac: "; cin>>a;
- r.showElement(a);
- getch();
- system("cls");
- break;
- case 5:
- cout<<"Podaj numer elementu do usuniecia: "; cin>>a;
- r.delElement(a);
- r.tail=0;
- getch();
- system("cls");
- break;
- case 6:
- cout<<"Podaj numery elementow do zamiany: ";
- cin>>a>>b;
- r.changeElement(a,b);
- getch();
- system("cls");
- break;
- case 7:
- delete tmp;
- cout<<"Pamiec zwolniona."<<endl;
- Sleep(750);
- system("cls");
- break;
- case -21: cout<<"Zegnaj!"; break;
- default:
- cout<<"Nie ma takiej opcji!"<<endl;
- Sleep(500);
- system("cls");
- }
- }while(key!=-21);
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment