Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <stdio.h>
- template <typename T>
- struct LinkedList {
- struct Node {
- T data;
- Node *next;
- Node *prev;
- Node() {
- next = nullptr;
- prev = nullptr;
- }
- };
- Node *head;
- Node *tail;
- LinkedList() {
- head = nullptr;
- tail = nullptr;
- }
- void pushBack(T node) {
- if(head == nullptr) {
- head = new Node;
- head->data = node;
- tail = head;
- } else {
- Node *new_node = new Node;
- new_node->data = node;
- tail->next = new_node;
- new_node->prev = tail;
- tail = new_node;
- }
- }
- void pushFront(T node) {
- if(head == nullptr) {
- head = new Node;
- head->data = node;
- tail = head;
- } else {
- Node *new_node = new Node;
- new_node->data = node;
- head->prev = new_node;
- new_node->next = head;
- head = new_node;
- }
- }
- void popBack() {
- if(head == nullptr) return;
- Node *temp = tail;
- tail = tail->prev;
- delete temp;
- if(tail == nullptr) head = nullptr;
- }
- void popFront() {
- if(head == nullptr) return;
- Node *temp = head;
- head = head->next;
- delete temp;
- if(head == nullptr) tail = nullptr;
- }
- void remove(T node) {
- Node *temp = head;
- bool flag = false;
- while(temp != nullptr) {
- if(temp->data == node) {
- flag = true;
- break;
- }
- temp = temp->next;
- }
- if(flag) {
- temp->prev->next = temp->next;
- temp->next->prev = temp->prev;
- }
- }
- bool isInList(T node) {
- Node *temp = head;
- while(temp != nullptr) {
- if(temp->data == node) {
- return true;
- }
- temp = temp->next;
- }
- return false;
- }
- Node *getNode(T node) {
- Node *temp = head;
- while(temp != nullptr) {
- if(temp->data == node) {
- return temp;
- }
- temp = temp->next;
- }
- return nullptr;
- }
- };
- struct Peserta;
- struct Kejuaraan {
- std::string nama;
- std::string jenis;
- void setPeserta(LinkedList<Peserta>::Node *node) {
- if(!peserta.isInList(node))
- peserta.pushBack(node);
- }
- LinkedList<LinkedList<Peserta>::Node *> getPeserta() {
- return peserta;
- }
- bool operator==(Kejuaraan k) {
- if(k.nama == nama and k.jenis == jenis)
- return true;
- return false;
- }
- //private:
- LinkedList<LinkedList<Peserta>::Node *> peserta;
- };
- struct Peserta {
- std::string nama;
- int umur;
- std::string alamat;
- void setKejuaraan(LinkedList<Kejuaraan>::Node *node) {
- if(!kejuaraan.isInList(node))
- kejuaraan.pushBack(node);
- }
- LinkedList<LinkedList<Kejuaraan>::Node *> getKejuaraan() {
- return kejuaraan;
- }
- bool operator==(Peserta p) {
- if(p.nama == nama and p.alamat == alamat and p.umur == umur)
- return true;
- return false;
- }
- //private:
- LinkedList<LinkedList<Kejuaraan>::Node *> kejuaraan;
- };
- void removeKejuaraanNode(Kejuaraan k, LinkedList<Kejuaraan> &daftar_kejuaraan, LinkedList<Peserta> &daftar_peserta) {
- auto *remove_target = daftar_kejuaraan.getNode(k);
- // menghapus data kejuaraan yang ada di setiap peserta
- if(remove_target != nullptr) {
- auto *temp = daftar_peserta.head;
- for(; temp != nullptr; temp->next) {
- temp->data.getKejuaraan().remove(remove_target);
- }
- }
- daftar_kejuaraan.remove(k);
- }
- void removePesertaNode(Peserta p, LinkedList<Kejuaraan> &daftar_kejuaraan, LinkedList<Peserta> &daftar_peserta) {
- auto *remove_target = daftar_peserta.getNode(p);
- // menghapus data peserta yang ada di setiap kejuaraan
- if(remove_target != nullptr) {
- auto *temp = daftar_kejuaraan.head;
- for(; temp != nullptr; temp->next) {
- temp->data.getPeserta().remove(remove_target);
- }
- }
- daftar_peserta.remove(p);
- }
- int main() {
- LinkedList<Peserta> daftar_peserta;
- LinkedList<Kejuaraan> daftar_kejuaraan;
- Peserta peserta[] = {
- {"David", 30, "XYZ"},
- {"Laura", 25, "ABC"},
- {"Jessica", 26, "DEF"},
- {"Agus", 35, "GHI"}
- };
- Kejuaraan kejuaraan[] = {
- {"Lari", "Jarak Pendek"},
- {"Bulu Tangkis", "Ganda Putri"},
- {"Bulu Tangkis", "Ganda Putri"},
- {"Lompat", "Lompat Tinggi"}
- };
- for(int i = 0; i < 4; ++i) {
- // Peserta peserta;
- // Kejuaraan kejuaraan;
- // std::cout << "Nama: ";
- // std::getline(std::cin, peserta.nama);
- // std::cout << "Umur: ";
- // std::cin >> peserta.umur;
- // fflush(stdin);
- // std::cout << "Alamat: ";
- // std::getline(std::cin, peserta.alamat);
- // std::cout << "Nama kejuaraan: ";
- // std::getline(std::cin, kejuaraan.nama);
- // std::cout << "Jenis kejuaraan: ";
- // std::getline(std::cin, kejuaraan.jenis);
- daftar_peserta.pushBack(peserta[i]);
- if(!daftar_kejuaraan.isInList(kejuaraan[i])) {
- daftar_kejuaraan.pushBack(kejuaraan[i]);
- }
- auto kejuaraan_node = daftar_kejuaraan.getNode(kejuaraan[i]);
- auto peserta_node = daftar_peserta.getNode(peserta[i]);
- peserta_node->data.setKejuaraan(kejuaraan_node);
- kejuaraan_node->data.setPeserta(peserta_node);
- }
- auto temp = daftar_kejuaraan.head;
- while(temp != nullptr) {
- std::cout << temp->data.nama << '\n';
- if(temp->data.nama == "Bulu Tangkis") {
- auto temp2 = temp->data.peserta.head;
- while(temp2 != nullptr) {
- std::cout << temp2->data->data.nama << "\n";
- std::cout << "\t\tnext: " << temp2->data->next->data.nama << "\n";
- std::cout << "\t\tprev: " << temp2->data->prev->data.nama << "\n";
- temp2 = temp2->next;
- }
- std::cout << "\n";
- }
- temp = temp->next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement