Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <time.h>
- const char v = 'T';
- const int N = 20;
- struct Data {
- int key;
- double num;
- char val;
- Data * next;
- Data() { key = 0; next = 0; }
- Data(const int k, const double n, const char v) {
- key = k;
- num = n;
- val = v;
- next = 0;
- }
- };
- /*
- void showw(Data* first) {
- Data * temp = first;
- int i = 0;
- while (temp->next) {
- std::cout << i + 1 << ". ID: " << temp->key << " DOUBLE VALUE: " << temp->num << " CHAR SIGN: " << temp->val << std::endl;
- temp = temp->next;
- i++;
- }
- std::cout << std::endl;
- }*/
- Data* create(const int n, Data * first); //2) tworzenie bazy danych
- Data * del(Data * first); //8) usuwanie wszystkich elementow listy
- int add_data(const int k, Data *& first); //1) dodawanie nowego elementu do listy
- int del_data(const int k, Data *& first); //4) usuwanie elementu
- void find(const int k, Data * first); //3) wyszukanie elementu
- void show(Data * first);
- void show_first(const int y, Data * first); //5) wyświetlenie pierwszych Y elementów
- void show_last( int &z, Data * first); //6) prezentacja ostatnich Z elementów
- int count(Data * first); //7) zliczanie węzłów
- int main() {
- int y = 20, z = 11;
- std::fstream file;
- clock_t begin, end;
- unsigned int X;
- int k1, k2, k3, k4, k5;
- double timer;
- file.open("inlab02.txt", std::ios::in); // ładowanie danych
- if (file.good()) {
- while (!file.eof())
- file >> X >> k1 >> k2 >> k3 >> k4 >> k5;
- }
- file.close();
- begin = clock(); //czas start
- Data* database = new Data; //inicajalizacja
- find(k1, database); //wyszukanie k1
- database = create(X, database); //wstawianie x elementów
- std::cout << "Liczba wezlow w bazie to :" << count(database) << std::endl;
- show_first(20, database); // pierwsze dwadziescia wartosci
- if(add_data(k2, database)==1)
- std::cout << "BLAD... rekord o podanym kluczu juz istnieje!" << std::endl;
- show_first(20, database);
- if (add_data(k3, database) == 1)
- std::cout << "BLAD... rekord o podanym kluczu juz istnieje!" << std::endl;
- show_first(20, database);
- if (add_data(k4, database) == 1)
- std::cout << "BLAD... rekord o podanym kluczu juz istnieje!" << std::endl;
- show_first(20, database);
- if (add_data(k5, database) == 1)
- std::cout << "BLAD... rekord o podanym kluczu juz istnieje!" << std::endl;
- del_data(k3, database);
- show_first(20, database);
- del_data(k2, database);
- show_first(20, database);
- del_data(k5, database);
- std::cout << "Liczba wezlow w bazie to :" << count(database) << std::endl;
- find(k5, database);
- show_last(z, database);
- std::cout << "Liczba wezlow w bazie to :" << count(database) << std::endl;
- database =del(database);
- std::cout << "Baza usunieta" << std::endl;
- end= clock();
- timer = (double)(end - begin) / CLOCKS_PER_SEC;
- std::cout << "czas wykonania programu to : " << timer<< std::endl;
- // std::cout << database->next;
- system("pause");
- return 0;
- }
- int add_data(const int k, Data *& first) { //1
- double n = std::rand() % 100;
- Data * last = new Data(k, n, v);
- Data * temp;
- temp = first;
- if (first->key > k) {
- first = last;
- first->next = temp;
- return 0;
- }
- while (temp->next) {
- if (temp->key == k) {
- //std::cout << "BLAD... rekord o podanym kluczu juz istnieje!" << std::endl;
- return 1;
- }
- if (temp->key < k && temp->next->key > k)
- {
- last->next = temp->next;
- temp->next = last;
- return 0;
- }
- temp = temp->next;
- }
- if (temp->next == NULL) {
- temp->next = last;
- last->next = 0;
- return 0;
- }
- }
- Data* create(const int n, Data * first) { //2
- int k;
- int flag = 1;
- int i = n;
- if (first->key == 0) {
- first->key = (std::rand() % 100000) + 99;
- first->num = std::rand() % 100;
- first->val = v;
- i--;
- }
- while (i) { //wstawianie n elementów
- do {
- k= (std::rand() % 100000) +99;
- if (first->key > k) {
- Data * last = new Data(k, std::rand() % 100 , v);
- Data * temp2 ;
- temp2 = first;
- first = last;
- first->next = temp2;
- continue;
- }
- flag = add_data(k, first);
- } while (flag);
- i--;
- }
- return first;
- }
- int del_data(const int k, Data *&first) { //4
- Data * temp = first;
- Data * buffer = new Data;
- if (temp->key == k) {
- first = temp->next;
- delete temp;
- temp = nullptr;
- return 0;
- }
- while (temp->next) {
- if (temp->next->key == k) {
- if (temp->next->next) {
- buffer = temp->next;
- temp->next = temp->next->next;
- delete buffer;
- buffer = nullptr;
- return 0;
- }
- else {
- buffer = temp->next;
- delete buffer;
- buffer = nullptr;
- temp->next = 0;
- return 0;
- }
- }
- temp = temp->next;
- }
- }
- void show(Data* first) {
- std::cout << " ID: " << first->key << " DOUBLE VALUE: " << first->num << " CHAR SIGN: " << first->val << std::endl;
- }
- Data* del(Data * first) { //8
- if (first->next) return 0;
- Data * temp = first->next;
- while (temp) {
- delete first;
- first = temp->next;
- }
- first = nullptr;
- return first;
- }
- void find(const int k, Data * first) { //3
- if (first->key == 0) {
- std::cout << "baza rekordow nie posiada wartosci" << std::endl;
- }
- else {
- Data* temp = new Data;
- temp = first;
- while (temp->next && temp->key != k) {
- temp = temp->next;
- }
- if (temp->next == 0)
- std::cout << "Nie odnaleziono rekordu o zadanym kluczu ( " << k << " )" << std::endl;
- else
- std::cout << "Rekord o zadanym kluczu: " << k << " -> " << temp->num << " " << temp->val << std::endl;
- }
- }
- void show_first(const int y, Data * first) { //5
- std::cout << " Pierwsze dwadziescia rekordow" << std::endl;
- if (first==0 || y<=0) {
- std::cout << "Błąd wyświetlania rekordow!..." << std::endl;
- }
- else {
- show(first);
- Data * temp = first;
- for (int i = 0; i < y - 1; i++) {
- show(temp->next);
- temp = temp->next;
- }
- }
- std::cout << std::endl;
- }
- void show_last( int &z, Data * first) { //6
- int limit = count(first)-1;
- int j=0;
- if (first == 0 || z < 0) {
- std::cout << "Błąd wyświetlania rekordow!..." << std::endl;
- }
- else {
- Data* temp = first;
- Data * buffer = new Data[z];
- for(int i =0; temp->next; i++){
- if (i -1>= limit - z ) {
- buffer[j].key = temp->key;
- buffer[j].num = temp->num;
- buffer[j].val = temp->val;
- j++;
- }
- temp = temp->next;
- }
- std::cout << " Ostatnie jedeneascie rekordow" << std::endl;
- j -= 1;
- while (j >= 0) {
- std::cout << " ID: " << buffer[j].key << " DOUBLE VALUE: " << buffer[j].num << " CHAR SIGN: " << buffer[j].val << std::endl;
- --j;
- }
- }
- }
- int count(Data * first) { //7
- Data * temp = first;
- int num = 0;
- while (temp->next) {
- num++;
- temp = temp->next;
- }
- return num;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement