Salam semua...kali ni Ain nak kongsi dgn u all tentang Linked list (senarai terpaut)? Pada siapa yang biasa dengan Struktur Data mungkin biasa dengan linked list ni kan..So, tak nak berceloteh banyak lagi jom kita belajar linked list ok... :) . Ni tugasan ketiga Ain. Hopefully dapat membantu anda supaya lebih faham tentang link list ok..
Apa itu Linked list?
Link list merupakan satu struktur data yang berangkaian atau dengan kata lain ia mempunyai daftar rekod dari jenis yang sama. Kalau anda semua nak pandai dalam linked list ni anda semua kena faham tentang konsep pointer dulu ok. Sebabnya linked list dan pointer tidak dapat dipisahkan. Pointer digunakan untuk tunjuk kepada data. Dengan adanya pointer maka mudahlah untuk kita point ke mana satu data yang kita nak cari, nak delete ke..dan lain-lain lagi...
Kalau nak lebih faham lg..bawah ni contoh macam mana nak
insert data.
yang ni pulak cane nak delete data di depan senarai
Delete di tengah senarai
Bawah ni ada contoh linked list yang dah siap..u all boleh lah run n tengak cne hasilnya ok... :)
/*DISEDIAKAN OLEH SITI AINSHAH BINTI ISMAIL
*D20112052132
*PROGRAM AT47
*TUGASAN 2
*VERSION 2.2
*KUMPULAN B
*/
#include<iostream.h>
#include<string.h>
#include<sstream.h>
using namespace std;
// ini adalah struktur node dalam list
// struktur ini ada 2 item
//item 1 : data berjenis int
//item 2 : pointer bernama next
struct node //Nama struct node
{
string nopekerja; //Elemen bagi struct
node *ptrnext;
string nama;
float gaji;
};
void insert(); //fungsi masukan data
void display(); //fungsi paparan
void search(); //fungsi cari data
void display(); //
node *head; //ini adalah untuk declare headptr
int main()
{
head = NULL; //ini untuk initialize list adalah empty
int i,n,size;
string mystr;
int data;
cout<<"SYARIKAT TELEKOM MALAYSIA "<<endl; //paparan untuk pilihan pengguna
cout<<endl<<endl;
cout<<"Press 1 to Insert data "<<endl;
cout<<"Press 2 to Search data "<<endl;
cout<<"Press 3 to Delete data "<<endl;
cout<<"Press 4 to Display data"<<endl;
cout<<endl;
cout<<endl;
do //gelung do..while untuk beri laksanakan pilihan untuk
//beberapa kali hingga masukan 0, gelung akan berhenti
{
cout<<"Please enter menu : ";
cin>>data;
cin.ignore();
cout<<endl;
cout<<endl;
if(data==1) //gelung akan dilaksanakan mengikut pilihan pengguna
{
insert();
}
else if(data==2)
{
search();
}
else if(data==3)
{
remove();
}
else if(data==4)
{
display();
}
else
{
cout<<"Please enter valid menu. Thank you";
}
}while(data!= NULL); //gelung tamat jika nilai yang dimasukkan pengguna ialah 0 atau NULL
}
/* Function ini untuk memasukkan data ke dalam list*/
void insert()
{
// cipta node baru
node *newptr;
node *cur , *prev;
cur = head;
prev = NULL;
string mystr;
newptr = new node;
//assign value untk node
cout<<"Enter customer name : ";
getline(cin,newptr->nama);
cout<<"Enter staff number : ";
getline(cin,newptr->nopekerja);
cout<<"Enter customer salary : RM ";
getline(cin,mystr);
stringstream(mystr)>>newptr->gaji;
newptr->ptrnext = NULL;
//link dengan head
// first kalau senarai ksong
if (head == NULL)
{
head = newptr ; //head akan point ke newptr
}
else // ini untuk insert di depan, di tengah dan di belakang
{
//gerakkan cur dan prev pointer
while(cur!= NULL && newptr->nopekerja > cur->nopekerja)
{
prev = cur;
cur = cur->ptrnext;
}
// insert depan
if (prev == NULL)
{
newptr->ptrnext = head;
head = newptr;
}
else //insert di tengah atau belakang
{
newptr->ptrnext = cur;
prev->ptrnext = newptr;
}
}
}
void search() //fungsi search() untuk cari data
{
node *newptr; //create node baru
node *cur;
node *prev;
string nama1;
cur = head; //point cur kepada head
cout<<" Search Data "<<endl; //arahan meminta user masukkan nama data ysng dicari
cout<<"_________________________";
cout<<endl;
cout<<"Please enter name : ";
getline(cin,nama1);
cout<<endl<<endl;
while(cur != NULL && nama1 != cur->nama) //uji jika cur tak kosong & nama1 tak sama dengan nama
{
cur = cur->ptrnext; //cur sama dengan cur->ptrnext/cur pergi sebelah
}
if(cur == NULL) //jika data tak dijumpai, arahan dikeluarkan
cout<<"Sorry, Data not found . "<<endl;
else
cout<<"Here is your record . "<<endl; //jika data ada, maklumat dipaparkan
cout<<endl;
cout<<"Name : "<< cur->nama <<endl;
cout<<"Staff Number : "<< cur->nopekerja <<endl;
cout<<"Salary : "<< cur->gaji <<endl;
cout<<endl<<endl;
}
void remove() //fungsi remove() untuk delete data
{
string mystr;
node *newptr; //create node baru
node *cur;
node *prev;
string STAFF_NO; //pengisytiharan pembolehubah IC_NO jenis long
cout<<" Remove Data "<<endl; //arahan meminta user masukkan no ic yang nak dibuang
cout<<"_________________________";
cout<<endl;
cout<<"Please enter Staff Number : ";
getline(cin,STAFF_NO);
cout<<STAFF_NO;
cout<<endl<<endl;
prev = NULL; //memberi nilai awal kepada prev iaitu kosong
cur = head; //point cur kepada head
cout<<cur->nopekerja;
if(head == NULL) //jika head kosong
cout<<"Sorry, Data not found."; //data tak dijumpai
else
{
while(cur != NULL && STAFF_NO != cur->nopekerja) //jika cur bukan NULL dan IC_NO tak sama dengan IC
{
prev = cur; //point prev kepada cur
cur = cur->ptrnext; //cur berpindah ke sebelah
}
if(prev == NULL) //jika prev NULL
{
head = head->ptrnext; //point head kepada head->ptrnext
delete cur ; //delete data
}
else if (cur == NULL) //jika cur NULL/data tak dijumpai
{
cout<<"Sorry, Data not in list. Please enter valid staff number"; //arahan dipapatkan
}
else
{
prev->ptrnext = cur->ptrnext;
delete cur;
}
}
}
//funciton ini adalah untuk display elemen adlam list
void display()
{
node *cur;
cur = head ;
cout<<"####################################################################"<<endl;
cout<<"Staff Number"<<"\t\t"<<"Name"<<"\t\t"<<"Salary"<<"\t\t"<<endl;
cout<<"---------------------------------------------------------------------"<<endl<<endl;
while(cur != NULL) //selagi current tidak null, loop ini akan print value
{
cout<<cur->nopekerja<<"\t\t\t"<<cur->nama<<"\t\t"<<cur->gaji<<endl;
cur = cur->ptrnext;
}
}



No comments:
Post a Comment