Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Zadanie 1
- 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.
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList (element *p)
- {
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wstawNaPoczatek(int x)
- //wstawia na początek listy element z wartością przekazaną w parametrze
- { element * p = new element;
- p->liczba = x;
- p->nast = pocz;
- pocz = p; //nowy początek listy
- }
- int main()
- { int n;
- element * pom;
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++) wstawNaPoczatek(i);
- pom=pocz;
- wypiszList(pocz);
- return 0;
- }
- Zadanie 2
- Napisz program, który z listy utworzonej w zadaniu1 k razy usuwa pierwszy element oraz następnie zlicza ilość pozostałych elementów listy.
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList (element *p)
- {
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- unsigned suma(element *p)
- { unsigned c=0;
- while(p)
- { c++;
- p=p->nast;
- }
- return c;
- }
- void wstawNaPoczatek(int x)
- //wstawia na początek listy element z wartością przekazaną w parametrze
- { element * p = new element;
- p->liczba = x;
- p->nast = pocz;
- pocz = p; //nowy początek listy
- }
- void usunPierwszy()
- { element *p=pocz;
- if(p!=NULL) //jeśli pierwszy nie jest pusty
- { pocz = p->nast; //nowy poczatek
- delete p; //usun element z pamieci
- }
- }
- int main()
- { int n,k;
- element * pom;
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++) wstawNaPoczatek(i);
- pom=pocz;
- wypiszList(pocz);
- cout<<endl<<"Ile elementow usunac="; cin>>k;
- for (int i=0;i<k;i++)
- usunPierwszy();
- wypiszList(pocz);
- pom=pocz;
- unsigned z=suma(pom);
- if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
- else cout<<"Lista jest pusta";
- return 0;
- }
- Zadanie 3
- 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ę
- Całość zadania:
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList ()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- unsigned suma(element *p)
- { unsigned c=0;
- while(p)
- { c++;
- p=p->nast;
- }
- return c;
- }
- void wstawNaPoczatek(int x)
- //wstawia na początek listy element z wartością przekazaną w parametrze
- { element * p = new element;
- p->liczba = x;
- p->nast = pocz;
- pocz = p; //nowy początek listy
- }
- void usunPierwszy()
- { element *p=pocz;
- if(p!=NULL) //jeśli pierwszy nie jest pusty
- { pocz = p->nast; //nowy poczatek
- delete p; //usun element z pamieci
- }
- }
- void usunListe() //usuwa cala liste
- { element * p;
- while(pocz)
- {
- p=pocz; //zapamiętujemy wskaźnik na pierwszy element listy
- pocz=p->nast; //przesuwamy początek na następny element listy
- delete p; //usun element zapamiętany w zmiennej p
- } cout<<"Cala lista usunieta"<<endl;
- }
- int main()
- { int n,k;
- element * pom;
- //utworzenie listy n elementowej
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++) wstawNaPoczatek(i);
- wypiszList();
- // usuniecie z listy k poczatkowych elementow
- cout<<endl<<"Ile elementow usunac="; cin>>k;
- for (int i=0;i<k;i++)
- usunPierwszy();
- wypiszList();
- //obliczenie liczby pozostałych elementow listy
- unsigned z=suma(pocz);
- if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
- else cout<<"Lista jest pusta"<<endl;
- //usuniecie całej listy
- usunListe();
- z=suma(pocz);
- if (z) cout<<"Pozostalo "<<z<<" elementow listy"<<endl;
- else cout<<"Lista jest pusta"<<endl;
- return 0;
- }
- Zadanie 4
- 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.
- 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
- lub wskaźnik pusty (NULL) jeśli takiego elementu nie ma.
- Rozwiązanie:
- //zad4
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList ()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wstawNaPoczatek(int x)
- //wstawia na początek listy element z wartością przekazaną w parametrze
- { element * p = new element;
- p->liczba = x;
- p->nast = pocz;
- pocz = p; //nowy początek listy
- }
- void usunPierwszy()
- { element *p=pocz;
- if(p!=NULL) //jeśli pierwszy nie jest pusty
- { pocz = p->nast; //nowy poczatek
- delete p; //usun element z pamieci
- }
- }
- void usunListe() //usuwa cala liste
- { element * p;
- while(pocz)
- {
- p=pocz; //zapamiętujemy wskaźnik na pierwszy element listy
- pocz=p->nast; //przesuwamy początek na następny element listy
- delete p; //usun element zapamiętany w zmiennej p
- } cout<<"Cala lista usunieta"<<endl;
- }
- void dodajNaKoniec(int x)
- { element * p, * n;
- n=new element; //tworzymy nowy element
- n->nast=NULL; //będzie on ostatnim elementem listy
- n->liczba=x; //wstawiamy podaną wartość
- p=pocz;
- if(p!=NULL) //jeśli lista nie jest pusta
- { while(p->nast) p=p->nast;//szukamy końca listy
- p->nast=n; //wstawiamy utworzony element na końcu
- }
- else pocz=n; //lista była pusta
- }
- void dodajPrzedWskazanym(element * t,int x)
- { element * p=pocz;
- if (t==pocz) wstawNaPoczatek(x);
- else
- { while(p->nast != t) p=p->nast;
- p->nast=new element;
- p->nast->nast=t;
- p->nast->liczba=x;
- }
- }
- element * wyszukaj(int x)
- { element * p = pocz;
- while(p!=NULL && p->liczba!=x)
- { p=p->nast;
- }
- return p;
- }
- int main()
- { int n,k,z;
- element * pom;
- //utworzenie listy n elementowej
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++) wstawNaPoczatek(i);
- wypiszList();
- // usuniecie z listy k poczatkowych elementow
- cout<<endl<<"Ile elementow usunac z poczatku listy="; cin>>k;
- for (int i=0;i<k;i++)
- usunPierwszy();
- wypiszList();
- //dodanie nowego elementu na koniec listy
- cout<<endl<<"Jaka wartosc dodac na koncu listy ="; cin>>k;
- dodajNaKoniec(k);
- wypiszList();
- //dodanie nowego elementu listy przed wskazanym
- cout<<endl<<"Jaka wartosc dodac wewnatrz listy="; cin>>k;
- cout<<"Przed jaki element dodac="; cin>>z;
- pom=wyszukaj(z);
- if (pom) dodajPrzedWskazanym(pom,k);
- else cout<<"Nie ma elementu o wartosci "<<z<<endl;
- wypiszList();
- return 0;
- }
- Zadanie 5
- 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.
- //zad5
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList ()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wstawNaPoczatek(int x)
- //wstawia na początek listy element z wartością przekazaną w parametrze
- { element * p = new element;
- p->liczba = x;
- p->nast = pocz;
- pocz = p; //nowy początek listy
- }
- void usunPierwszy()
- { element *p=pocz;
- if(p!=NULL) //jeśli pierwszy nie jest pusty
- { pocz = p->nast; //nowy poczatek
- delete p; //usun element z pamieci
- }
- }
- void usunOstatni()
- { element * p=pocz;
- if(p!=NULL)
- { if(p->nast)
- { while(p->nast->nast) p=p->nast;
- delete p->nast;
- p->nast=NULL;
- }
- else
- { delete p;
- pocz=NULL;
- }
- }
- }
- int main()
- { int n,k,z;
- element * pom;
- //utworzenie listy n elementowej
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++) wstawNaPoczatek(i);
- wypiszList();
- // usuniecie z listy k poczatkowych elementow
- cout<<endl<<"Ile elementow usunac z poczatku listy="; cin>>k;
- for (int i=0;i<k;i++)
- usunPierwszy();
- wypiszList();
- //usuniecie ostatniego elementu z listy
- cout<<endl<<"Usuniecie ostatniego elementu listy"<<endl; usunOstatni();
- wypiszList();
- return 0;
- }
- //zad6
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * nast;
- } * pocz=NULL; //tworzenie listy pustej
- void wypiszList ()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- } cout<<endl;
- }
- void wstawRosnaco(int x)
- {
- element * p=pocz, * pop=NULL;
- while(p!=NULL && p->liczba<x)
- { pop=p;
- p=p->nast;
- }
- element * temp=new element;
- temp->liczba=x;
- if (p==pocz)
- //jezeli lista jest pusta lub wstawiamy na poczatku
- { temp->nast=pocz;
- pocz=temp;
- }
- else //jesli wstawiamy w srodek lub na koniec
- { temp->nast=p;
- pop->nast=temp;
- }
- }
- int main()
- { for (int i=10; i>=5; i--)
- { wstawRosnaco(2*i);}
- wypiszList();
- system("PAUSE");
- return 0;
- }
- Zadanie 7
- Utwórz k elementową listę dwukierunkową dopisując nowe elementy na początku. Wypisz tę listę od początku i od końca.
- //zad7
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * pop;
- element * nast;
- } * pocz = NULL, * koniec = NULL;
- void wypiszOdPoczatku()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wypiszOdKonca()
- { element * p=koniec;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->pop;
- }
- }
- void wstawNaPoczatek(int x)
- { element * p = new element;
- p->liczba = x;
- p->pop = NULL;
- if (pocz==NULL)
- { p->nast = NULL;
- pocz = p;
- koniec = p;
- } else
- { pocz->pop = p;
- p->nast = pocz;
- pocz = p;
- }
- }
- void wstawNaKoniec(int x)
- { element * p = new element;
- p->liczba = x;
- p->nast = NULL;
- if (koniec==NULL)
- { p->pop = NULL;
- pocz = p;
- koniec = p;
- } else
- { koniec->nast = p;
- p->pop = koniec;
- koniec = p;
- }
- }
- int main()
- { int n;
- element * pom1, * pom2;
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++)
- wstawNaPoczatek(i);
- cout<<endl<<"lista wypisana od poczatku"<<endl;
- wypiszOdPoczatku();
- cout<<endl<<"lista wypisana od konca"<<endl;
- wypiszOdKonca();
- return 0;
- }
- Zadanie 8
- Utwórz k elementową listę dwukierunkową dopisując nowe elementy na końcu. Wypisz tę listę od początku i od końca.
- //zad8
- #include <iostream>
- using namespace std;
- struct element
- { int liczba;
- element * pop;
- element * nast;
- } * pocz = NULL, * koniec = NULL;
- void wypiszOdPoczatku()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wypiszOdKonca()
- { element * p=koniec;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->pop;
- }
- }
- void wstawNaPoczatek(int x)
- { element * p = new element;
- p->liczba = x;
- p->pop = NULL;
- if (pocz==NULL)
- { p->nast = NULL;
- pocz = p;
- koniec = p;
- } else
- { pocz->pop = p;
- p->nast = pocz;
- pocz = p;
- }
- }
- void wstawNaKoniec(int x)
- { element * p = new element;
- p->liczba = x;
- p->nast = NULL;
- if (koniec==NULL)
- { p->pop = NULL;
- pocz = p;
- koniec = p;
- } else
- { koniec->nast = p;
- p->pop = koniec;
- koniec = p;
- }
- }
- void wypiszOdPoczatku()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- void wypiszOdKonca()
- { element * p=koniec;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->pop;
- }
- }
- int main()
- { int n;
- element * pom1, * pom2;
- cout<<"Liczba elementow = "; cin>>n;
- for (int i=0; i<n; i++)
- wstawNaKoniec(2*i);
- cout<<endl<<"lista wypisana od poczatku"<<endl;
- wypiszOdPoczatku();
- cout<<endl<<"lista wypisana od konca"<<endl;
- wypiszOdKonca();
- return 0;
- }
- Zadanie 9
- 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.
- //zad9
- #include <iostream>
- using namespace std;
- struct element
- { char liczba;
- element * pop;
- element * nast;
- } * pocz = NULL, * koniec = NULL;
- void wstawNaPoczatek(char x)
- { element * p = new element;
- p->liczba = x;
- p->pop = NULL;
- if (pocz==NULL)
- { p->nast = NULL;
- pocz = p;
- koniec = p;
- } else
- { pocz->pop = p;
- p->nast = pocz;
- pocz = p;
- }
- }
- void znajdzUsun(char x)
- { element *temp=pocz, *n, *p;
- while (temp)
- { if (temp->liczba==x)
- { if (temp->pop==NULL)
- { if (temp->nast==NULL)
- { pocz=NULL;
- koniec=NULL;
- } else
- { n=temp->nast;
- n->pop=temp->pop;
- pocz=n;
- }
- } else
- { if (temp->nast==NULL)
- { p=temp->pop;
- p->nast=temp->nast;
- koniec=temp->pop;
- } else
- { n=temp->nast;
- p=temp->pop;
- p->nast=temp->nast;
- n->pop=temp->pop;
- }
- }
- p=temp;
- temp=temp->nast;
- delete p;
- } else temp=temp->nast;
- }
- }
- void usunListe()
- //usuwanie listy od poczatku
- { element *p;
- while(koniec)
- { p=koniec;
- koniec=koniec->pop;
- delete p;
- }
- }
- void wypiszOdPoczatku()
- { element * p=pocz;
- while(p)
- { cout<<p->liczba<<" ";
- p=p->nast;
- }
- }
- int main()
- { int n; char k;
- element * pom1, * pom2;
- // cout<<"Liczba elementow = "; cin>>n;
- for (char k='a'; k<'z'; k++)
- wstawNaPoczatek(k);
- cout<<endl<<"lista wypisana od poczatku"<<endl;
- wypiszOdPoczatku();
- //usuniecie wybranego elementu listy
- cout<<endl<<"Ktory element usunac = "; cin>>k;
- znajdzUsun(k);
- cout<<endl<<"lista wypisana od poczatku"<<endl;
- wypiszOdPoczatku();
- cout<<endl<<"Lista w calosci usunieta"<<endl;
- usunListe();
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement