Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <time.h>
- #include <fstream>
- #include <string>
- #define clr() system("cls")
- #define pausep() system("pause")
- struct listD
- {
- listD* next, * prev;
- int data;
- };
- struct listD* head;
- void beginningPhrase()
- {
- clr();
- std::cout << "<Prosze podac liczbe do ktorej przypisany jest punkt a nastepnie zatwierdzic enterem>" << std::endl;
- };
- void phraseMenu1()
- {
- std::cout << "Prosze wybrac sposob tworzenia tablicy:" << std::endl;
- std::cout << "1. Automatyczna generacja n-elementowej tablicy ( Podaj n, podaj max wartosc elementow )" << std::endl;
- std::cout << "2. Reczne wpisanie kazdego elementu do n-elementowej tablicy ( Podaj n, podaj n elementow )" << std::endl;
- std::cout << "3. Wczytaj tablice z pliku tekstowego ( *.txt ) ( Podaj nazwe pliku tekstowego )" << std::endl;
- std::cout << "4. Wyjscie" << std::endl;
- };
- void phraseMenu2()
- {
- std::cout << "1. Dodanie elementu na poczatek listy" << std::endl;
- std::cout << "2. Dodanie elementu na koniec listy" << std::endl;
- std::cout << "3. Dodanie n-tego elementu ( w miejsce n ( n jest wieksze od 0 i mniejsze od liczby elementow ) zostaje dodany element a nastepne zostaja przesuniete o 1)" << std::endl;
- std::cout << "4. Usuniecie elementu z poczatku listy" << std::endl;
- std::cout << "5. Usuniecie elementu z konca listy" << std::endl;
- std::cout << "6. Usuniecie n-tego elementu ( w miejsce n ( n jest wieksze od 0 i mniejsze od liczby elementow ) zostaje usuniety element a nastepne zostaja przesuniete o 1)" << std::endl;
- std::cout << "7. Przesortowanie listy wzgledem wartosci" << std::endl;
- std::cout << "8. Zapisanie listy do pliku tekstowego ( *.txt ) ( Podaj nazwe pliku tekstowego )" << std::endl;
- std::cout << "9. Wyswietl liste w konsoli" << std::endl;
- std::cout << "0. Wyjscie" << std::endl;
- };
- int counter()
- {
- int count = 0;
- struct listD* ptr;
- ptr = head;
- while (ptr != NULL)
- {
- count++;
- ptr = ptr->next;
- }
- return count;
- };
- void addElementAt0(int newdata)
- {
- struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
- newListD->data = newdata;
- newListD->prev = NULL;
- newListD->next = head;
- if (head != NULL)
- head->prev = newListD;
- head = newListD;
- };
- void addElementAtEnd(int newdata)
- {
- struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
- struct listD* temp;
- newListD->data = newdata;
- newListD->prev = head;
- newListD->next = NULL;
- if (head == NULL)
- {
- newListD->prev = NULL;
- newListD->next = NULL;
- head = newListD;
- }
- else
- {
- temp = head;
- while (temp->next != NULL)
- {
- temp = temp->next;
- }
- temp->next = newListD;
- newListD->prev = temp;
- newListD->next = NULL;
- }
- };
- void addElementAtN(int newdata, int num)
- {
- struct listD* newListD = (struct listD*) malloc(sizeof(struct listD));
- struct listD* temp;
- int count = counter();
- if (num > 0 && num < count)
- {
- if (num == 1) addElementAt0(newdata);
- else
- {
- temp = head;
- for (int i = 1; i < num; i++)
- {
- temp = temp->next;
- }
- newListD->data = newdata;
- newListD->next = temp;
- newListD->prev = temp->prev;
- temp->prev->next = newListD;
- temp->prev = newListD;
- }
- }
- else
- {
- if (num == count)
- addElementAtEnd(newdata);
- else
- {
- clr();
- std::cout << "Numer wpisywanego elementu nie nalezy do liczby elementow";
- pausep();
- }
- }
- };
- void delElementAt0()
- {
- struct listD* temp;
- temp = head;
- if (temp->next != NULL)
- {
- head = head->next;
- temp->next->prev = NULL;
- free(temp);
- }
- else
- {
- free(temp);
- std::cout << "Usunieto jedyny istniejacy element z listy" << std::endl;
- pausep();
- }
- };
- void delElementAtEnd()
- {
- struct listD* temp;
- temp = head;
- while (temp->next != NULL)
- {
- temp = temp->next;
- }
- if (temp->prev != NULL)
- {
- temp->prev->next = NULL;
- free(temp);
- }
- else
- {
- free(temp);
- std::cout << "Usunieto jedyny istniejacy element z listy" << std::endl;
- pausep();
- }
- };
- void delElementAtN(int num)
- {
- struct listD* temp;
- struct listD* temp2;
- int count = counter();
- if (num > 0 && num < count)
- {
- if (num == 1)
- delElementAt0();
- else
- {
- temp = head;
- for (int i = 1; i < num; i++)
- {
- temp = temp->next;
- }
- temp2 = temp->next;
- temp->prev->next = temp2;
- temp2->prev = temp;
- free(temp);
- }
- }
- else
- {
- if (num == count)
- delElementAtEnd();
- else
- {
- clr();
- std::cout << "Numer wpisywanego elementu nie nalezy do liczby elementow";
- pausep();
- }
- }
- };
- void sortList()
- {
- struct listD* temp;
- int count = counter();
- for (int i = 0; i < count; i++)
- {
- temp = head;
- for (int j = 0; j < count - 1; j++)
- {
- if (temp->data > temp->next->data) std::swap(temp->next->data, temp->data);
- temp = temp->next;
- }
- }
- };
- void autoGenList()
- {
- int n, x;
- clr();
- std::cout << "Podaj liczbe elementow: ";
- std::cin >> n;
- clr();
- std::cout << "Podaj ograniczenie wielkosci elementow: ";
- std::cin >> x;
- for (int i = 0; i < n; i++)
- addElementAtEnd(rand() % x);
- };
- void displayList()
- {
- struct listD* ptr;
- ptr = head;
- if (ptr != NULL)
- {
- while (ptr != NULL)
- {
- std::cout << ptr->data << " ";
- ptr = ptr->next;
- }
- }
- else
- {
- clr();
- std::cout << "Lista jest pusta";
- pausep();
- }
- };
- void iFileList()
- {
- std::string x, y;
- std::cout << "Podaj nazwe pliku: ";
- std::cin >> x;
- x = x + ".txt";
- std::ifstream input(x);
- while (!input.eof())
- {
- input >> y;
- addElementAtEnd(std::stoi(y));
- }
- input.close();
- };
- void oFileList()
- {
- std::string x, y;
- std::cout << "Podaj nazwe pliku: ";
- std::cin >> x;
- x = x + ".txt";
- std::ofstream output(x);
- struct listD* ptr;
- ptr = head;
- while (ptr != NULL)
- {
- output << ptr->data << std::endl;
- ptr = ptr->next;
- }
- output.close();
- };
- void quit()
- {
- exit(0);
- };
- void clearList()
- {
- while (head->next != NULL)
- {
- delElementAt0();
- }
- };
- void menu1(int x)
- {
- int n;
- switch (x)
- {
- case 1:
- autoGenList();
- break;
- case 2:
- clr();
- std::cout << "Podaj liczbe elementow: ";
- std::cin >> n;
- int num;
- for (int i = 0; i < n; i++)
- {
- clr();
- std::cout << "Podaj " << i + 1 << " element: ";
- std::cin >> num;
- addElementAtEnd(num);
- }
- break;
- case 3:
- iFileList();
- break;
- case 4:
- quit();
- break;
- }
- };
- void menu2(int x)
- {
- int n, m;
- switch (x)
- {
- case 1:
- clr();
- std::cout << "Podaj element: ";
- std::cin >> n;
- addElementAt0(n);
- break;
- case 2:
- clr();
- std::cout << "Podaj element: ";
- std::cin >> n;
- addElementAtEnd(n);
- break;
- case 3:
- clr();
- std::cout << "Podaj numer elementu: ";
- std::cin >> n;
- clr();
- std::cout << "Podaj element: ";
- std::cin >> m;
- addElementAtN(m, n);
- break;
- case 4:
- delElementAt0();
- break;
- case 5:
- delElementAtEnd();
- break;
- case 6:
- clr();
- std::cout << "Podaj numer elementu: ";
- std::cin >> n;
- delElementAtN(n);
- break;
- case 7:
- sortList();
- break;
- case 8:
- oFileList();
- break;
- case 9:
- clr();
- displayList();
- pausep();
- break;
- case 10:
- clearList();
- break;
- case 0:
- quit();
- break;
- }
- };
- void menuVoids1()
- {
- int x;
- beginningPhrase();
- phraseMenu1();
- std::cin >> x;
- menu1(x);
- };
- void menuVoids2()
- {
- int x;
- beginningPhrase();
- phraseMenu2();
- std::cin >> x;
- menu2(x);
- };
- int main()
- {
- bool b = true;
- srand(time(NULL));
- menuVoids1();
- while (b)
- {
- menuVoids2();
- };
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement