Cara Membuat Program Struktur Data Dengan Menerapkan Algoritma Dijkstra

Algoritma Dijkstra, (dinamai menurut penemunya, seorang ilmuwan komputer, Edsger Dijkstra), adalah sebuah algoritma rakus (greedy algorithm) yang dipakai dalam memecahkan permasalahan jarak terpendek (shortest path problem) untuk sebuah graf berarah (directed graph) dengan bobot-bobot sisi (edge weights) yang bernilai tak-negatif.
Misalnya, bila vertices dari sebuah graf melambangkan kota-kota dan bobot sisi (edge weights) melambangkan jarak antara kota-kota tersebut, maka algoritma Dijkstra dapat digunakan untuk menemukan jarak terpendek antara dua kota.
Input algoritma ini adalah sebuah graf berarah yang berbobot (weighted directed graphG dan sebuah sumber vertex s dalam G dan V adalah himpunan semua vertices dalam graph G.
Setiap sisi dari graf ini adalah pasangan vertices (u,v) yang melambangkan hubungan dari vertex u ke vertex v. Himpunan semua tepi disebut E.
Bobot (weights) dari semua sisi dihitung dengan fungsi
w: E → [0, ∞)

jadi w(u,v) adalah jarak tak-negatif dari vertex u ke vertex v.
Ongkos (cost) dari sebuah sisi dapat dianggap sebagai jarak antara dua vertex, yaitu jumlah jarak semua sisi dalam jalur tersebut. Untuk sepasang vertex s dan t dalam V, algoritma ini menghitung jarak terpendek dari s ke t. dikutip dari wikipedia
kode program Algoritma Dijkstra dibuat menggunakan bahasa c


nah sudah jadi kan program nya cukup simple kan :D

Membuat Berbagai Operator Insert Atau Sisip Single Linked List dengan Bahasa C/ C++

Berikut ini saya akan membuat program single linked list yaitu dengan berbagai operator insert atau sisip yang diantaranya ada sebagai berikut fungsi sisip sebelum simpul, sisip setelah simpul dan sisip akhir ada juga sisip awal cukup lengkapkan. dengan ketentuan sebagai berikut : 
Untuk fungsi sisip sebelum simpul, jika data harus disisip di awal list maka akan mengubah posisi head. Demikian juga jika simpul tertentu yang dimaksud tidak ada maka ada pesan simpul baru tidak dapat disisipkan. 
Untuk fungsi sisip setelah simpul, jika simpul tertentu yang dimaksud tidak ada maka ada pesan simpul baru tidak dapat disisipkan. Selain kondisi tersebut, lakukan sisip di tengah. 
berikut listing kodenya


output nya kurang lebih seperti ini pada tampilan awal
#Tampilan  Awal.



selamat mencoba semoga bermanfaat

ALGORITMA STRUKTUR DATA SORTING DENGAN METODE QUICK SHORT

Pengantar Quick Short


        Berdasar dari wikipedia Quicksort merupakan Algoritma Sorting yang dikembangkan oleh Tony Hoare yang, secara kasus rata-rata, membuat pengurutan O(n log n) untuk mengurutkan n item. Algoritma ini juga dikenal sebagai Partition-Exchange Sort atau disebut sebagai Sorting Pergantian Pembagi. Pada kasus terburuknya, algoritma ini membuat perbandingan O(n2), malaupun kejadian seperti ini sangat langka. Quicksort sering lebih cepat dalam praktiknya dari pada algoritma O(n log n) yang lainnya.[1] Dan juga, urutan dan referensi lokalisasi memori quicksort bekerja lebih baik dengan menggunakan cache CPU, jadi keseluruhan sorting dapat dilakukan hanya dengan ruang tambahan O(log n. Quicksort merupakan sorting pembanding dan pada implementasi efisien tidak merupakan algoritma sorting yang stabil.

Algoritma

      Quicksort merupakan Algoritma Pembagi. Pertama sekali quicksort membagi list yang besar menjadi dua buah sub list yang lebih kecil: element kecil dan element besar. Quicksort kemudian dapat menyortir sub list itu secara rekursif.

Langkah-Langkah pengerjaannya ialah:
  1. Ambil sebuah elemen, yang disebut dengan pivot, pada sebuah daftar.
  2. Urutkan kembali sebuah list sehingga elemen dengan nilai yang kecil dari pivot berada sebelum pivot, sedangkan seluruh element yang memiliki nilai yang lebih besar dari pivot berada setelahnya (nilai yang sama dapat berada pada pivot setelahnya). Setelah pemisahan, pivot berada pada posisi akhirnya. Operasi ini disebut Partition.
  3. Sub list kemudian disortir secara recursif dari elemen yang lebih kecil dan sub list dari elemen yang lebih besar.

Kasus dasar dari rekusrif ialah list dari besaran nol atau satu, yang tidak perlu untuk di sorting.

berikut kode quick short versi ane sebagai contoh saja :


ini merupakan gambar simulasi dari quick short
quick short
simulasi quick short

semoga bermanfaat dan berkah ammin..

Membuat Program Delete Dengan Double Linked List

setelah lama tidak main - main dengan dunia linked list jarang menggunakannya alangkah baiknya saya share ke pada kalain supaya tidak mubadzir ilmunya dan bermanfaat buat kita semua ammin :). berikut ini double linked list ada single dan ada double kalai ini yang double yang akan saya contoh kan . Membuat program Dobule Linked List dengan Operator Delete ada bebarapa macam teknik delete yang ada di double linked list salah satunya delete awal,delete akhir dan delete setelahnya. ini saya menggunakan bahasa C atau C++. tetapi ini juga bisa diterapkan di bahasa lainnya kok misal java,dll.

#include"stdio.h"
#include"stdlib.h"


void alokasi();
void awal();
void cetak();
void menu();
//void target();
void del_awal();
void del_after();
void del_akhir();

typedef struct simpul Node;
struct simpul
{
	int data; 
	Node *next;
	Node *prev;
};

int nilai;
char jawab;
Node *head;
Node *p, *before, *x, *prevhapus, *tail,*hapus,*after;


main()
{	char pil;
	do
	{
		system("cls");

		menu();

		fflush(stdin);
		printf("\n kembali ke menu utama (y/t) \n");
		pil=getchar();

	}while(pil=='y'||pil=='Y');
}


void menu()
{	char pil;
	printf("\t delete data double list\n");
	puts("create by achmad sayfudin\n");
	puts("data yang ada ");
	cetak();
	puts("\t menu:");
	puts("1. insert awal");
	puts("2. delete awal");
	puts("3. delete after");
	puts("4. delete akhir");
	//puts("5. delete target");
	puts("6. cetak");
	fflush(stdin);
	printf("\nmasukan pilihan :> ");
	pil=getchar();

	if(pil=='1')
		awal();
	else if(pil=='2')
		del_awal();
	else if(pil=='3')
		del_after();
	else if(pil=='4')
		del_akhir();
	//else if(pil=='5')
		//target();
	else if(pil=='6')
		cetak();

}


void alokasi()
{	fflush(stdin);
	printf("nilai=");
	scanf("%d",&nilai);
	p=(Node *)malloc(sizeof(Node));
	
	if(p==NULL)
	{
		puts("<<----- data-blogger-escaped-boss="" data-blogger-escaped-memori="" data-blogger-escaped-penuh="">>");
		exit(0);
	}
	p->data=nilai;
	p->next=NULL;
	p->prev=NULL;
	

}

void awal()
{  
	char pil; 
	fflush(stdin);
	
	do
	{alokasi();
		if(head==NULL)
		{head=p; }
		else
		{p->next=head;
		head->prev=p;
		head=p;}
		
		fflush(stdin);
		printf("input lagi = ");
		pil=getchar();
	}while(pil=='y'||pil=='Y');	
		
}


void cetak()
{
	Node *baca;
	baca=head;
	while(baca!=NULL){
		printf("nilai %d \n",baca->data);
		baca=baca->next;	
	}

	
}


void del_awal()
{	
	//data tunggal
	if((head!=NULL)&&(head->next==NULL))
	{
		head->next=NULL;
		//puts("tak ada data yang dihapus");
	}
	//data banyak
	if(head!=NULL)
	{
		hapus=head;
		head=hapus->next;
		hapus->prev=NULL;
	}
	free(hapus);
	hapus=NULL;
}


void del_after()
{	
	int cari;
	printf("cari data= ");
	scanf("%d",&cari);
	
	after=head;
	
	
	while(after->data!=cari)
	{  //prevhapus=after;
		if(after->next==NULL)
		{printf("tak ada data yang dihapus");}
		else
		after=after->next;//update
	}

	if(after->next==NULL)
	puts("tak ada data yang dihapus");
	else{		
	hapus=after->next;
	//cek data diakhir
	if(hapus->next==NULL)
		after->next=NULL;
	else
	{
		after->next=hapus->next;
		hapus->next->prev=after;
	}
	
	free(hapus);
	hapus=NULL;
	printf("data %d berhasil dihapus\n",cari);
	}
}

void del_akhir()
{
	hapus=head;
	if(head!=NULL)
		if(head->next==NULL)//data tunggal
		{del_awal();}
		else
		{
			while(hapus->next!=NULL)
			{hapus=hapus->next;}//update
			hapus->prev->next=NULL;
		}
		
free(hapus);
hapus=NULL;
}


/*void target()

{
    int cari;
	printf("cari data= ");
	scanf("%d",&cari);
	x=head;
	while(x->data!=cari)
	{  if(x->next==NULL)
		exit(1);
		else
			prevx=x;
			x=x->next;
	}
	prevx->next=x->next;
	
	
	free(x);
	x=NULL;

}*/

untuk outputnya bisa dijalankan sendiri di komputer masing-masing dengan kompiler kesukaan anda ok ? jika ada yang ditanyakan silakan komen ya terima kasih . Oya untuk programnya bisa di download disini.
luntas ilmu berbagi ilmu
luntas ilmu

Pengertian Stack dalam Struktur Data

 STACK
q  LINEAR LIST
¨       Linear list adalah suatu struktur data yang merupakan himpunan terurut dari satuan data atau dari record.
¨       Elemen yang terdapat dalam daftar disebut simpul/node.
¨       Daftar disebut Linear karena elemen nampak seperti baris, bahwa setiap simpul (kecuali simpul pertama dan terakhir) selalu memiliki elemen penerus langsung (suksesor) dan elemen pendahulu langsung (predesor).
¨       Misalnya didefinisikan suatu linear list A yang terdiri atas T buah elemen sebagai berikut :

A=[ a1,a2,……………, aT ]


     Jika T = 0 , maka A dikatakan sebagai “Null List” (list hampa).
¨       Suatu elemen dapat dihapus (delete) dari sembarang posisi pada linear list .
¨       Suatu elemen baru dapat dimasukkan (insertion) kedalam list dan dapat menempati sembarang posisi pada list tersebut.
¨       Jadi suatu linear list dapat berkurang atau bertambah setiap saat
Contoh : file merupakan linier list yang elemen-elemennya berypa record.

q  DEFINISI STACK
STACK adalah suatu bentuk khusus dari linear list di mana operasi  penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yaitu posisi akhir dari list. Posisi ini disebut puncak atau disebut sebagai “TOP(S)”.
¨       Prinsip Stack adalah LIFO ( Last In First Out ) atau Terakhir masuk pertama keluar.
Setiap elemen tidak dapat dikeluarkan (POP keluar) sebelum semua elemen diatasnya dikeluarkan.
¨       Elemen teratas (puncak) dari stack dinotasikan sebagai TOP(S)
Misal diberikan stack S sebagai berikut :
S= [ S2,S2,………, ST ] è maka TOP(S) = ST
¨       Untuk menunjukkan  jumlah elemen suatu stack digunakan notasi NOEL(S).
Dari stack diatas  maka NOEL(S) = T.
NOEL(S) menghasilkan nilai integer.




Jika diberikan sebuah stack S = [A,B,C,D] maka stack S ini dapat digambarkan sebagai berikut :
ilustrasi stack
ilustrasi stack


q  OPERASI PADA STACK
1.   CREATE (STACK)
2.   ISEMPTY (STACK)
3.   PUSH (ELEMEN, STACK)

4.   POP (STACK)

Membuat Program Antrian Mobil dengan Stack

selamat malam sharing lagi sebelum aktivitas, ilmu yang tidak disharing tidak ada gunanya menurut saya sih hehhe. Jadi ini aku share sedikit ilmu tentang stack apa itu stack ? masuk kesini . Sebenarnya ini cuma iseng2 membuat program ini daripada ngangur buat ngisi waktu kosong coba-coba implemtasikan stack yang saya dapat di perkuliahan untuk saya terapkan di program di bawah ini. Jangan bingung ya dengan kode saya di bawah ini soalnya memang tidak ada dokumentasi untuk kode program tersebut, jika ada yang bingung langsung komen saya ya . ok dari pada lama-lama nanti keburu dingin kopinya :D ini ada contoh program langsung saja ya ke praktikum soalnya saya bingung panjang lebar hehe ikuti kode program.


hasilnya apa ya bisa di coba dulu nanti keluarnya apa pasti ok ?

MODUL STRUKTUR DATA REKURSIF DENGAN BAHASA C/C++

-Luntas Ilmu-  selamat pagi teman kembali lagi mari kita belajar struktru data dengan metode rekursif dan di implementasikan menggunakan bahasa c/c++ cukup mudah sebernya rekursif ini diantara ilmu yang ada di struktur data :D . Pengertiannya bisa di lihat dibawah ini ya ?


PENGERTIAN REKURSIF
Rekursif berarti bahwa suatu proses bisa memanggil dirinya sendiri. Menurut definisi dalam Microsoft Bookshelf, Rekursif adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam Rekursif sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus dipanggil lewat pemanggil prosedur dan fungsi. Rekursif merupakan teknik pemrograman yang penting dan beberapa bahasa pemrograman mendukung keberadaan proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri bisa berarti proses berulang yang tidak bisa diketahui kapan akan berakhir.Rekursi biasanya di gunakan secara iteratif yaitu melakukan pengulangan operasi sampai jumlah pengulangan yang di inginkan.

ini ada beberapa contoh rekursif mungkin bisa menambah referensi anda :)
1. faktroial
//faktorial

#include"stdio.h"

void menu();
void iterasi();
int rekursif(int );
int tail(int ,int);

main(){
	menu();

}

void menu(){
	char pil,jawab;
	int a=1,f;
	do{
		puts("PROGRAM FAKTORIAL");
		printf("1.iterasi biasa\n2.rekursif\n3.rekursif tail\n");
		fflush(stdin);
		printf("masukan pilihan : ");
		pil=getchar();

		switch(pil){
		case '1':iterasi();break;
		case '2':
			{
				puts("\n=========================");
				puts("\t rekursif ");
				puts("=========================");
				printf("masukan faktorial dari : ");
				scanf("%d",&f);
				printf("faktorial=%d",rekursif(f));
				break;
			}
		case '3':{
				puts("\n=========================");
				puts("\t TAIL ");
				puts("=========================");
				printf("masukan faktorial dari : ");
				scanf("%d",&f);
				printf("faktorial=%d",tail(f,a));
				break;
		
			break;
			
			}
		}
		
		//if(pil=='1')
		//	iterasi();
		fflush(stdin);
		printf("\nmau input lagi : ");
		jawab=getchar();
	
	}while(jawab=='y'||jawab=='Y');
}

void iterasi(){
	int i,f,hasil=1;
	puts("\n=========================");
	puts("\t iterasi ");
	puts("=========================");
	printf("masukan faktorial dari : ");
	scanf("%d",&f);

	for(i=f;i>=1;i--){
		hasil=hasil*i;
	}
	printf("\nhasil faktorial = %d\n",hasil);
}


int rekursif(int f){
	if(f==1)
		return 1;
	else if(f==0)
		return 1;
	else
		return(f*rekursif(f-1));
}

int tail(int n, int a){

if (n < 0)
	return 0;
else if (n == 0)
	return 1;
else if (n == 1)
	return a;
else
	return tail(n-1,n*a);
}

 

MODUL MEMAHAMI QUEUE MENGGUNAKAN LINKED LIST DI BAHASA C/C++


ANTRIAN QUEUE
mari belajar queue suatu struktur data antrian yang memiliki dua versi yaitu diterapkan dengan array atau dengan linked list yang saya contohkan di bawah ini dengan linked list. Sebelum mengenal jauh dengan queue alangkah baiknya kita memahmi dulu apa sih queue itu ??

Queue
Adalah suatu bentuk khusus dari linear list dengan operasi penyisipan (insertion) hanya pada salah satu sisi ( Rear/ belakang) dan operasi penghapusan (deletion) hanya diperbolehkan pada sisi lainnya (Front/ depan) dari list.

Antrean Q = [ Q1, Q2, Q3,……….., QT]
Front(Q) = bagian depan dari antrean Q
Rear(Q) = bagian belakang dari antrean Q
Noel(Q) = Jumlah elemen di dalam antrean ( berharga integer)
Jadi : Front(Q) = QT
Rear(Q) = Q1
Noel(Q) = T

Antrean beroperasi secara FIFO ( First In First Out) yang pertama masuk, yang pertama keluar.

 Operasi dasar pada Antrean :

1. CREATE(Q)
Operator untuk membentuk suatu antrean hampa
Q = [,…….,]
NOEL(CREATE(Q)) = 0
FRONT(CREATE(Q)) = tidak didefinisikan
REAR(CREATE(Q)) = tidak didefinisikan

2. ISEMPTY(Q)
Operator yang menentukan apakah antrean Q hampa atau tidak.
Operand dari operator ISEMPTY adalah antrean.
Hasilnya bertipe data Boolean
ISEMPTY(Q) =TRUE jika Q adalah antrean hampa (NOEL(Q) = 0)
FALSE jika Q bukan antrean kosong (NOEL(Q)  0)

3. INSERT(E,Q)
Operator yang menyisipkan elemen E ke dalam antrean Q
Catt : Elemen Q ditempatkan pada bagian belakang antrean dan antrean menjadi lebih panjang
Q = [ A, B, C, D]
REAR(INSERT(E,Q)) = E
FRONT(Q) = A
NOEL(Q) = 5
ISEMPTY(INSERT(E,Q)) = FALSE
4. REMOVE(Q)
Operator yang menghapus elemen bagian depan dari antrean Q dan antrean menjadi lebih pendek
Jika NOEL(Q) = 0 maka
REMOVE(Q) = ERROR ( UNDERFLOW)

 Penyajian dari antrean :
1. One way list
2. Array
 Menunjukkan bagaimana suatu antrean dalam array Queue dengan N elemen
1. Antrean mula-mula terdiri dari elemen AAA, BBB, CCC, DDD


1 2 3 4 5 6 7 8 9
FRONT(Q) = AAA : 1
REAR(Q) = DDD : 4

2. REMOVE(Q)


1 2 3 4 5 6 7 8 9

FRONT(Q) = BBB : 2
REAR(Q) = DDD : 4

3. INSERT(EEE,Q)

1 2 3 4 5 6 7 8 9

FRONT(Q) = BBB : 2
REAR(Q) = EEE : 5

KESIMPULAN :
Untuk setiap kali penghapusan nilai FRONT bertambah
Untuk setiap kali penambahan nilai REAR akan bertambah

berikut kode queue dengan linked menggunakan bahasa c

/* queue dengan single linked list*/

#include
#include

typedef struct simpul node;

struct simpul{
	char data;
	node *next;
};

typedef struct{
	node *front;
	node *rear;
}queue;

void inisial(queue *);
void enqueue(char x, queue *);
char dequeue(queue *);


main()
{
	queue antrian;
	char input;
	int i;
	
	puts("\t program QUEUE dengan SINGLE LINKED LIST ");
	puts("\t       created by: ACHMAD SAYFUDIN");
	puts("\t =======================================");
	inisial(&antrian);
	for(i=0;i<5;i++){	
		fflush(stdin);
		printf("data : ");
		scanf("%c", &input);
		enqueue(input,&antrian);
	}
	for(i=0;i<5;i++){
			printf("%c ",dequeue(&antrian));
	}

}

void inisial(queue *q)
{
	q->front = NULL;
	q->rear = NULL;
}

void enqueue(char x, queue *q)
{
	node *p;
	p = (node *)malloc(sizeof(node));

	if(p==NULL){
		puts("alokasi gagal");
	}
	else{//membuat node baru pertama
		p->data = x;
		p->next = NULL;
	}

	if(q->front==NULL){//jika tak ada linked sama sekali 
		q->front = p;
		q->rear = p;
	}
	else{//jika linked list sudah ada 
		q->rear->next = p;
		q->rear = p;
	}
}

char dequeue(queue *q){
	node *hapus;
	char temp;

	temp = q->front->data;//diambil datanya dulu
	hapus = q->front;// arahkan hapus ke front

	q->front = hapus->next;//hubungkan q->front dengan hapus->next jika data banyak
	
	//jika queue data tunggal
	if(q->front == NULL)
	{
		q->rear = NULL;
	}

	free(hapus);
	hapus = NULL;

	return temp;
}



cara membuat konversi infix ke postfix dengan c

   Berikut akan saya beri kode yang dimana disini berfungsi untuk infix dan postfix,di dalam bahasa c infix dan postfix itu sangat penting algoritma tersebut oleh karen itu tak beri contoh kodenya terima kasih.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
typedef struct node{// membuat struct untuk stack
char inp;
struct node*next;
}QS;
typedef struct{// membuat struct yang berisi penunjuk struck QS  yang terdepan
QS *TOP;
}stack_que;
/* Prototype Fungsi*/
QS *remof(QS*);
char depop(stack_que *);
void push(stack_que *, char);
QS *addf(QS *, char);
int isoperand(char);
int priority(char e);
void intopre(char *, char *);
main()
{
int m;
char inp[30], hsl[30];
printf(“Enter Infix  : “);
gets(inp);
strrev(inp);// membalik inputan
m = strlen(inp); // menghitung panjang inputan yang berupa string
if(!isoperand(inp[0])&&!isoperand(inp[m-1])) // apabila input pertama tdk sama dengan operator dan input terakhirnya juga tdk sama dgn operator
{
intopre(&inp[0],&hsl[0]);// memanggil fungsi intopre yang berfungsi untuk mengubah fungsi infix ke prefix
strrev(hsl); // membalik string yang berisi hasil
printf(“Prefixnya :%s\n”,hsl); // mencetak hasil inputan
}
else printf(“ini bukan infix mbak / mas =_=”); // apabila inputan pertama atau terakhirnya adalah operator, maka inputan bukan infix
getch();
}
char depop(stack_que *stack){
char i ;
if(stack->TOP){// jika stack top tdk sama dengan NULL
i = stack->TOP->inp; // i diisi dengan inputan dari stack awal
stack->TOP = remof(stack->TOP); // stack top diisi dengan fungsi untuk menghapus stack paling awal yang nanti akan mengembalikan nilai stack
}
return i;
}
// fungsi untuk menghapus node terawal pada struct head
QS *remof(QS *head){
QS *temp = head; // mengisi struct temp dengan struct head
head = head->next; //memindahkan node head ke node head selanjutnya
temp->next = NULL;// mengosongkan nilai next pada temp
free(temp); // menghapus node temp
return head; // mengembalikan nilai head
}
// fungsi untuk menginputkan nilai pada stack , sama dengan fungsi addfirst
void push(stack_que *stk, char inp){
stk->TOP = addf(stk->TOP,inp);// nilai top diisi dengan pemangilan fungsi addfirst yang nantinya akan menunjuk node yang baru di inputkan
}
// fungsi untuk menambahkan node di awal
QS *addf(QS *head, char a){
QS *temp = (QS*)malloc(sizeof(QS));// alokasi memori
temp->inp = a; // memasukkan nilai inputan ke inp pada node temp
temp->next = head; // memindahkan nilai next untuk menunjuk pada node head(node paling awal), sehingga node temp menjadi node paling awal
return temp;// mengembalikan nilai temp
}
// fungsi untuk mencetak hasil
void cetak(QS *head){
if(head){ // jika nilai headnya tidak sama dengan NULL
printf(“%c    “, head->inp);// maka cetak inp pada head
cetak(head->next); // rekursif fungsi cetak dengan mengubah nilai head menjadi nilai pada node head selanjutnya sampai nilai head == NULL
}
}
// fungsi untuk mengecek apakah inputan itu merupakan opertaor atau bukan
int isoperand(char e){
if(e == ‘+’ || e == ‘-’ || e == ‘*’ || e == ‘/’ || e == ‘%’|| e == ‘^’)// apabila inputan berupa operator, maka mengembalikan nilai 1
return 1;
else// jika tidak kembalikan nilai 0
return 0;
}
// fungsi untuk menentukan prioritas nilai inputan
int priority(char e){
int pri = 0;
if(e == ‘^’) // bila inputan berupa pangkat, maka pri diset 5
pri = 5;
else if(e == ‘*’ || e == ‘/’ || e ==’%') // bila inputan berupa perkalian atau pembagian atau modulu maka pri di set 3 (atau lebih rendah dari yang diatas)
pri = 3;
else if(e == ‘+’ || e == ‘-’)// bila inputan berupa pertambahan atau perkalian, maka pri diset 1(atau lebih dari diatasnya)
pri = 1;
return pri;
}
// fungsi untuk mengubah inputan infix menjadi prefix
void intopre(char *inp, char *hsl){
stack_que temp;
char *i, *p;
i = &inp[0];
p = &hsl[0];
char n1;
while(*i)
{
while(*i == ‘ ‘ || *i == ‘\t’) i++; // jika char dari inputan hanya berisi spasi atau tab maka tdk dihiraukan (langsung next ke char berikutnya)
if( isdigit(*i) || isalpha(*i) )// jika char berisi angka atau alfabet
{
for( ; isdigit(*i) || isalpha(*i); p++,i++) *p = *i;// selama dia angka atau alfabet maka disimpan ke p , kemudia p dan i di next
*p = ‘ ‘;// kemudian menyimpan spasi ke dalam p
p++;// p di next
}
else if( *i == ‘(‘ ) // kalau char berupa kurung awal
{
n1 = depop(&temp);// mengisi nilai n1 dengan inputan dari node next dari stack awal
while( n1 != ‘)’ ) // looping selama tdk menemukan kurung tutup
{
*p = n1; // mengisi nilai p dengan n1
p++; // menambah nilai p
*p = ‘ ‘;// mengisi nilai p dengan spasi
p++;// menambah nilai p
n1 = depop(&temp);// mengisi nilai p dengan inputan dari node next dari stack awal
}
i++;//i next
}
else if( *i == ‘)’){// jika i berupa kurung tutup
push(&temp,*i);// menginputkan nilai i ke dalam stack
i++; // i next
}
else if( isoperand(*i) ){// apabila i berupa operator
if(temp.TOP==NULL)// apabila stack awal kosong
push(&temp,*i);// menginputkan nilai i ke stack
else// bila stack tdk kosong
{
n1 = depop(&temp);// mengisi nilai p dengan inputan dari node next dari stack awal
while(priority(n1)>priority(*i))// bila prioritas operator dari stack awal lebih besar dr i
{
*p = n1;// nilai p di isi dengan nilai dari stack awal
p++;// p next
*p = ‘ ‘;// p diisi dengan spasi
p++;// p next
n1 = depop(&temp); // mengisi nilai p dengan inputan dari node next dari stack awal
}
push(&temp,n1);// menginputkan n1 ke stack
push(&temp,*i);// menginputkan i ke stack
}
i++;// i next
}
}
while(temp.TOP!=NULL)//looping selama topnya tdk sama dengan NULL
{
n1 = depop(&temp);// mengisi nilai p dengan inputan dari node next dari stack awal
if(n1 != ‘(‘&&n1 != ‘)’)// jika n1 tdk sama dengan tanda kurung
{
*p = n1; // p diisi dgn n1
p++;// p next
*p = ‘ ‘;// p diisi dengan spasi
p++;// p next
}
}
*p = ”;// terakhir mengisi p dengan NULL
}

cara membuat game snake dengan c/c++

cara membuat game snake dengan bahasa c. berikut source code nya tapi saya sarankan gunakan compiler yang lengkap library nya.ok

--------------------------------------------------------------------------------------------------------------------------------
//Snake Game
#include <GL/glu.h>
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<string.h>
class Snake
{
 int p1,p2,v1,v2,v3,e1,e2,prev,now,n,colr,dsp,cnt,dly,m;
 int stp,egGen;
 int xr,yr;
 void caught();
 public:
  long scr;
 int strtX,strtY,endX,endY;
 int pos[100][2];
 void show();
 void init();
 void egg();
 void transpose();
 void gnrtCond();
 void gnrtUnCond();
 void check();
 void checkEgg();
 void move();
 void chngDir();
 void sndEt();
 void sndCgt();
 int test();
 void score();
 Snake();
 Snake(Snake*);
 ~Snake();
 };
Snake::Snake()
 {
 }
Snake::~Snake()
{

}
void Snake::checkEgg()
{
 if((e1 == p1) && (e2 == p2))
 {sndEt();
  egg();
  dly--;
  score();
  n++;
  }
}
void Snake::sndEt()
{nosound();
 sound(2500);
 delay(2);
 nosound();
}
void Snake::sndCgt()
{nosound();
 for(int x=1000;x>0;x--)
 {sound(x);
  delay(1);
  }
 nosound();
}
void Snake::score()
{ char *p;

  ltoa(scr,p,10);
  settextstyle(8,0,1);
  setcolor(0);
  outtextxy(585,40,p);
  if(egGen != 1){
  scr = scr + dly / 10;
  }
  ltoa(scr,p,10);
  setcolor(10);
  outtextxy(585,40,p);

}
void Snake::gnrtCond()
{if(n < 367)
 {if(now == 8 && (prev != 8 && prev != 2))
  {pos[0][0] = p1;
   pos[0][1] = p2 - dsp;
   prev = now;
   }
  if(now == 4 && (prev != 4 && prev != 1))
  {pos[0][0] = p1 + dsp;
   pos[0][1] = p2;
   prev = now;
   }
  if(now == 2 && (prev != 8 && prev != 2))
  {pos[0][0] = p1;
   pos[0][1] = p2 + dsp;
   prev = now;
   }
  if(now == 1 && (prev != 1 && prev != 4))
  {pos[0][0] = p1 - dsp;
   pos[0][1] = p2;
   prev = now;
   }
}
}
void Snake::gnrtUnCond()
{
  if( prev == 8 )
  {pos[0][0] = p1;
   pos[0][1] = p2 - dsp;
   }
 if( prev == 4 )
  {pos[0][0] = p1 + dsp;
   pos[0][1] = p2;
   }
 if( prev == 2 )
  {pos[0][0] = p1;
   pos[0][1] = p2 + dsp;
   }
 if( prev == 1 )
  {pos[0][0] = p1 - dsp;
   pos[0][1] = p2;
   }
 p1 = pos[0][0];
 p2 = pos[0][1];
}
void Snake::check()
{
 if(p1 > endX)
  {p1 = strtX;}
 else if(p1 < strtX)
  {p1 = endX;}

 if(p2 > endY)
  {p2 = strtY;}
 else if(p2 < strtY)
  {p2 = endY;}

 pos[0][0] = p1;
 pos[0][1] = p2;
for(int i = 1;i < n;i++)
  { if(p1 == pos[i][0] && p2 == pos[i][1])
  {caught();
   break;
  }
 }
}
void Snake::show()
{
  int x = getcolor();
  if(egGen != 1)
  {
  setcolor(getbkcolor());
  setfillstyle(1,getbkcolor());
  fillellipse(v1,v2,yr,yr);
   }
  else
   egGen = 0;
  if(egGen == 2)
   egGen--;
  setcolor(colr);
  setfillstyle(1,9);
  if(now == 8 || now == 2)
   fillellipse(pos[0][0],pos[0][1],xr,yr);
  else if(now == 4 || now == 1)
   fillellipse(pos[0][0],pos[0][1],yr,xr);
  setcolor(x);
}
void Snake::transpose()
{ int i,j,x,y;
   p1 = pos[0][0];
   p2 = pos[0][1];
   if(!egGen){
   v1 = pos[n-1][0];
   v2 = pos[n-1][1];
   }
   else
    egGen = 0;
   for(i = n-1;i >= 1;i--)
   {pos[i][0] = pos[i-1][0];
    pos[i][1] = pos[i-1][1];
   }
}
void Snake::move()
{ int st = 0;
  do{
   if(!kbhit())
   {checkEgg();
    if(!st)
     show();
    else
     st = 0;
    delay(dly/4);
    transpose();
    delay(dly/4);
    gnrtUnCond();
    delay(dly/4);
    check();
   delay(dly/4);
    }
   else if(stp){
   chngDir();
   gnrtCond();
   check();
   show();
   st = 1;
   }
   }while(stp);
}
void Snake::init()
{time_t tm;
 srand(time(&tm));
 dsp = 20;
 n = 5;
 prev = 4;
 for(int i = 4;i >= 0;i--)
 {pos[i][0] = 201 + (n - i - 1) * dsp;
  pos[i][1] = 301;
  }
  strtX = 21;
  strtY = 21;
  endX = 481;
  endY = 361;
  colr = 14;
  now = prev;
  dsp = 20;
  stp = 111;
  cnt = -1;
  scr = 0;
  dly = 150;
   xr = 3;
   yr = 9;
  egg();
  egGen = 1;
  score();
  int x = getcolor();
  setlinestyle(0,1,3);
  setcolor(15);
  rectangle(strtX-15,strtY-15,endX+15,endY+15);
  rectangle(endX+25,strtY-15,getmaxx()-15,endY+15);
  rectangle(strtX-15,endY+25,getmaxx()-15,getmaxy()-5);
  line(endX+25,strtY+75,getmaxx()-15,strtY+75);
  line(endX+25,strtY+200,getmaxx()-15,strtY+200);
  line(endX+25,strtY+275,getmaxx()-15,strtY+275);
  setlinestyle(0,1,1);
  settextstyle(8,0,1);
  setcolor(11);
  outtextxy(514,40,"SCORE");
  setcolor(14);
  settextstyle(11,0,5);
  outtextxy(524,110," CONTROLS ");
  outtextxy(522,135,"p = PAUSE");
  outtextxy(522,155,"g = RESUME");
  outtextxy(522,175,"e = EXIT");
  outtextxy(513,195,"ARROWS");
  outtextxy(512,205,"    -MOVEMENT");
  setcolor(14);
  settextstyle(4,0,9);
  outtextxy(getmaxx()-500,getmaxy()-110,"SNAKE");
  settextstyle(8,0,1);
  setcolor(x);
}
void Snake::caught()
{
 stp = 0;
 sndCgt();
for(int i=0;i<=7;i++)
 {if(i%2)
  {setcolor(10);
   outtextxy(512,250,"GAME OVER");
   delay(900);
   }
  else
  {setcolor(0);
   outtextxy(512,250,"GAME OVER");
   delay(500);
  }
  }
sleep(1);
}
void Snake::chngDir()
{int clr;
 fillsettingstype *p;
 char x = getch();
 if(x == 72)
  now = 8;
 else if(x == 77)
  now = 4;
 else if(x == 80)
  now = 2;
 else if(x == 75)
  now = 1;
 else if(x == 'e')
  caught();
 else if(x == 'p')
 {//int y = getcolor();
  int twnkl = 1;
  settextstyle(11,0,9);
  while(1)
  {if(kbhit())
   {int c = getch();
    if(c == 'g')
    {clr = getcolor();
     setcolor(0);
     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
     outtextxy(endX+60,endY-29,"PAUSE");
     break;
     }
    }
   else
   {if(twnkl%2)
    {clr = getcolor();
     setcolor(10);
     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
     outtextxy(endX+60,endY-29,"PAUSE");
     setcolor(clr);
      delay(1000);
     }
    else
    {
     clr = getcolor();
     setcolor(0);
     rectangle(endX+40,endY-10,getmaxx()-35,getmaxy()-160);
     outtextxy(endX+60,endY-29,"PAUSE");
     delay(1000);
    }
   }
   twnkl++;
  }
    settextstyle(8,0,1);
 }
}
Snake::Snake(Snake *p)
{
 *p=NULL;
}
void Snake::egg()
{ do
  {e1 = (rand() % 100) * dsp + strtX;
   e2 = (rand() % 100) * dsp + strtY;
   }while(test());
  int x = getcolor();
  setcolor(7);
  setfillstyle(1,random(15)+1);
  fillellipse(e1,e2,xr+2,xr+2);
  setcolor(x);
  egGen = 2;
}
int Snake::test()
{ for(int i=0;i<n;i++)
  {if(e1 == pos[i][0] && e2 == pos[i][1])
    break;
   if(v1 == e1 && v2 == e2)
    break;
   if((e1 >= endX+1) || (e2 >= endY+1))
    break;
   }
 if(i != n)
  return 1;
 else
  return 0;
}

void main()
{Snake snk;
 int gd=DETECT,gm,i,j,k,x,y;
 clrscr();
 initgraph(&gd,&gm,"E:\Turboc3");
 snk.init();
 snk.move();

 closegraph();
 restorecrtmode();
 }

----------------------------------------------------------------------------------------------------------------------------

cara membuat program rekursif dengan c

  ini ada contoh untuk membuat rekursif dengan permasalahan mencari faktorial saya menggunakan bahasa c, sebelumnya apa itu rekursif? rekursif adalah cara memanggil fungsi dirinya sendiri, untuk lebih jelasnya langsung melihat contoh berikut.
berikut source code nya.

//faktorial

#include"stdio.h"

void menu();
void iterasi();
int rekursif(int );
int tail(int ,int);

main(){
    menu();

}

void menu(){
    char pil,jawab;
    int a=1,f;
    do{
        puts("PROGRAM FAKTORIAL");
        printf("1.iterasi biasa\n2.rekursif\n3.rekursif tail\n");
        fflush(stdin);
        printf("masukan pilihan : ");
        pil=getchar();

        switch(pil){
        case '1':iterasi();break;
        case '2':
            {
                puts("\n=========================");
                puts("\t rekursif ");
                puts("=========================");
                printf("masukan faktorial dari : ");
                scanf("%d",&f);
                printf("faktorial=%d",rekursif(f));
                break;
            }
        case '3':{
                puts("\n=========================");
                puts("\t TAIL ");
                puts("=========================");
                printf("masukan faktorial dari : ");
                scanf("%d",&f);
                printf("faktorial=%d",tail(f,a));
                break;
       
            break;
           
            }
        }
       
        //if(pil=='1')
        //    iterasi();
        fflush(stdin);
        printf("\nmau input lagi : ");
        jawab=getchar();
   
    }while(jawab=='y'||jawab=='Y');
}

void iterasi(){
    int i,f,hasil=1;
    puts("\n=========================");
    puts("\t iterasi ");
    puts("=========================");
    printf("masukan faktorial dari : ");
    scanf("%d",&f);

    for(i=f;i>=1;i--){
        hasil=hasil*i;
    }
    printf("\nhasil faktorial = %d\n",hasil);
}

//ini fungsi rekursif nya
int rekursif(int f){
    if(f==1)
        return 1;
    else if(f==0)
        return 1;
    else
        return(f*rekursif(f-1));
}

int tail(int n, int a){

if (n < 0)
    return 0;
else if (n == 0)
    return 1;
else if (n == 1)
    return a;
else
    return tail(n-1,n*a);
}

cara membagi ukuran memori di pemrograman c/c++

    pentingnya membagi memori saat kita memprogram dengan bahasa c, kenapa seperti itu karena sifat dari bahasa menengah yaitu c. yaitu saat kita mengalokasikan variable yang ada hubungannya dengan size memori maka yang  bertugas membagi dan mendefinisikan alokasi memori adalah tugas dari para programmer mengapa demikian? karena dengan adanya fasilitas itu memudahkan kita programmer mengatur size memori sesuai kebutuhan, kurang lebihnya seperti itu berikut saya kasih contoh cara membuat alokasi memori akses dengan bahasa c/c++
------------------------------------------------------------------------------------------------------------------------------
#include"stdio.h"
#include"stdlib.h"

main()
{
    char *pblok;
    pblok=malloc(600*sizeof(char));//maksud satuan dalam byte
    if(pblok==NULL)
    puts("error on malloc");
    else
    {
     puts("ok alokasi memori sudah dilaukan");
     puts("--------------------------------");
     }
     free(pblok);
     pblok=NULL;
     puts("blok telah di bebaskan kembali");
}
------------------------------------------------------------------------------------------------------------------------
sekian tutorial dari saya semoga bermanfaat.

algortima dan struktur data sorting dengan insertion sort

berikut akan saya sharing tentang ilmu struktur data yaitu tentang metode sorting dengan insertion sort. dan berikut algoritma nya langsung saya cantumkan dalam code program.

Code Program Insertion

-----------------------------------------------------------------------------------------------------------------------------
#include"stdio.h"
#include"time.h"

#define max 100000

int key,n,data[max],temp[max];

void input(){
int i;
    printf("\nmasukan jumlah data: ");
    scanf("%d",&n);

        for(i=0;i<n;i++){
        //data[i]=rand()%100000;
        //printf("data ke %d= ",i+1);
        //scanf("%d",&data[i]);
        data[i]=i; //untuk data urut
        }
        for(i=0;i<n;i++){
            temp[i]=data[i];
        }
}

void print(){
    int k;
    puts("\n hasil setelah diurutkan\n");
        for(k=0;k<n;k++){
        printf("%d ",data[k]);}
}

void printtemp(){
    int k;
    puts("\n hasil setelah diurutkan\n");
        for(k=0;k<n;k++){
        printf("%d ",temp[k]);}
}

void insertion(){
    int i,j;char pil;long int t1,t2;
    printf("\t MENU \n");
    printf("urutkan \n 1.ascending\n 2.descending\n");
    fflush(stdin);
    printf("\n masukan pilihan anda: ");
    pil=getchar();
   
    //urut asscending
    if(pil=='1'){
        time(&t1);
        for(i=1;i<n;i++){
            j=i;
            key=data[i];//untuk tampung data dulu
            while((j>0)&&(data[j-1]>key)){
                data[j]=data[j-1];//untuk geser tempat
                j--;
            }
            data[j]=key;
           
        }
        time(&t2);
    //print();
    printf("\nwaktu= %ld s",t2-t1);
    }
    //urut desscending
    else if(pil=='2'){
        time(&t1);
        for(i=1;i<n;i++){
            j=i;
            key=temp[i];//untuk tampung data dulu   
            while((j>0)&&(temp[j-1]<key)){
                temp[j]=temp[j-1];//untuk geser tempat
                j--;
            }
            temp[j]=key;
        }
        time(&t2);
    printtemp();
    printf("\nwaktu= %ld s",t2-t1);
    }
}



main(){
    char jawab;

   
    do{    system("cls");//untuk membersihkan layar
    puts("\t PROGRAM INSERTION SORT");
    puts("\t by: achmad sayfudin\n");
        input();
        do{   
            insertion();
            //print();
           
            printf("\n\n apakah ingin mengurutkan lagi: ");
            fflush(stdin);
            jawab=getchar();
        }while(jawab=='y'||jawab=='Y');

        printf("\n apakah ingin input lagi(y/t): ");
        fflush(stdin);
        jawab=getchar();

    }while(jawab=='y'||jawab=='Y');
}

-------------------------------------------------------------------------------------------------------------------------
berikut code dari insertion sort.

cara membuat queue dengan array di c

Queue dengan array cukup mudah dibanding dengan linked list,berikut ada yang mau saya sharing kan, bagaimana membuat queue dengan array. kalau anda ingin mencoba nya siapkan dulu compiler c nya:

Code Program

-----------------------------------------------------------------

#include"stdio.h"
#include"stdlib.h"
#define MAX 5

typedef struct{
char data[MAX];
int rear;
int front;
int jumlah;
}queue;

void inisial(queue *q)
{
q->front=0;
q->jumlah=0;
q->rear=0;
}

void enqueue(char x,queue *q)
{
if(q->jumlah==MAX){
puts("data penuh");
}

else{
q->data[q->rear]=x;

//rumus circular queue
q->rear=((q->rear)+1)%MAX;
(q->jumlah)++;
}
}

char dequeue(queue *q)
{
char temp;
if(q->jumlah==' '){
puts("tak ada data yang di dequeue");
return 0;}
else{
temp=q->data[q->front];
q->front=((q->front)+1)%MAX;//CIRCULAR QUEUE
(q->jumlah)--;
return temp;
}
}

main()
{ queue antrian;
char pil,x,jawab;
int i,n;
inisial(&antrian);
do{
puts("\t====================================================");
puts("\t\tPROGRAM QUEUE DENGAN ARRAY");
puts("\t====================================================\n");
puts("<<MENU>>");
puts("--------");
printf("1.enqueu\n2.dequeue\n3.exit\n");
fflush(stdin);
printf("\n input pilihan: ");
pil=getchar();

if(pil=='1'){
for(i=0;i<MAX;i++){
fflush(stdin);
printf("masukan karakter:");
scanf("%c",&x);
enqueue(x,&antrian);
}

}
else if(pil=='2'){
fflush(stdin);
printf("dequeue berapa kali:");
scanf("%d",&n);
puts("\nDATA YANG KE DEQUEUE\n");
for(i=0;i<n;i++){
printf("%c ",dequeue(&antrian));
}

}
else if(pil=='3')
exit(1);
fflush(stdin);
printf("ingin kembali ke menu: ");
jawab=getchar();
}while(jawab='y'||jawab=='Y');
}
-----------------------------------------------------------------
berikut lah code dari saya semoga bermanfaat selamat mencoba.

algoritma dan struktur data mencari graph dengan metode warshall

     Selamat pagi teman semua ini saya lanjutakan materi berikut nya dari struktur data yaitu tentang graph, apa itu graph graph adalah suatu metode untuk mencari jarak terpendek didalam graph ada sendiri ada banyak cara. Saya kasih contoh menggunakan metode algoritma dari warshall berikut code nya.

code program metode warshall

-----------------------------------------------------------------
#include<stdio.h>
#define m 100

int q[5][5]={{m,1,3,m,m},{m,m,1,m,5},{3,m,m,2,m},{m,m,m,m,1},{m,m,m,m,m}};
int p[5][5]={{0,1,1,0,0},{0,0,1,0,1},{1,0,0,1,0},{0,0,0,0,1},{0,0,0,0,0}};
int r[5][5]={{m,0,0,m,m},{m,m,0,m,0},{0,m,m,0,m},{m,m,m,m,0},{m,m,m,m,m}};
int i, j, k;

void tampilq();
void tampilp();
void tampilr();
void bebanrute();
void jalur();

typedef struct {
int rute[m];
int jml;
}stack;

void inisial(stack *);
void push(int,stack *);
int pop(stack *);
int kosong(stack *);
void rute();

stack tumpukan;

void main()
{
printf("graph - risma afitah\n\n");
printf("matrik awal :\n");
printf("matrik q :\n");
tampilq();
printf("\n\n");
printf("matrik p :\n");
tampilp();
printf("\n\n");
printf("matrik r :\n");
tampilr();

printf("\n");
printf("warshall beban (q) :\n");
bebanrute();
tampilq();
printf("\n");
printf("warshall jalur (p) :\n");
jalur();
tampilp();
printf("\n");
printf("warshall rute (r) :\n");
bebanrute();
tampilr();
rute();
}

void tampilp()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", p[i][j]);
}
printf("\n");
}
}

void tampilq()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", q[i][j]);
}
printf("\n");
}
}

void tampilr()
{
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%d\t", r[i][j]);
}
printf("\n");
}
}

void bebanrute()
{
for(k=0; k<5; k++)
for(i=0; i<5; i++)
for(j=0; j<5; j++)
     if((q[i][k]+q[k][j]) < q[i][j])
 {
 q[i][j] = q[i][k]+q[k][j];

 if(r[k][j]==0)
 r[i][j]=k+1;
 else
 r[i][j]=r[k][j];
 }
}

void jalur()
{
for(k=0; k<5; k++)
for(i=0; i<5; i++)
for(j=0; j<5; j++)
p[i][j]=(p[i][j]) || (p[i][k] && p[k][j]);
}

void inisial(stack *s)
{
s->jml = 0;
}

void push(int y, stack *s)
{
s->rute[s->jml] = y;
(s->jml)++;
}

int pop(stack *s)
{
int temp;

if(kosong(s))
{
puts("stack kosong");
temp = ' ';
return temp;
}
else
{
(s->jml)--;
temp = s->rute[s->jml];
return temp;
}
}

int kosong(stack *s)
{
if(s->jml == 0)
return 1;
else
return 0;
}

void rute()
{
int asal, tujuan, tujuan2, tmp, x;

printf("\nmasukkan asal : ");
scanf("%d", &asal);
printf("masukkan tujuan : ");
scanf("%d", &tujuan);

tujuan2=tujuan;
inisial(&tumpukan);

do
{
tmp=r[asal-1][tujuan-1];
if(tmp==m)
{
printf("tidak ada rute");
break;
}

if(tmp!=0)
{
push(tmp,&tumpukan);
tujuan=tmp;
}
}
while(tmp!=0);

printf("rute dari %d ke %d adalah : ", asal, tujuan2);
printf("%d - ", asal);

while(!kosong(&tumpukan))
{
x=pop(&tumpukan);
printf("%d - ", x);
}

printf("%d\n", tujuan2);
if(q[asal-1][tujuan2-1]==100)
{
printf("tidak ada beban");
//break;
}
else
{
printf("total beban = %d", q[asal-1][tujuan2-1]);
}
}

-----------------------------------------------------------------

untuk output programnya silakan di coba sendiri dulu nanti outpunya bagaimana, jangan lupa gunakan compiler c nya. Semoga bermanfaat sedikit ilmu ku ini amin.