Vous êtes sur la page 1sur 15

Tugas Doubly Linked List

140810150024

Cipto Tri Utomo

Dikumpulkan Tanggal :4 /04/2016

S-1 TEKNIK INFORMATIKA


FMIPA UNPAD

Coding :
/*Nama Program : praktikum strukdat circular
Nama

: Cipto Tri Utomo

NPM

: 140810150024

Tanggal buat : 13 April 2016


Deskripsi

: circular double list

-------------------------------------------*/
#include <iostream>
#include <iomanip>
#include <string.h>
#include <stdlib.h>
using namespace std;

struct pegawai
{
string nama;
string nip;
string alamat;
string gaji;
int gol;
pegawai* next;
pegawai* prev;
};
typedef pegawai* pointer;
typedef pointer List;

void createList(List& ListBaru);


void createElmt(pointer& pBaru);
void pilihMenu(List& First, pointer& pBaru, string key, int found, pointer pCari);
void linearSearch(List First,string key,int& found,pointer& pCari);
void entryData(List& First, pointer pBaru, string key, int found, pointer& pCari);
void deleteData(List& First, pointer pHapus,string key, int found, pointer& pCari);
void insertFirst(List& First,pointer pBaru);
void insertBefore(List& First,pointer pBaru, pointer pCari);
void insertAt(List& First,pointer pBaru, pointer pCari);
void insertAfter(List& First,pointer pBaru, pointer pCari);
void insertLast(List& First,pointer pBaru);
void deleteFirst(List& First,pointer pHapus);
void deleteBefore(List& First,pointer pHapus, pointer pCari);

void deletePcari(List& First,pointer pHapus, pointer pCari);


void deleteAfter(List& First,pointer pHapus, pointer pCari);
void deleteLast(List& First,pointer pHapus);
void cariData(pointer pCari,int found);
void gaji(List& First);
void traversal(List First);

int main(int argc, string const *argv[]) {


List First;
string key;
int found;
pointer p,pCari;
createList(First);
pilihMenu(First,p,key,found,pCari);
return 0;
}

void createList(List& ListBaru) {


ListBaru = NULL;
}

void createElmt(pointer& pBaru) {


pBaru = new pegawai;
cout<<endl;
cout << "Masukkan Nama
cout << "Masukkan NIP

: "; cin.ignore();getline(cin,pBaru->nama);
: "; cin >> pBaru -> nip;

cout << "Masukkan Alamat : "; cin.ignore();getline(cin,pBaru->alamat);


do {
cout << "Masukkan Golongan : "; cin >> pBaru -> gol;
} while (pBaru->gol<1||pBaru->gol>5);
pBaru -> next = NULL;
pBaru -> prev = NULL;
}

void pilihMenu(List& First, pointer& pBaru, string key, int found, pointer pCari) {
int pilih;
bool condition = true;
while (condition) {
system("cls");
cout << "MAIN MENU"<<endl;

cout<<"1. Tambah Data"<<endl;


cout<<"2. Hapus Data"<<endl;
cout<<"3. Tampilkan Data"<<endl;
cout<<"4. Cari Data"<<endl;
cout<<"5. Keluar\nPilihan Anda : "; cin >> pilih;
switch (pilih) {
case 1 : entryData(First,pBaru,key,found,pCari);
break;
case 2 : deleteData(First,pBaru,key,found,pCari);
break;
case 3 : traversal(First);
break;
case 4 : cout<<"Cari data dengan nip : ";cin>>key;
linearSearch(First,key,found,pCari);
cariData(pCari,found);
break;
case 5 : condition = false;
break;
default: cout << "Perintah Salah!\n" << endl;
system("pause");
break;
}
}
}

void linearSearch(List First, string key,int &found,pointer& pCari){


found = 0;
pCari = First;
do {
if ((pCari->nip).compare(key)==0)
{
found = 1;
}
else
pCari = pCari->next;
}while(found==0&&pCari!=First);
}

void entryData(List& First, pointer pBaru, string key, int found, pointer& pCari){
int pilih;

system("cls");
cout<<"---------------------"<<endl;
cout<<"|

Entry data

|"<<endl;

cout<<"---------------------"<<endl;
cout<<"| 1. Insert First |"<<endl;
cout<<"| 2. Insert Before |"<<endl;
cout<<"| 3. Insert After |"<<endl;
cout<<"| 4. Insert Last

|"<<endl;

cout<<"---------------------"<<endl;
do{
cout<<"Pilihan Anda : ";cin>>pilih;
} while(pilih<1||pilih>4);
switch (pilih) {
case 1 : createElmt(pBaru);
insertFirst(First,pBaru);
break;
case 2 : createElmt(pBaru);
do {
cout<<"Masukan data sebelum nip nomer : ";cin>>key;
linearSearch(First,key,found,pCari);
} while (found!=1);
insertBefore(First,pBaru,pCari);
break;
case 3 : createElmt(pBaru);
do {
cout<<"Masukan data setelah nip nomer : ";cin>>key;
linearSearch(First,key,found,pCari);
} while (found!=1);
insertAfter(First,pBaru,pCari);
break;
case 4 : createElmt(pBaru);
insertLast(First,pBaru);
break;
}
}

void deleteData(List& First, pointer pHapus,string key, int found, pointer& pCari){
int pilih;
system("cls");
cout<<"---------------------"<<endl;

cout<<"|

Delete data

|"<<endl;

cout<<"---------------------"<<endl;
cout<<"| 1. Delete First |"<<endl;
cout<<"| 2. Delete Before |"<<endl;
cout<<"| 3. delete pCari |"<<endl;
cout<<"| 4. Delete After |"<<endl;
cout<<"| 5. Delete Last

|"<<endl;

cout<<"---------------------"<<endl;

do{
cout<<"Pilihan Anda : ";cin>>pilih;
} while(pilih<1||pilih>5);
switch (pilih) {
case 1 : deleteFirst(First,pHapus);
break;
case 2 : do {
cout<<"Hapus data sebelum nip nomer : ";cin>>key;
linearSearch(First,key,found,pCari);
} while (found!=1);
deleteBefore(First,pHapus,pCari);
break;
case 3 : do {
cout<<"Hapus data pada nip nomer : ";cin>>key;
linearSearch(First,key,found,pCari);
} while (found!=1);
deletePcari(First,pHapus,pCari);
break;
case 4 : do {
cout<<"Hapus data setelah nip nomer : ";cin>>key;
linearSearch(First,key,found,pCari);
} while (found!=1);
deleteAfter(First,pHapus,pCari);
break;
case 5 : deleteLast(First,pHapus);
break;
}
}

void insertFirst(List& First,pointer pBaru){


if (First==NULL)

{
First=pBaru;
First->next=First;
First->prev=First;
}
else {
pBaru->next=First;
pBaru->prev=First->prev;
First->prev->next=pBaru;
First->prev=pBaru;
First = pBaru;
}
}

void insertBefore(List& First,pointer pBaru, pointer pCari){


if (pCari==First)
{
pBaru->next=First;
pBaru->prev=First->prev;
First->prev->next=pBaru;
First->prev=pBaru;
First = pBaru;
}
else{
pBaru->next=pCari;
pBaru->prev=pCari->prev;
pBaru->next->prev=pBaru;
pBaru->prev->next=pBaru;
}
}

void insertAfter(List& First,pointer pBaru, pointer pCari){


if (pCari->next==First)
{
First->prev=pBaru;
pCari->next=pBaru;
pBaru->next=First;
pBaru->prev=pCari;
}
else{

pBaru->next=pCari->next;
pBaru->prev=pCari;
pBaru->next->prev=pBaru;
pBaru->prev->next=pBaru;
}
}

void insertLast(List& First,pointer pBaru){


pointer last;
if (First==NULL)
{
First = pBaru;
First->next=First;
First->prev=First;
}
else{
last=First;
while (last->next!= First)
last=last->next;
pBaru->next=First;
pBaru->prev=last;
First->prev=pBaru;
last->next=pBaru;
}
}

void deleteFirst(List& First,pointer pHapus){


if (First==NULL)
{
pHapus=NULL;
cout<<"List Kosong!"<<endl;
}
else if (First->next==First)
{
pHapus=First;
pHapus->next=NULL;
First=NULL;
}
else {
pHapus=First;

First->prev->next=First->next;
First->next->prev=First->prev;
First=First->next;
pHapus->next=NULL;
pHapus->prev=NULL;
}
}

void deleteBefore(List& First,pointer pHapus, pointer pCari){


if (pCari==NULL) {
cout<<"Tidak ada data yang dihapus";
system("pause");
}
else if (pCari->prev==pCari) {
pHapus=pCari;
pHapus->next=NULL;
pHapus->prev=NULL;
First=NULL;
}
else {
pHapus=pCari->prev;
pHapus->next->prev=pHapus->prev;
pHapus->prev->next=pCari;
pHapus->next=NULL;
pHapus->prev=NULL;
}
}

void deletePcari(List& First,pointer pHapus, pointer pCari){


if (pCari==First)
{
if (pCari->next==pCari){
pHapus=pCari;
pHapus->next=NULL;
pHapus->prev=NULL;
First=NULL;
}
else {
pHapus=pCari;
First=First->next;

pHapus->prev->next=pHapus->next;
pHapus->next->prev=pHapus->prev;
pHapus->next=NULL;
pHapus->prev=NULL;
}

}
else {
pHapus=pCari;
pHapus->next->prev=pHapus->prev;
pHapus->prev->next=pHapus->next;
pHapus->next=NULL;
pHapus->prev=NULL;
}
}

void deleteAfter(List& First,pointer pHapus, pointer pCari){


if (pCari==NULL)
{
cout<<"Tidak ada data yang dihapus";
system("pause");
}
else if(pCari->next==pCari) {
pHapus=pCari;
pHapus->next=NULL;
pHapus->prev=NULL;
First=NULL;
}
else {
pHapus=pCari->next;
pHapus->next->prev=pCari;
pHapus->prev->next=pHapus->next;
pHapus->next=NULL;
pHapus->prev=NULL;
}
}

void deleteLast(List& First,pointer pHapus){


pointer last;
if (First==NULL)

{
pHapus=NULL;
cout<<"List Kosong!"<<endl;
}
else if (First->next==First)
{
pHapus=First;
pHapus->prev=NULL;
pHapus->prev=NULL;
First=NULL;
}
else {
last=First;
while(last->next!=First)
last=last->next;
pHapus=last;
First->prev=pHapus->prev;
pHapus->prev->next=First;
}
}

void cariData(pointer pCari,int found){


if (found==0){
cout<<"Data Tidak Ditemukan!"<<endl;
}
else {
cout<<"\n\nData Pegawai"<<endl;
cout<<"Nama
cout<<"NIP

: "<<pCari->nama<<endl;
: "<<pCari->nip<<endl;

cout<<"Golongan : "<<pCari->gol<<endl;
cout<<"Gaji

: "<<pCari->gaji<<endl;

cout<<"Alamat : "<<pCari->alamat<<endl;
}
cout<<endl;
system("pause");
}

void gaji(List& First){


pointer pBantu;
pBantu=First;

do {
if (pBantu->gol==1)
pBantu->gaji="Rp. 1.000.000,-";
else if (pBantu->gol==2)
pBantu->gaji="Rp. 2.000.000,-";
else if (pBantu->gol==3)
pBantu->gaji="Rp. 3.000.000,-";
else if (pBantu->gol==4)
pBantu->gaji="Rp. 4.000.000,-";
else if (pBantu->gol==5)
pBantu->gaji="Rp. 5.000.000,-";
pBantu=pBantu->next;
} while (pBantu!=First);
}

void traversal(List First){


gaji(First);
pointer pBantu;
if (First==NULL)
{
cout<<"List Kosong"<<endl;
}
else {
cout<<left << setfill('-') << setw(80)<<"-"<<endl;
cout<<"

Daftar Mahasiswa "<< endl;

cout<<left << setfill('-') << setw(80)<<"-"<<endl;


cout<<left << setfill(' ') << setw(5)
<<"\nNo."
<<setw(30) << "Nama"
<<setw(15) << "NIP"
<<setw(16) << "Gaji"
<<setw(20) << "Alamat"<<endl;
pBantu =First;
int i=1;
cout<<endl;
do {
cout << left << setw(4) << i
<< setw(30) << pBantu ->nama
<< setw(15) << pBantu ->nip
<< setw(16) << pBantu->gaji

<< setw(20) << pBantu->alamat<<endl;


pBantu =pBantu->next;
i++;
} while(pBantu!=First);
}
cout<<endl;
system("pause");
}

Output data :

Tampilan menu

Menu entry data

Insert First

Insert Before

Tampilan Data

Hapus data

Tampilan data hasil delete last

Vous aimerez peut-être aussi