Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Page |1

Q.1- Write a Program for infix to prefix conversion using stack.

Code:

#include<stdio.h>
#include<string.h>
#include<limits.h>
#include<stdlib.h>
# define MAX 100

int top = -1;


char stack[MAX];

int isFull() {
return top == MAX - 1;
}

int isEmpty() {
return top == -1;
}

void push(char item) {


if (isFull())
return;
top++;
stack[top] = item;
}

int pop() {
if (isEmpty())
return INT_MIN;

return stack[top--];
}

int peek(){
if (isEmpty())
return INT_MIN;
return stack[top];
}

int checkIfOperand(char ch) {


Page |2

return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}

int precedence(char ch)


{
switch (ch)
{
case '+':
case '-':
return 1;

case '*':
case '/':
return 2;

case '^':
return 3;
}
return -1;
}

int getPostfix(char* expression)


{
int i, j;

for (i = 0, j = -1; expression[i]; ++i)


{
if (checkIfOperand(expression[i]))
expression[++j] = expression[i];

else if (expression[i] == '(')


push(expression[i]);

else if (expression[i] == ')')


{
while (!isEmpty(stack) && peek(stack) != '(')
expression[++j] = pop(stack);
if (!isEmpty(stack) && peek(stack) != '(')
return -1;
else
pop(stack);
Page |3

}
else
{
while (!isEmpty(stack) && precedence(expression[i]) <= precedence(peek(stack)))
expression[++j] = pop(stack);
push(expression[i]);
}

while (!isEmpty(stack))
expression[++j] = pop(stack);

expression[++j] = '\0';

void reverse(char *exp){

int size = strlen(exp);


int j = size, i=0;
char temp[size];

temp[j--]='\0';
while(exp[i]!='\0')
{
temp[j] = exp[i];
j--;
i++;
}
strcpy(exp,temp);
}
void brackets(char* exp){
int i = 0;
while(exp[i]!='\0')
{
if(exp[i]=='(')
exp[i]=')';
else if(exp[i]==')')
exp[i]='(';
i++;
Page |4

}
}
void InfixtoPrefix(char *exp){

int size = strlen(exp);

reverse(exp);
brackets(exp);
getPostfix(exp);
reverse(exp);
}

int main()
{
printf("The infix is: ");

char expression[] = "((a/b)+c)-(d+(e*f))";


printf("%s\n",expression);
InfixtoPrefix(expression);

printf("The prefix is: ");


printf("%s\n",expression);

return 0;
}

Output:
Page |5

Q.2- Write a recursive function to compute power of a number (xn).

Code:

#include <stdio.h>

int power(int x, int n)


{
if (n == 0)
return 1;
if (x == 0)
return 0;
return x * power(x, n - 1);
}

int main()
{
int x = 2;
int n = 3;

printf("Answer is %d\n", power(x, n));


}

Output:
Page |6

Q.3- Write a program for conversion of Decimal number into equivalent binary number
using stack.

Code:

#include<stdio.h>
#include<stdlib.h>
#define MAX 50

int isEmpty(int top, int stack_arr[]);


void push(int x, int *top, int stack_arr[]);
int pop(int *top, int stack_arr[]);
void DecToBin(int num);

int main()
{
int num;
printf("Enter an integer : ");
scanf("%d",&num);
printf("Binary Equivalent is : ");
DecToBin(num);

return 0;

void DecToBin(int num)


{
int stack[MAX], top=-1, rem;
while(num!=0)
{
rem = num%2;
push(rem, &top, stack);
num/=2;
}
while(top!=-1)
printf("%d", pop(&top, stack));
printf("\n");
}
Page |7

void push(int x, int *top, int stack_arr[])


{
if(*top == (MAX-1))
printf("Stack Overflow\n");
else
{
*top=*top+1;
stack_arr[*top] = x;
}
}

int pop(int *top, int stack_arr[])


{
int x;
if(*top == -1)
{
printf("Stack Underflow\n");
exit(1);
}
else
{
x = stack_arr[*top];
*top=*top-1;
}
return x;
}

Output:
Page |8

Q.4- Write a program to solve the tower of Hanoi problem using stack.

Code:

#include<stdio.h>
void TOH(int n,char x,char y,char z) {
if(n>0) {
TOH(n-1,x,z,y);
printf("\n%c to %c",x,y);
TOH(n-1,z,y,x);
}
}
int main() {
int n=3;
TOH(n,'A','B','C');
}

Output:

You might also like