TR7 - Struktur Data

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 16

Nama : Joko Hendratmo

NIM : 5232451004
Kelas : PTIK – D23
STRUKTUR DATA

1. Soal 1
#include <iostream>

using namespace std;

struct Node {
int data;
Node* next;
};

void addAwal(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = (*head);
(*head) = newNode;
}

void addAkhir(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = NULL;

if (*head == NULL) {
*head = newNode;
} else {
Node* lastNode = *head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}

void display(Node* head) {


while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}

int main() {
Node* head = NULL;
int choice, data;

while (true) {
cout << "Masukkan pilihan:" << endl;
cout << "1. Tambah di awal" << endl;
cout << "2. Tambah di akhir" << endl;
cout << "3. Tampilkan elemen" << endl;
cout << "4. Keluar" << endl;

cout << "Pilihan: ";


cin >> choice;

switch (choice) {
case 1:
cout << "Masukkan nilai: ";
cin >> data;
addAwal(&head, data);
break;
case 2:
cout << "Masukkan nilai: ";
cin >> data;
addAkhir(&head, data);
break;
case 3:
cout << "Elemen dalam linked list: ";
display(head);
break;
case 4:
return 0;
default:
cout << "Pilihan tidak valid" << endl;
}
}

return 0;
}
Output Soal 1
2. Modifikasilah program dari Soal 1 untuk menambahkan fungsi penghapusan elemen
tertentu dalam linked list berdasarkan nilai yang diberikan.
#include <iostream>

using namespace std;

struct Node {
int data;
Node* next;
};

void addAwal(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = (*head);
(*head) = newNode;
}

void addAkhir(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = NULL;

if (*head == NULL) {
*head = newNode;
} else {
Node* lastNode = *head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}

void hapus(Node** head, int key) {


Node* current = *head;
Node* previous = NULL;

if (current != NULL && current->data == key) {


*head = current->next;
delete current;
return;
}

while (current != NULL && current->data != key) {


previous = current;
current = current->next;
}
if (current == NULL) {
return;
}

previous->next = current->next;
delete current;
}

void display(Node* head) {


while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}

int main() {
Node* head = NULL;
int choice, data;

while (true) {
cout << "Menu:" << endl;
cout << "1. Tambah di awal" << endl;
cout << "2. Tambah di akhir" << endl;
cout << "3. Hapus elemen" << endl;
cout << "4. Tampilkan elemen" << endl;
cout << "5. Keluar" << endl;
cout << "Pilihan: ";
cin >> choice;

switch (choice) {
case 1:
cout << "Masukkan nilai: ";
cin >> data;
addAwal(&head, data);
break;
case 2:
cout << "Masukkan nilai: ";
cin >> data;
addAkhir(&head, data);
break;
case 3:
cout << "Masukkan nilai yang ingin dihapus: ";
cin >> data;
hapus(&head, data);
break;
case 4:
cout << "Elemen dalam linked list: ";
display(head);
break;
case 5:
return 0;
default:
cout << "Pilihan tidak valid" << endl;
}
}

return 0;
}
Output Soal 2
3. Buatlah program C++ yang memungkinkan pengguna untuk menambahkan elemen di
posisi tertentu dalam linked list
#include <iostream>
#include <iostream>

using namespace std;

struct Node {
int data;
Node* next;
};

void addPosisi(Node** head, int newData, int posisi) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = NULL;

if (posisi == 1) {
newNode->next = *head;
*head = newNode;
} else if (posisi == 2) {
Node* current = *head;
if (current == NULL) {
cout << "Posisi tidak valid" << endl;
delete newNode;
} else {
newNode->next = current->next;
current->next = newNode;
}
} else {
cout << "Posisi tidak valid" << endl;
delete newNode;
}
}

void hapus(Node** head, int key) {


Node* current = *head;
Node* previous = NULL;

if (current != NULL && current->data == key) {


*head = current->next;
delete current;
return;
}

while (current != NULL && current->data != key) {


previous = current;
current = current->next;
}

if (current == NULL) {
return;
}

previous->next = current->next;
delete current;
}

void display(Node* head) {


while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}

int main() {
Node* head = NULL;
int choice, data, posisi, key;

while (true) {
cout << "Menu:" << endl;
cout << "1. Tambah di posisi tertentu" << endl;
cout << "2. Tampilkan elemen" << endl;
cout << "3. Keluar" << endl;
cout << "Pilihan: ";
cin >> choice;

switch (choice) {
case 1:
cout << "Masukkan angka: ";
cin >> data;
cout << "Masukkan posisi: ";
cin >> posisi;
addPosisi(&head, data, posisi);
break;
case 2:
cout << "Elemen dalam linked list: ";
display(head);
break;
case 3:
return 0;
default:
cout << "Pilihan tidak valid" << endl;
}
}
return 0;
}

Output Soal 3
4. Tambahkan fungsi untuk menghitung dan mengembalikan panjang dari linked list
#include <iostream>

using namespace std;

struct Node {
int data;
Node* next;
};

void addAwal(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = (*head);
(*head) = newNode;
}

void addAkhir(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = NULL;

if (*head == NULL) {
*head = newNode;
} else {
Node* lastNode = *head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}

void display(Node* head) {


while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}

int length(Node* head) {


int count = 0;
while (head != NULL) {
count++;
head = head->next;
}
return count;
}

int main() {
Node* head = NULL;
int choice, data;

while (true) {
cout << "Menu:" << endl;
cout << "1. Tambah di awal" << endl;
cout << "2. Tambah di akhir" << endl;
cout << "3. Hitung panjang" << endl;
cout << "4. Tampilkan elemen" << endl;
cout << "5. Keluar" << endl;
cout << "Pilihan: ";
cin >> choice;

switch (choice) {
case 1:
cout << "Masukkan nilai: ";
cin >> data;
addAwal(&head, data);
break;
case 2:
cout << "Masukkan nilai: ";
cin >> data;
addAkhir(&head, data);
break;
case 3:
cout << "Panjang elemen: " << length(head) << endl;
break;
case 4:
cout << "Elemen dalam linked list: ";
display(head);
break;
case 5:
return 0;
default:
cout << "Pilihan tidak valid" << endl;
}
}

return 0;
}
Output Soal 4
5. Tambahkan fungsi untuk membalik urutan elemen dalam linked list.
#include <iostream>

using namespace std;

struct Node {
int data;
Node* next;
};

void addAwal(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = (*head);
(*head) = newNode;
}

void addAkhir(Node** head, int newData) {


Node* newNode = new Node();
newNode->data = newData;
newNode->next = NULL;

if (*head == NULL) {
*head = newNode;
} else {
Node* lastNode = *head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}

void display(Node* head) {


while (head != NULL) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}

void reverse(Node** head) {


Node* prev = NULL;
Node* current = *head;
Node* next = NULL;

while (current != NULL) {


next = current->next;
current->next = prev;
prev = current;
current = next;
}

*head = prev;
}

int main() {
Node* head = NULL;
int choice, data;

while (true) {
cout << "Menu:" << endl;
cout << "1. Tambah di awal" << endl;
cout << "2. Tambah di akhir" << endl;
cout << "3. Balik urutan" << endl;
cout << "4. Tampilkan elemen" << endl;
cout << "5. Keluar" << endl;
cout << "Pilihan: "; cin >> choice;

switch (choice) {
case 1:
cout << "Masukkan nilai: ";
cin >> data;
addAwal(&head, data);
break;
case 2:
cout << "Masukkan nilai: ";
cin >> data;
addAkhir(&head, data);
break;
case 3:
reverse(&head);
break;
case 4:
cout << "Elemen dalam linked list: ";
display(head);
break;
case 5:
return 0;
default:
cout << "Pilihan tidak valid" << endl;
}
}

return 0;
}
Output Soal 5

You might also like