-->

I'M Bayu Pradika

Graphic Designer . Web Developer . Programmer

Kamis, 01 September 2022

Contoh Program C++ Menggunakan Double Linked List 2

 


1. Implementasikan operasi dasar Double Linked List : Menyisipkan sebelum simpul tertentu. Tambahkan kondisi jika data yang disisipkan sebelumnya adalah data pertama.

#include <iostream>

using namespace std;

struct Node{

int val;

Node *next;

Node *prev;

};

Node *front, *rear, *cur, *del, *newNode, *afterNode;

int totalNode = 0;

void create(int val);

void insert(int val);

void remove();

void print();

int main(){

int pilih,input, pos;

begin :

cout << "1) Print Data\n2) Masukkan Data\n3) Hapus Data Front\n4) Exit\n=====================\nPilih Program : ";

cin>>pilih;

cout << endl;

switch(pilih){

case 1:

print();

break;

case 2:

cout << "Masukan Nilai : ";

cin>>input;

insert(input);

break;

case 3:

remove();

break;

case 4:

exit(0);

break;

default:

cout << "Pilih 1-4 !!!" << endl;

}

cout << endl;

goto begin;

return 0;

}

void create(int val){

front = new Node();

front->val = val;

//transversing

front->prev = NULL;

front->next = NULL;

rear = front;

totalNode++;

}

void insert(int val){

if(totalNode == 0){

create(val);

return;

}

newNode = new Node();

newNode->val = val;

//transversing

front->prev = newNode;

newNode->next = front;

newNode->prev = NULL;

front = newNode;

totalNode++;

cout << "Data yang baru dimasukan diletakkan SEBELUM data Pertama" << endl << endl;

}

void remove(){

del = front;

front = front->next;

front->prev = NULL;

delete del;

cout << "Data terdepan berhasil dihapus" << endl;

totalNode--;

}

void print(){

cur = front;

cout << "| ";

while(cur != NULL){

cout << cur->val << " | ";

cur = cur->next;

}

cout << endl;

}




2. Implementasikan operasi dasar Double Linked List : Menyisipkan setelah simpul tertentu. Tambahkan kondisi jika data yang disisipkan setelahnya adalah data terakhir.

#include <iostream>
#include <windows.h>
using namespace std;
 
struct node
{
 int value;
 struct node* next;
 struct node* prev;
};
struct node* awal;
struct node* akhir;
void init()
{
 awal=NULL;
 akhir=NULL;
}
void sisipAwal(int element)
{
 struct node* DataBaru;
 DataBaru=new node;
 if(awal==NULL)
 {
  awal=DataBaru;
  DataBaru->prev=NULL;
  DataBaru->value=element;
  DataBaru->next=NULL;
  akhir=DataBaru;
 }
 else
 {
  DataBaru->next=awal;
  DataBaru->value=element;
  DataBaru->prev=NULL;
  awal->prev=DataBaru;
  awal=DataBaru;
 }
}
void sisipSesudah(int DataLama, int element)
{
 struct node* DataBaru;
 DataBaru=new node;
 struct node* temp;
 temp=awal;
 if(awal==NULL)
 {
  cout<<"tidak bisa di insert"<<endl;
  return;
 }
 if(awal==akhir)
 {
  if(awal->value!=DataLama)
  {
   cout<<"tidak bisa di insert"<<endl;
   return;
  }
  DataBaru->value=element;
  awal->next=DataBaru;
  DataBaru->next=NULL;
  awal->prev=NULL; 
  DataBaru->prev=awal;
  akhir=DataBaru;
  return;
 }
 if(akhir->value==element)
 {
  DataBaru->next=NULL; 
  DataBaru->prev=akhir;
  akhir->next=DataBaru;
  akhir=DataBaru;
  return;
 }
 while(temp->value!=DataLama)
 {
  temp=temp->next;
  if(temp==NULL)
  {
   cout<<"tidak bisa di insert"<<endl;
   cout<<"element tidak ditemukan"<<endl;
   return;
  }
 }
 DataBaru->next=temp->next;
 DataBaru->prev=temp;
 DataBaru->value=element;
 temp->next->prev=DataBaru;
 temp->next=DataBaru;
}
void printList()
{
 struct node* temp;
 temp=awal;
 while(temp!=NULL)
 {
  cout<<temp->value; 
  temp=temp->next;
 }
 puts("");
}
int main()
{
 cout<<endl;
 init();
 int choice;
 while(1)
 {
  cout<<"Program Double Linked List"<<endl<<endl;
  cout<<"1.Tambah Data"<<endl;
  cout<<"2.Sisipktelah data tertentu"<<endl;
  cout<<"3.Cetak list"<<endl<<endl;
  cout<<"Masukkan pilihan = "<<endl;
  cin>>choice;
  if(choice==1)
  {  
   system ("cls");
   int element;
   cout<<"Masukkan Data = ";
   cin>>element;
   sisipAwal(element);
   printList();
  }
  else if(choice==2)
  { 
   system ("cls"); 
   int DataLama,DataBaru;
   cout<<"Masukan setelah Data = ";
   cin>>DataLama;
   cout<<"Masukkan Data baru = ";
   cin>>DataBaru;
   sisipSesudah(DataLama,DataBaru);
   printList();
  }
  else if(choice==3)
  {
   system ("cls");
   printList();
  }
 }
 return 0;
}








3. Merepresentasikan sebuah bilangan polinomial dengan double linked list. 
Masalah aritmatika polinom adalah membuat sekumpulan subrutin manipulasi terhadap polinom simbolis (symbolic Polynomial). Misalnya: 
P1 = 6x 8 + 8x7 + 5x5 + x 3 + 15 
P2 = 3x9 + 4x7 + 3x4 + 2x 3 + 2x2 + 10 
Representasikan bilangan polinom dengan menggunakan linked list dan buatlah prosedur-prosedur untuk : 
• Menyisipkan simpul di awal jika pangkat yang dimasukkan lebih dari pangkat tertinggi dari bilangan polinomial. 
• Menyisipkan simpul di tengah jika pangkat dari bilangan yang kita sisipkan berada di tengah. 
• Menyisipkan simpul di akhir jika pangkat dari bilangan yang disisipkan adalah 0. 
• Menghapus simpul, baik di awal, di tengah, ataupun di akhir.

#include <iostream>
using namespace std;
struct Node{
int val;
int pangkat;
Node *next;
Node *prev;
};
Node *front, *rear, *cur, *temp, *newNode, *del, *afterNode;
int totalData = 0;
void print();
void createLinkedList(int val, int pangkat);
void insertFront(int val, int pangkat);
void insertRear(int val, int pangkat);
void insertMid(int val, int pangkat, int posisi);
void masuk(int val, int pangkat);
void remove();
int main(){
createLinkedList(3,9);
masuk(2,7);
masuk(4,8);
masuk(7,5);
masuk(6,6);
masuk(15,0);
masuk(11,4);
print();
remove();
print();
return 0;
}
void createLinkedList(int val, int pangkat){
front = new Node();
front->val = val;
front->pangkat = pangkat;
//transversing
front->next = NULL;
front->prev = NULL;
rear = front;
totalData++;
void insertFront(int val, int pangkat){
newNode = new Node();
newNode->val = val;
newNode->pangkat = pangkat;
//transversing
newNode->next = front;
newNode->prev = NULL;
front = newNode;
totalData++;
}
void insertRear(int val, int pangkat){
newNode = new Node();
newNode->val = val;
newNode->pangkat = pangkat;
//transversing
newNode->next = NULL;
newNode->prev = rear;
rear->next = newNode;
rear = newNode;
totalData++;
}
void insertMid(int val, int pangkat, int posisi){
newNode = new Node();
newNode->val = val;
newNode->pangkat = pangkat;
cur = front;
int i = 1;
while(i < posisi){
cur = cur->next;
i++;
}
//transversing
afterNode = cur->next;
afterNode->prev = newNode;
newNode->next = afterNode;
newNode->prev = cur;
cur->next = newNode;
totalData++;
}
void masuk(int val, int pangkat){
int j=1;
if(pangkat > front->pangkat){
insertFront(val,pangkat);
}
else{
temp = front->next;
while(temp != NULL){
if(pangkat > temp->pangkat) break;
j++;
temp = temp->next;
}
if(j != totalData){
insertMid(val, pangkat, j);
}else{
insertRear(val, pangkat);
}
}
cout << "Data dengan Nilai " << val << " Pangkat " << pangkat << " telah ditambahkan" << endl << endl;
}
void remove(){
del = front;
front = front->next;
cout << "Data dengan Nilai " << del->val << " Pangkat " << del->pangkat << " telah dihapuskan" << endl << endl;
delete del;
totalData--;
}
void print(){
cur = front;
while(cur != NULL){
cout << cur->val;
if(cur->pangkat != 0){
cout << "X^" << cur->pangkat;
if(cur->next != NULL){
cout << " + ";
}
}
cur = cur->next;
}
cout << endl << endl;
}


Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna Veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

0 comments:

Categories

Contact Us

BAYU
+62 896-2690-9619
Kampar, Riau, Indonesia