Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
- //
- #include <iostream>
- #include <string>
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- using namespace std;
- struct Element
- {
- long int i;
- double d;
- char c;
- Element* nastepny;
- /*
- Element() // konstruktor do wczytywania danych
- {
- i = (rand() % 99900) + (99);
- d = (rand() % 10000) + (0);
- c = 'T';
- // wskazniki ustawiamy na NULL
- nastepny = NULL;
- }
- */
- void wypisz()
- {
- cout << endl << "int: " << i << " double: " << d << " char: " << c << endl;
- }
- };
- void dodajElementy(Element** korzen, int x)
- {
- srand(time(NULL));
- for (int i = 0; i < x; i++)
- {
- Element* nowa = new Element; // tworzenie noweego elementu
- Element* pom = (*korzen), *pom1 = NULL;
- while (pom != NULL && (pom->i) != (nowa->i))
- {
- pom1 = pom; // pom1 wskazuje poprzednika pom
- pom = pom->nastepny;
- }
- if (pom != NULL && (pom->i) == (nowa->i)) // element z takim intem juz istnieje
- {
- //cout << "Element o takim kluczu juz istnieje";
- //delete nowa;
- }
- else if ((*korzen) == NULL || (pom == (*korzen) && (pom->i) != (nowa->i)))
- {
- nowa->nastepny = (*korzen);
- (*korzen) = nowa;
- }
- else
- {
- pom1->nastepny = nowa;
- nowa->nastepny = pom;
- }
- nowa->i = (rand() % 99900) + (99);
- nowa->d = (rand() % 10000) + (0);
- nowa->c = 'T';
- }
- }
- bool usunElement(Element** korzen, int a)
- {
- if ((*korzen) == NULL) // lista jest pusta
- return false;
- Element* pomoc = (*korzen), * pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
- while (pomoc != NULL && (pomoc->i)!=(a)) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
- {
- pomoc1 = pomoc;
- pomoc = pomoc->nastepny;
- }
- if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
- return false;
- else if (pomoc == (*korzen)) // usuwamy koniec
- {
- (*korzen) = (*korzen)->nastepny;
- delete pomoc;
- }
- else // usuwamy z srodka lub konca listy
- {
- pomoc1->nastepny = pomoc->nastepny;
- delete pomoc;
- }
- return true;
- }
- void wyszukajElement(Element* korzen, int a)
- {
- while (korzen != NULL && (korzen->i)!=(a)) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
- korzen = korzen->nastepny;
- if (korzen == NULL)
- cout << "Nie ma takiego elementu " << a << endl;
- else
- korzen->wypisz();
- }
- void wypiszWszystkieElementy(Element* korzen) // wypisywanie calej listy
- {
- cout << "Zawartosc listy:\n";
- if (korzen == NULL)
- cout << "Lista jest pusta ";
- else
- while (korzen != NULL)
- {
- korzen->wypisz();
- korzen = korzen->nastepny; // przejscie na kolejny element
- }
- }
- void wypisz20Elementow(Element* korzen)
- {
- cout << "Zawartosc listy:\n";
- for (int i = 0; i < 10; i++)
- {
- korzen->wypisz();
- korzen = korzen->nastepny; // przejscie na kolejny element
- }
- }
- void sortowanie(Element* korzen)
- {
- Element* temp = NULL;
- Element* pomocna = NULL;
- for (temp = korzen; temp != NULL; temp = temp->nastepny)
- for (pomocna = temp; pomocna != NULL; pomocna = pomocna->nastepny)
- if (pomocna->i < temp->i)
- {
- int key = pomocna->i;
- pomocna->i = temp->i;
- temp->i = key;
- }
- }
- void usunListe(Element* korzen)
- {
- if (korzen == NULL)
- return;
- while (korzen != NULL)
- {
- Element* tmp = korzen->nastepny;
- delete korzen;
- korzen = tmp;
- }
- delete korzen;
- }
- void dodajJedenElement(Element **korzen, int i)
- {
- Element* nowa = new Element; // tworzy nowy element listy
- // wypełniamy naszymi danymi
- nowa->i = i;
- nowa->d = (rand() % 10000) + (0);
- nowa->c = 'X';
- if (korzen == 0) // sprawdzamy czy to pierwszy element listy
- {
- // jeżeli tak to nowy element jest teraz początkiem listy
- *korzen = nowa;
- }
- else
- {
- // w przeciwnym wypadku wędrujemy na koniec listy
- Element* temp = *korzen;
- while (temp->nastepny)
- {
- // znajdujemy wskaźnik na ostatni element
- temp = temp->nastepny;
- }
- temp->nastepny = nowa; // ostatni element wskazuje na nasz nowy
- nowa->nastepny = 0; // ostatni nie wskazuje na nic
- }
- }
- void licznik(Element *korzen)
- {
- Element* pomoc = korzen;
- int licznik;
- licznik = 0;
- while (pomoc)
- {
- pomoc = pomoc->nastepny;
- licznik++;
- }
- cout << licznik;
- }
- int main()
- {
- int X,k1,k2,k3,k4,k5;
- FILE* fp = fopen("inlab02.txt", "r");
- if (fp == NULL)
- return -1;
- fscanf(fp, "%d %d %d %d d% d%", &X, &k1, &k2, &k3, &k4, &k5);
- // 2001 13666 4 7 -1 100001
- fclose(fp);
- Element* korzen = NULL;
- //wyszukajElement(korzen, k1);
- dodajElementy(&korzen, X);
- sortowanie(korzen);
- //wypiszWszystkieElementy(korzen);
- licznik(korzen);
- sortowanie(korzen);
- wypisz20Elementow(korzen);
- }
- /*
- int wybor;
- cout << "MENU\n"
- << "1.Dodanie elementów\n"
- << "2.Wyswietl zawartosc listy\n"
- << "3.Usun element z listy\n"
- << "4.Wyszukaj element\n"
- << "5.Wyswietl pierwsze 20 wezlow\n"
- << "6.Usun cala liste\n"
- << "7.Dodaj jeden element do listy\n";
- while (cin >> wybor)
- {
- switch (wybor)
- {
- case 1:
- dodajElementy(&korzen,X);
- sortowanie(korzen);
- break;
- case 2:
- sortowanie(korzen);
- wypiszWszystkieElementy(korzen);
- break;
- case 3:
- int a;
- cout << "Podaj int ktory chcesz usunac\n";
- cin >> a;
- if (!usunElement(&korzen, a))
- cout << "Nie ma takiego elementu na liscie" << endl;
- else
- cout << "Podany element zostal usuniety poprawnie" << endl;
- break;
- case 4:
- int y;
- cout << "Podaj int ktory chcesz znalezc\n";
- cin >> y;
- wyszukajElement(korzen, y);
- break;
- case 5:
- sortowanie(korzen);
- wypisz20Elementow(korzen);
- break;
- case 6:
- usunListe(korzen);
- break;
- case 7:
- dodajJedenElement(&korzen,k2);
- //sortowanie(korzen);
- break;
- default:
- cout << "Wybierz jedna z opcji z menu";
- break;
- }
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement