Senin, 28 Maret 2011

Tugas Single Linked List

ALGORITMA

Procedure sisip_awal (input tamu : dtamu, i/o head,tail: simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di depan pada single linked list}
kamus :

            baru : simpul
algoritma :
            alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
if (head=nil)
then
            baru↑.nextßnil
            tail ßbaru
else
            baru↑.nextßhead
endif
headßbaru
endprocedure

procedure sisip_akhir (input tamu : dtamu, i/o head, tail : simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di belakang pada single linked list}
kamus :

            baru : simpul
algoritma :
            alloc (baru)
            baru↑.noßno.tamu
            baru↑.namaßnama.tamu
            baru↑.nextßnil
            if (head=nil)
            then
                        headßbaru
            else
                        tail ↑.nextßbaru
            endif
            tail ßbaru
endprocedure

procedure sisip_tengah(input tamu : dtamu, i/o head, tail : simpul)
{I.S : data yang akan disisipkan, pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang disisipkan di tengah pada single linked list}
kamus :
procedure sisip_akhir (input tamu : dtamu,i/o head, tail : simpul)

baru,bantu : simpul
ketemu : boolean
datasisip : string
algoritma :
            if (head=nil)
            then
                        alloc (baru)
                        baru↑.noßno.tamu
baru↑.namaßnama.tamu
baru↑.nextßnil
headßbaru
tail ßbaru
else
            input (datasisip)
bantußhead
ketemußfalse
while(not ketemu and bantu≠nil) do
            if ((datasisip=bantu↑.no) and (datasisip=bantu↑.nama))
            then
                        ketemußtrue
            else
                        bantußbantu↑.next
            endif
                        endwhile
            if (ketemu)
            then
                        alloc (baru)
baru↑.noßno.tamu
baru↑.namaßnama.tamu
if (bantu=tail)
then
            sisip_akhir (tamu,head, tail)
else
            baru↑.nextßbantu↑.next
            bantu↑.nextßbaru
endif
                        else
                                    output (‘Data yang akan disisipkan tidak ada’)
                        endif
            endif
endprocedure

allocated_dtamu(input tamu : dtamu,i/o head,tail : simpul)
{I.S : data yang akan disisipkan sudah terdefinisi}
{F.S : - }
kamus :

algoritma :
            alloc(baru)
            input(no.tamu)
            input(nama.tamu)
endprocedure

procedure del_awal (i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk tail sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di depan pada single linked list}
kamus :
            phapus : simpul
algoritma :
if (head=nil)
then
            output (‘Data kosong & tidak bisa dihapus’)
else
if (head= tail)
then
            noßhead↑.no
namaßhead↑.nama
            dealloc (head)
            head↑.noßnil
            head↑.namaßnil
akhir↑.noßnil
tail ↑.namaßnil
else
            phapusßhead
            noßhead↑.no
            namaßhead↑.nama
headßhead↑.next
dealloc (phapus)
endif
endprocedure

procedure del_akhir (i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk akhir sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di belakang pada single linked list}
kamus :
            phapus : simpul
algoritma :
            if (head=nil)
then
                        output (‘Data kosong dan tidak bisa dihapus’)
else
if (head= tail)
then
                        noß tail ↑.no
namaß tail ↑.nama
dealloc (baru)
tail ↑.noßnil
tail ↑.namaßnil
head↑.noßnil
head↑.namaßnil
            else
                        phapusß tail
while (phapus↑.next≠ tail) do
                                    bantußbantu↑.next
endwhile
tail ßphapus
phapusß tail ↑.next
noß tail ↑.no
namaß tail ↑.nama
dealloc (phapus)
endif
endprocedure

procedure del_tengah (input posisi : integer, i/o head, tail : simpul)
{I.S : pointer penunjuk head & pointer penunjuk akhir sudah terdefinisi}
{F.S : menghasilkan satu simpul yang dihapus di tengah pada single linked list}
kamus :
            banyakdata,poshapus : integer
            prev,hapus : simpul
algoritma :
            if (head=nil)
then
                        output (‘Linked list kosong’)
else
                        banyakdata=1
prev=head
while(prev↑.next≠nil) do
                                    prev=prev↑.next
                                    banyakdata=banyak + 1
endwhile
if ((posisi<1) or (posisi>banyakdata))
then
                                    output (‘posisi di luar jangkauan’)
else
if (posisi=1)
then
                                    del_awal (head, tail)
else
if (posisi=banyakdata)
then
                                    del_akhir(head, tail)
else
                                    prev=head
poshapus=1
while(poshapus<(posisi-1)) do
                                                prev=prev↑.next
                                                poshapus=poshapus+1
endwhile
hapus=prev↑.next
prev↑.next=hapus↑.next
dealloc(hapus)
                        endif
            endif
endprocedure

procedure cari (input tamu : dtamu,i/o head : simpul)
{I.S : data yang dicari,pointer penunjuk head dan pointer penunjuk akhir telah terdefinisi }
{F.S : menampilkan data yang dicari}
kamus :
            bantu : simpul
            posisi,ketemu : integer
algoritma :
            ketemu=0
if (head≠nil)
then
                        posisi=1
bantußhead
while ((bantu≠nil) and (ketemu=0)) do
if ((bantu↑.no=no) and (bantu↑.nama=nama))
then
                                                ketemu=1
else
                                                bantußbantu↑.next
posisißposisi + 1
endif
                        endwhile
            endif
endprocedure

procedure tampil ( i/o head : simpul)
{I.S : pointer penunjuk head telah terdefinisi }
{F.S : menampilkan data yang sudah terurut secara descending}
kamus :
bantu,bantu2,idxterkecil : simpul
temp : integer
algoritma :
            if (head≠nil)
then
                        bantu=head
                        while (bantu↑.next≠nil) do
                                    bantu2=bantu
idxterkecil=bantu
while (bantu2≠nil) do
                                                if (bantu2↑.no < idxterkecil↑.no)
then
                                                            idxterkecil=bantu2
endif
bantu2=bantu2↑.next
endwhile
if (bantu↑.no > idxterkecil↑.no)
then
temp=bantu↑.no
bantu↑.no=idxterkecil↑.no
idxterkecil↑.no=temp
                                    endif
                                                bantu=bantu↑.next
                        endwhile
            else
                        output (‘Pengurutan dibatalkan karena linked list kosong’)
            endif
endprocedure

procedure listkosong ( i/o head : simpul)
{I.S : pointer penunjuk head telah terdefinisi }
{F.S : menampilkan list kosong}
kamus :

algoritma :
output("                                List Kosong               \n");
output("                       Masukkan Data Terlebih Dahulu      \n\n\n");
endprocedure

{algoritma utama}
Algoritma_penyisipan
kamus :
procedure sisip_awal (input tamu : dtamu i/o head, tail : simpul)
procedure sisip_akhir (input tamu : dtamu, i/o head, tail : simpul)
procedure sisip_tengah (input tamu : dtamu, i/o head, tail : simpul)
procedure del_depan (i/o head, tail : simpul)
procedure del_akhir (i/o head, tail : simpul)
procedure del_tengah (input posisi : integer, i/o head, tail : simpul)
procedure cari(input tamu : dtamu ,i/o head : simpul)
allocated_dtamu(input tamu : dtamu,i/o head,tail : simpul)
procedure listkosong ( i/o head : simpul)
procedure tampil ( i/o head : simpul)
procedure urut (i/o head : simpul)

{Deklarasi}
simpul=↑dtamu
dtamu=record
< no : integer,
nama : string,
next : simpul>
endrecord
head, tail =simpul {pointer penunjuk}
menu,posisi : integer
no : integer
nama: string
algoritma :
headßnil
tail ßnil
repeat
output (‘MENU LINKED LIST’)
output (‘1.Sisip Data Tamu’)
output (‘2.Hapus Data’)
output (‘3.Cari Data’)
output (‘4.Tampil Data secara descending’)
output (‘5.Keluar’)
input (menu)
if (menu=1)
then
output (‘1.Sisip Depan’)
output (‘2.Sisip Tengah’)
output (‘3.Sisip Belakang’)
input (menu)
depend on (menu)
(menu=1) : allocated_dtamu(no,nama)
                                                sisip_awal (no,nama,head, tail)
(menu=2) : allocated_dtamu(no,nama)
                                                sisip_tengah (no,nama,head, tail)
(menu=3) : allocated_dtamu(no,nama)
sisip_akhir (no,nama,head, tail)
enddepend
                        else
                        if (menu=2)
                        then
output (‘1.Hapus Awal’)
output (‘2.Hapus Tengah’)
output (‘3.Hapus Akhir’)
input (menu)
depend on (menu)
(menu=1) : del_awal (head, tail)
(menu=2) : del_tengah (posisi,head, tail)
(menu=3) : del_akhir (head, tail)
                                    enddepend
                        else
if (menu=3)
then
                                    cari (no,nama ,head)
else
if (menu=4)
then
                                    tampil (head)
endif
            until (menu=5)
endalgoritma

BAHASA C

#include<stdio.h>
#include<stdlib.h>

typedef struct simpul dtamu;
struct simpul
       {
             int no;
             char nama[20];
             dtamu *next;
       };
         dtamu *head;
         dtamu *p;
         dtamu *bantu;
         dtamu *bantu2;
         dtamu *tail;
         int allocated_dtamu(int *no,char *nama);
void menu();
void sisip();
void sisip_awal();
void sisip_akhir();
void sisip_sesudah();
void sisip_sebelum();
void del();
void del_awal();
void del_akhir();
void del_tengah();
void tampil();
void cari();
void listkosong();
void urut();

int main(int argc, char *argv[])
{
     do  {
  menu();
}while(1);
  system("PAUSE");   
  return 0;
}

void menu()  {
    int pil,no;
    char nama[20];
      printf("                                 MENU LINKED LIST                          \n");
      printf("                     ==================================\n");
      printf("                          1.Sisip Data Tamu                                        \n");
      printf("                          2.Hapus Data                                                \n");
      printf("                          3.Cari  Data                                                   \n");
      printf("                          4.Tampil Data Secara Descending                \n");
      printf("                          5.Keluar                                                          \n");
      printf("                     ===================================\n");
      printf("                            Masukkan Pilihan Anda [1..5] : "); scanf("%d",&pil);
      switch(pil)
      {
           case 1:
                  system("CLS");
                  allocated_dtamu(no,nama);
                  sisip();
                  break;
           case 2:
                  system("CLS");
                  del();
                  break;
           case 3:
                system("CLS");
                cari();
               system("PAUSE");
               system("CLS");
                break;
           case 4:
                  system("CLS");
                   urut();
                   tampil();
                     system("PAUSE");
                      system("CLS");
                      break;
           case 5:
                  exit(0);
                  break;
      }     
              printf("\n");
     }
    
void sisip()
     {
            system("CLS");
      int pil;
      printf("\n");
      printf("                               MENU SISIP                 \n");
      printf("                     ================================\n");
      printf("                              1.Sisip Awal             \n");
      printf("                              2.Sisip Akhir             \n");
      printf("                              3.Sisip Sesudah             \n");
      printf("                              4.Sisip Sebelumn          \n");
      printf("                     ================================\n");
      printf("                     Masukkan Pilihan Anda [1..4] : "); scanf("%d",&pil);
      switch(pil)
      {
      case 1:
            system("CLS");
              sisip_awal();
               tampil();
              break;
      case 2:
            system("CLS");
             sisip_akhir();
              tampil();
             break;
      case 3:
            system("CLS");
             sisip_sesudah();
              tampil();
             break;
      case 4:
            system("CLS");
             sisip_sebelum();
              tampil();
             break;
      }
       printf("\n");
     }
    
int allocated_dtamu(int *no,char *nama){
p=(dtamu *)malloc(sizeof(dtamu));
if(p==NULL){
printf("Pemesanan Alokasi Memori GAGAL\n");
return 0;
}
else
{
printf("                        Masukkan No.Tamu : ");scanf("%d",&p->no);fflush(stdin);
printf("                        Masukkan Nama Tamu : ");gets(p->nama);fflush(stdin);
p->next=NULL;
return 1;
printf("\n");
}
}

void sisip_awal()
 {
      if(allocated_dtamu==0){
      printf("Pemesanan Memori GAGAL\n");
exit(0);
         }              if(head==NULL)
                        head=p;
         else{
             p->next=head;
             head=p;
         }
         fflush(stdin);
;}

void sisip_akhir() {
  dtamu *tail;
  tail=head;
  if(allocated_dtamu==0)
  exit(0);
          if(head==NULL)
          {
           head=p;
           tail=p;
           }
           else {
                  while(tail->next!=NULL) {
                  tail=tail->next;
           }
                  tail->next=p;
                  tail=tail->next;
           }
          }
         
void tampil() {
      dtamu *tampil;
      tampil=head;
                             printf("   =====================================\n");
     printf("                         NO            \        NAMA  \n\n");
                            
                while(tampil!=NULL)
                {
                             printf("     %d     \       %s\n\n",tampil->no,tampil->nama);  
                 tampil=tampil->next;
                 }
      }

void sisip_sebelum() {
      dtamu *bef;
      dtamu *pbef;
      int x;
          printf("\n");
          if(allocated_dtamu==0){
           printf("Pemesanan Memori GAGAL\n");
            exit(0);
           }
            fflush(stdin);
          system("CLS");
           printf("Data tersebut akan disisipkan sebelum Tamu.no?");scanf("%d",&x);
           system("CLS");
             bef=head;   
      if(head->no==x){
       p->next=head;
       head=p;
       }
       else {
         do {
              pbef=bef;
                       if(bef->next==NULL)
                       {
                        printf("data %d tidak ada dalam linked list\n",x);
                                     exit(0);
                        }
                        else {
                          bef=bef->next;
                        }
              }
              while(bef->no!=x);
                                 p->next=bef;
                                 pbef->next=p;
         }
       }
      
void sisip_sesudah() {
     int x;
     dtamu *after;
          if(allocated_dtamu==0) {
            printf("pemesanan memori GAGAL\n");
            exit(0);
          }
          after=head;
                      printf("\n");
                       system("CLS");
                      printf("Data akan disisipkan setelah Tamu.no?"); scanf("%d",&x);
                       system("CLS");
          while(after->no!=x) {
          if(after->next==NULL)
               printf("Data tidak ada dalam linked list\n");
          else
               after=after->next;
          }
               p->next=after->next;
                                    after->next=p;
          }         
         
void del() {
      int pil;
          printf("\n");
          printf("MENU HAPUS\n");
          printf("================================\n");
          printf("1.Hapus Awal               \n");
          printf("2.Hapus Akhir\n");
          printf("3.Hapus Tengah\n");
          printf("================================\n");
          printf("Masukkan Pilihan Anda [1..4] : "); scanf("%d",&pil);
          switch(pil) {
                     case 1:
                           system("CLS");
                          del_awal();
                          tampil();
                          break;
                     case 2:
                           system("CLS");
                          del_akhir();
                          tampil();
                          break;
                     case 3:
                           system("CLS");
                          del_tengah();
                          tampil();
                          break;
          }
      }
     
void del_awal() {
      dtamu *hapus;
      hapus=head;
      head=hapus->next;
      free(hapus);
      hapus=NULL;
      }
    
void del_akhir()   {
      dtamu *prev;
      dtamu *hapus;
      hapus=head;
      while(hapus->next!=NULL)   {
             prev=hapus;
             hapus=hapus->next;
      }
             prev->next=NULL;
             free(hapus);
             hapus=NULL;
     }
    
void del_tengah()   {
      int x;
      dtamu *prev;
      dtamu *hapus;
      prev=head;
       system("CLS");
                printf("setelah Tamu.no ke berapa yang ingin di hapus?"); scanf("%d",&x);
                while(prev->no!=x) {
                  if(prev->next==NULL)
                                       printf("Tamu no.%d tidak ada dalam linked list\n",x);
                  else   {
                   prev=prev->next;
                   }
               }
               hapus=prev->next;
               prev->next=NULL;
               free(hapus);
               hapus=NULL;
}

void listkosong(){
    system("cls");   
    printf("              List Kosong               \n");
    printf("   Masukkan Data Terlebih Dahulu      \n\n\n");
}

void cari()
{
     int no;
     char nama[20];
  char cari[24];
  dtamu *nmbantu;
  int ketemu;
  if(head==NULL)  {     
   listkosong();
  }
  else {
   printf("    \n ");
   printf("  Masukkan no Tamu   : ");fflush(stdin);scanf("%d",&p->no);
   printf("   Masukkan Nama Tamu : ");fflush(stdin);gets(cari);
   nmbantu = head;
   ketemu = 0;
   while(ketemu==0 && nmbantu != NULL)
   {
   if(strcmpi(cari,nmbantu->nama)==0)
      ketemu = 1;
   else
      nmbantu = nmbantu->next;
   }
   if(ketemu==1)
   {
     printf("                 \n\n\n");
     printf("                             List yang Dicari     \n");
     printf("                           ====================           \n");
     printf("                 \n");
     printf("                 \n");
     printf("                               %d   \     %s  \n\n",nmbantu->no,nmbantu->nama);
   }
   else {
    system("cls");      
   printf("                                           \n");
   printf(" Maaf, List yang Anda Cari Tidak Ditemukan \n");
   printf("                                           \n");
   }
 }
}
void urut()
{
char temp[10];
bantu=tail;
while(bantu!=tail)
{
bantu2=bantu->next;
while(bantu2!=NULL){
if(strcmp(bantu2->nama, bantu->nama)>=0){
strcpy(temp, bantu->nama);
strcpy(bantu2->nama, bantu->nama);
strcpy(bantu->nama, temp); }
bantu2=bantu2->next;
}
bantu=bantu->next;

Tidak ada komentar:

Posting Komentar