HOME

Kamis, 12 April 2012

LINKED LIST

Semoga program ini bermanfaat..

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

struct node {
int info;
struct node *next;
};


typedef struct node NODE;
typedef NODE* PTRNODE;

PTRNODE PtrAwal = NULL, tPtr;

void tambahAwal(PTRNODE *Ptr, int Value)
{
PTRNODE newPtr;
newPtr = (NODE *) malloc(sizeof(NODE));
newPtr->info = Value;
newPtr->next = *Ptr;
*Ptr = newPtr;
}


void tambahAkhir(PTRNODE *Ptr, int Value){
PTRNODE prevPtr = *Ptr, nowPtr = *Ptr, newPtr;
newPtr = (NODE *) malloc(sizeof(NODE));
newPtr->info = Value;
newPtr->next = NULL;
while (nowPtr != NULL) {
prevPtr = nowPtr;
nowPtr = nowPtr->next;
}


if (prevPtr == NULL)
*Ptr = newPtr;
else
prevPtr->next = newPtr;
}


void InsertOrder(PTRNODE *Ptr, int Value)
{
PTRNODE prevPtr = *Ptr, nowPtr = *Ptr, newPtr;
newPtr = (NODE *) malloc(sizeof(NODE));
newPtr->info = Value;
newPtr->next = NULL;
while (nowPtr != NULL && Value > nowPtr->info) {
prevPtr = nowPtr;
nowPtr = nowPtr->next;
}


if (prevPtr == NULL) {
newPtr->next = *Ptr;
*Ptr = newPtr;
}
else {
prevPtr->next = newPtr;
newPtr->next = nowPtr;
}
}


PTRNODE Cari(PTRNODE Ptr, int Value)
{
PTRNODE cariPtr = Ptr;
int Ketemu = 0;
while (cariPtr != NULL && Ketemu == 0) {
if (cariPtr->info == Value)
Ketemu = 1;
else
cariPtr = cariPtr->next;
}
return cariPtr;
}


PTRNODE PtrSebelum(PTRNODE Head, PTRNODE Ptr)
{
PTRNODE nowPtr = Head, prevPtr = NULL;
while (nowPtr != Ptr) {
prevPtr = nowPtr;
nowPtr = nowPtr->next;
}
return prevPtr;
}


void Hapus(PTRNODE *Ptr, int Value)
{
PTRNODE nowPtr, prevPtr, tPtr;
nowPtr = Cari(*Ptr, Value);
if (nowPtr != NULL) {
prevPtr = PtrSebelum(*Ptr, nowPtr);
if (prevPtr == NULL) {
tPtr = *Ptr;
*Ptr = (*Ptr)->next;
free(tPtr);
}
else {
prevPtr->next = nowPtr->next;
free(nowPtr);
}
}
}


void Cetak(PTRNODE Ptr)
{
int i =0;
while (Ptr != NULL) {
i++;
printf("%i   "  ,  Ptr->info);
Ptr = Ptr->next;
}
}


void main(){
int pil;

menu :
clrscr();
printf("+------------------------------------+\n");
printf("|            Menu Utama:             |\n");
printf("+------------------------------------+\n");
printf("| 1. Masukan Data                    |\n");
printf("| 2. Lihat                           |\n");
printf("| 3. Tambah Di Awal                  |\n");
printf("| 4. Tambah Di Belakang              |\n");
printf("| 5. Hapus Data                      |\n");
printf("+------------------------------------+\n\n");
printf("+------------------------------------+\n");
printf("|          Pilihan Anda : ?          |\n");
printf("+------------------------------------+\n");
scanf("%i", &pil);

switch (pil){

case 1 :
{
char lanjut = 'n';
int data;

do{
printf("\nMasukan Data : ");
scanf("%i", &data);
printf("lagi (y/n) :  ");
scanf("%s", &lanjut);
tambahAkhir(&PtrAwal,data);
}
while(lanjut != 'n');
goto menu;
}

case 2 :
{
Cetak(PtrAwal);
getch();
goto menu;
}

case 3 :
{
int data;
printf("Masukan data : ");
scanf("%i", &data);
tambahAwal(&PtrAwal, data);
getch();
goto menu;
}

case 4 :
{
int data;
printf("Masukan Data : ");
scanf("%i", &data);
tambahAkhir(&PtrAwal,data);
getch();
goto menu;
}

case 5 :
{
int data;
printf("Hapus data ke : ");
scanf("%i", &data);
Hapus(&PtrAwal, data);
getch();
goto menu;
}

}
}

***Selamat mencoba ^_^ GBU***

Tidak ada komentar:

Posting Komentar