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
}