Anda di halaman 1dari 32

LAPORAN PRAKTIKUM

STRUKTUR DATA
Modul Praktikum 5

Disusun oleh:

Nama : Desi Maya Sari

Nim : 2107110665

Dosen : T. Yudi Hadiwandra, S.Kom, M.Kom

Asisten : 1. Mamba Ul Izzi (1807124814)


2. Rifqi Al Hanif Simbolon (1807195430)

PROGRAM STUDI TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS RIAU
GENAP 2021/2022
A. TUGAS PENDAHULUAN
Algoritma 1 : Menyisipkan sebagai simpul ujung (awal) dari linked list

1. Ciptakan simpul baru (newNode) yang akan disisipkan.


2. Jika Linked List sudah ada, maka penyisipan newNode dilakukan dengan
cara:
a. Pointer newNode menunjuk Nim (newNod -> Nim = nomor).
b. Pointer newNode menunjuk next (newNode -> next = head ).
c. Pointer head dipindahkan ke newNode (head = newNode)

1
Algoritma 2 : Membaca atau menampilkan

1. Inisialisasi cur sama dengan head (cur = head)


2. Lakukan pengulangan terus-menerus selama cur tidak sama dengan NULL
(while (cur != NULL))
3. Setiap pengulangan :
a. Print Nim mahasiswa (cur->Nim)
b. Pointer cur menunjuk next (cur = cur -> next)

2
Algoritma 3 : Mencari sebuah simpul tertentu
1. Inisialisasi int i dan cur sama dengan head (cur = head)
2. Lakukan pengulanagan selama i kecil dari posisi -1 (while (i < -1))
3. Selama pengulanagan
a. Pointer cur menunjuk ke next (cur = cur -> next)
b. i bertambah satu (i++)
4. Jika perulangan telah tercapai, maka cetak Nim mahasiswa dengan pointer
cur menunjuk Nim ( cout<<”Nim mahasiswa : ”<< cur -> nim)

3
Algoritma 4 : Menyisipkan sebagai simpul terakhir
1. Ciptakan simpul baru (newNode) yang akan disisipkan.
2. Jika Linked List sudah ada maka penyisipan newNode dilakukan dengan
cara:
a. Pointer newNode menunjuk Nim (newNode -> Nim = nomor).
b. Pointer newNode menunjuk next (newNode -> next = NULL ).
c. Pointer tail menunjuk ke next (tail -> next = NULL)
d. Inisialisai tail sama dengan newNode (tail = newNode)

4
Flowchart 1 : menyisipkan sebagai simpul ujung(awal) dari linked list.

Start

Input Nim
Mahasiswa

newNode -> nim = nomor


newNode -> next = head
head = newNode

cout << " Nim


Mahasiswa : "<<
cur->Nim<< endl;

end

5
Flowchart 2 : membaca atau menampilkan

Start

cur = head

While (cur != NULL)


cur = cur->next;

cout << " Nim


Mahasiswa : "<<
cur->Nim<< endl;

End

6
Flowchar 3 : mencari sebuah simpul tertentu

Start

int i;
cur = head;

while(i < ke -1)


i++;

cout << " Nim


Mahasiswa : " << cur
-> Nim << endl;

end

7
Flowchart 4 : menyisipkan simpul di akhir

Start

Input Nim
Mahasiswa

newNode = new nim;


newNode -> Nim = nomor;
newNode -> next = NULL;
tail -> next = newNode;
tail = newNode;

cout << " Nim


Mahasiswa : "<<
cur->Nim<< endl;

end

8
B. PERCOBAAN
Percobaan 1 : implementasikan operasi dasar single linked list (menyisipkan
sebagai simpul ujung(awal) dari linked list).

#include <iostream>
using namespace std;

struct nim {
int Nim;
nim *next;
};
nim *head, *tail, *cur, *newNode;

// buat linked list


void create(int nomor){
head = new nim;
head -> Nim = nomor;
head -> next = NULL;
tail = head;
}

//tambahkan node di awal


void addFirst(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = head;
head = newNode;
}
// print linked list
void print () {
cur = head;
while (cur != NULL)
{
cout << " Nim Mahasiswa : "<< cur->Nim<< endl;
cur = cur->next;
}
}

9
int main(){
cout<<"===================================="<<endl;
cout<< " linked List NIM Mahasiswa "<<endl;
create(2107112730);
print();
cout<<"====================================\n"<<endl;

cout<<" Tambahkan node di awal "<<endl;;


addFirst(2107112737);
print();
cout<<"====================================\n"<<endl;
}

10
Percobaan 2 : implementasikan operasi dasar single linked list (membaca atau
menampilkan).

#include <iostream>
using namespace std;
struct nim {
int Nim;
nim *next;
};
nim *head, *tail, *cur, *newNode;

// buat linked list


void create(int nomor){
head = new nim;
head -> Nim = nomor;
head -> next = NULL;
tail = head;
}

//tambahkan node di awal


void addFirst(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = head;
head = newNode;
}

// print linked list


void print () {
cur = head;
while (cur != NULL)
{
cout << " Nim Mahasiswa : "<< cur->Nim<< endl;
cur = cur->next;
}
}

11
int main(){
cout<<"===================================="<<endl;
cout<< " linked List NIM Mahasiswa "<<endl;
create(2107112730);
addFirst(2107110665);
print();
cout<<"====================================\n"<<endl;

12
Percobaan 3 : implementasikan operasi dasar single linked list (mencari sebuah
simpul tertentu. Tambahkan kondisi jika yang dicari adalah data yang paling
terdepan).

#include <iostream>

using namespace std;

struct nim {
int Nim;
nim *next;
};

nim *head, *tail, *cur, *newNode;


// cur = current atau posisi saat ini

// buat linked list


void create(int nomor){
head = new nim;
head -> Nim = nomor;
head -> next = NULL;
tail = head;
}

//tambahkan node di awal


void addFirst(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = head;
head = newNode;
}
// tambahkan node di akhir
void addLast(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = NULL;
tail -> next = newNode;
tail = newNode;
}
// mencari posisi node
void posisi(int ke){
int i;
cur = head;
while(i < ke -1){

13
cur = cur -> next;
i++;
}
cout << " Nim Mahasiswa : " << cur -> Nim << endl;
}
// print linked list
void print () {
cur = head;
while (cur != NULL)
{
cout << " Nim Mahasiswa : "<< cur->Nim<< endl;
cur = cur->next;
}
}

int main(){
int pos;
cout<<"===================================="<<endl;
cout<< " linked List NIM Mahasiswa "<<endl;
create(2107112730);
addLast(2107110257);
addFirst(2107110665);
addLast(2107112737);

cout<<" lihat list ke : ";


cin>>pos;
posisi(pos);
cout<<"====================================\n"<<endl;
}

14
Percobaan 4 : implementasikan operasi dasar single linked list (menyisipkan
sebagai simpul terakhir).

#include <iostream>

using namespace std;

struct nim {
int Nim;
nim *next;
};

nim *head, *tail, *cur, *newNode;

// buat linked list


void create(int nomor){
head = new nim;
head -> Nim = nomor;
head -> next = NULL;
tail = head;
}

// tambahkan node di akhir


void addLast(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = NULL;
tail -> next = newNode;
tail = newNode;
}

// print linked list


void print () {
cur = head;
while (cur != NULL)
{
cout << " Nim Mahasiswa : "<< cur->Nim<< endl;
cur = cur->next;
}
}
int main(){
cout<<"===================================="<<endl;
cout<< " linked List NIM Mahasiswa "<<endl;
create(2107112730);
print();
cout<<"====================================\n"<<endl;

15
cout<<" Tambahkan node di Akhir "<<endl;;
addLast(2107110257);
print();
cout<<"====================================\n"<<endl;
}

16
Percobaan 5 : gabungkan semua operasi diatas dalam sebuah menu pilihan

#include <iostream>

using namespace std;

struct nim {
int Nim;
nim *next;
};

nim *head, *tail, *cur, *newNode;


// cur = current atau posisi saat ini

// buat linked list


void create(int nomor){
head = new nim;
head -> Nim = nomor;
head -> next = NULL;
tail = head;
}

//tambahkan node di awal


void addFirst(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = head;
head = newNode;
}
// tambahkan node di akhir
void addLast(int nomor){
newNode = new nim;
newNode -> Nim = nomor;
newNode -> next = NULL;
tail -> next = newNode;
tail = newNode;
}
// mencari posisi node
void posisi(int ke){
int i;
cur = head;
while(i < ke -1){
cur = cur -> next;
i++;
}

17
cout << " Nim Mahasiswa : " << cur -> Nim << endl;
}

// print linked list


void print () {
cur = head;
while (cur != NULL)
{
cout << " Nim Mahasiswa : "<< cur->Nim<< endl;
cur = cur->next;
}
}
void border (){
for (int i = 0; i < 50; i++)
{
cout<<"=";
}cout<<endl;
}
int main(){
int pos;
int NimMhs;
int input;

create(2107112730);
addLast(2107110257);
addFirst(2107110665);
addLast(2107112737);

do{
menu:
border ();
cout << endl;
cout<< " pilih menu : "<<endl;
cout<< " 1. Tampilkan list saat ini"<<endl;
cout<< " 2. Tambahkan data di awal "<<endl;
cout<< " 3. Tambahkan data di akhir "<<endl;
cout<< " 4. Cari data " << endl;
cout<< " 5. Keluar " << endl;
border ();
cout<< " Masukkan pilihan [1/2/3/4/5]: " ;
cin >> input;
if(input == 1){
border();
print();
border();

18
}
else if (input == 2){
border();
cout << " Masukkan Nim Mahasiswa : ";
cin >> NimMhs;
addFirst(NimMhs);
border;
}
else if (input == 3)
{
border();
cout << " Masukkan Nim Mahasiswa : ";
cin >> NimMhs;
addLast(NimMhs);
border;
}
else if( input == 4){
border();
cout<<" lihat list ke : ";
cin>>pos;
posisi(pos);
border();
}
else if ( input == 5 ){
exit (0);
}
else {
cout << " Pilihan Tidak tersedia "<< endl;
goto menu;
}
}
while (input != 5);

19
20
21
22
C. PRAKTIKUM
1. TUJUAN PRAKTIKUM

Praktikum ini bertujuan agar mahasiswa memahami:


1. Untuk memahami konsep membangun single linked list.
2. Untuk memahami konsep operasi menyisipkan sebagai simpul
ujung(awal) dari linked list.
3. Untuk memahami konsep operasi membaca atau menampilkan
4. Untuk memahami konsep operasi mencari sebuah simpul tertentu
5. Untuk memahami konsep operasi menyisipkan sebagai simpul terakhir
6. Untuk mengimplementasikan semua operasi single linked list dalam
pemrograman

23
2. DASAR TEORI
Array merupakan struktur data yang memesan tempat secara
berurutan untuk jumlah data statis. Sedangkan memory allocation (malloc)
adalah sebuah fungsi fasilitas untuk membentuk ruang secara berurutan
untuk tipe data pointer dengan jumlah data dinamis. Sedangkan linked list
adalah deretan elemen yang berdampingan. karena elemen tersebut
dialokasikan secara dinamis menggunakan malloc, linked list akan
terpencar di memori. Pointer di suatu elemen berisi alamat untuk data
berikutnya sebagai penjamin bahwa semua elemen dapat diakses.
Langkah membangun sebuah linked list:
a) Deklarasi simpul
Linked list terdiri dari elemen-elemen individu, dimana masing-
masng dihubungkan dengan pointer tunggal. Linked list dibentuk dengan
cara menunjuk pointer next suatu elemen ke elemen yang mengikutinya.
Berikut deklarasi sebuah variabel yang menggunakan struktur tersebut.
Struct simpul
{

Char nama[25];

Int nrp;

Struct simpul *next;

};

Struct simpul *ujung;

b) Alokasi memori
Fungsi alokasi_simpul() menggunakan malloc() untuk
mendapatkan memori aktual, yang akan menginisialiasasi suatu field data.
Next selalu diinisialiasi sebagai NULL.
Struct simpul* alokasi_simpul()

Struct simpul * new;

New = (struct simpul*) malloc(sizeof(struct simpul));

If (new = = NULL)

Return NULL;

24
Else

New_>next=NULL;

Return new;

c) Mengisi data dan menyiapkan untuk dihubungkan dengan data baru


berikutnya
Setelah melakukan deklarasi untuk simpul terdapat fungsi untuk
melakukan alokasi memori maka keduanya digunakan untuk membangun
sebuah linked list dengan prinsip LIFO (Last In First Out) sebagai berikut:
struct simpul *ujung;

ujung = alokasi_simpul();

if(Ujung= = NULL) printf(“Alokasi gagal”);

else

Printf(“Nama :”); scanf(“%s”, &ujung-> nama);

Printf(“NRP :”); scanf(“%d, &ujung->nrp);

If(J= =0) /* kondisi jika data masih kosong */

Tampung = ujung;
}

25
3. PEMBAHASAN

Bahasa C++ adalah bahasa pemrograman komputer yang


mendukung pemrograman berorientasi objek (OOP) yang tidak dimiliki
bahasa C. bahasa C++ dapat menjalankan sebagian besar (File
Header/Library) dari C, sedangkan bahasa C tidak dapat menjalankan/
memanggil code (File Header/ Library) dari C++ Berdasarkan program
yang disediakan menggunakan beberapa syntax dibawah ini:
#include <iostream>

#include <conio.h>

Selanjutnya menggunakan tipe data sebagai berikut :


int

Kemudian menggunakan perulagan sebagai berikut :


for

while

Pernyataan berikut berlaku pada setiap program.

26
4. HASIL
Latihan 1 : program single linked list dengan prinsip LIFO

Penjelasan : program ini merupakan implementasi dari single linked list


dengan prinsip LIFO. Di dalamnya user dapat menampilkan list yang
tersedia, menambahkan data pada awal list, menambahkan data di akhir list,
atau mencari suatu data di dalam list. Program ini menggunakan head sebagai
variabel awal list dan tail sebagai variabel akhir dari list.

27
5. KESIMPULAN

1. Linked list adalah sejumlah node yang dihubungkan secara linier


dengan bantuan pointer.
2. Beberapa operasi dapat diterapkan pada linked list seperti sisip
(insert), hapus (delete).
3. Operasi-operasi yang ada pada linked list relatif lebih sulit jika
dibandingkan dengan operasi-operasi pada struktur yang statis.
4. NULL adalah suatu kondisi khusus dimana pointer itu belum diatur
dengan sebuah address tertentu, artinya pointer tidak menunjuk ke
alamat manapun.

28
6. LISTING PROGRAM

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

// deklasi buat node

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

Nim *top;

// fungsi untuk menambahkan data di awal


void push(int data)
{
Nim* temp = new Nim();

// cek tumpukan penuh

if (!temp)
{
cout << " List penuh";
}

temp->data = data;
temp->next = top;
top = temp;
}

// cek data kosong


int isEmpty()
{
return top == NULL;
}

29
int first()
{
if (!isEmpty())
return top->data;
else
cout << " Kosong "<< endl;
}

//hapus atau pop


void pop()
{
Nim* temp;

if (top == NULL)
{
cout << " List kosong" << endl;
}
else
{
temp = top;
top = top->next;
free(temp);
}
}

//print program
void display()
{
Nim* temp;
if (top == NULL)
{
cout << " List kosong";
}
else
{
temp = top;
while (temp != NULL)
{
cout << temp->data << endl;
temp = temp->next;
}
}
}

30
int main()
{
int input;
int NimMhs;

menu:
cout<< endl;
cout<< " Pilih menu : " <<endl;
cout<< " 1. Tampilkan data"<<endl;
cout<< " 2. Masukkan data "<<endl;
cout<< " 3. Hapus data (pop) "<<endl;
cout<< " 4. keluar "<< endl;

cout <<" masukkan pilihan [1/2/3 ] : ";


cin >> input ;

if(input == 1)
{
display();
goto menu;
}
else if(input == 2)
{
cout << " Masukkan NIM : ";
cin >> NimMhs;
push(NimMhs);
goto menu;
}
else if(input == 3)
{
pop();
goto menu;
}
else if(input == 4)
{
exit(0);
}
else {
cout<<" Menu Tidak tersedia ";
goto menu;
}
}

31

Anda mungkin juga menyukai