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