Computer
Computer
Array Search
# include <stdio.h>
# include <stdlib.h>
# define SIZE 100
int a[SIZE], i, n, e;
int linearSearch()
{
for (i = 0; i < n; i++)
if (e == a[i])
return i;
return -1;
}
int sort()
{
int i = 0, j, temp;
for (; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
int binarySearch()
{
sort();
int low = 0, high = n - 1, mid;
while(low <= high)
{
mid = (low + high) / 2;
if (e == a[mid])
return mid;
if(e < a[mid])
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main()
{
int i = 0, c, r;
printf("Enter size of array (1 - 100): ");
scanf("%d", &n);
for(; i < n; i++)
{
printf("Enter element %d: ", (i + 1));
scanf("%d", (a + i));
}
while(1)
{
printf("Enter element to be searched: ");
scanf("%d", &e);
printf("MENU:\n1. Linear Search\n2. Binary Search\nOthers: Exit\n");
printf("Enter your choice: ");
scanf("%d", &c);
switch (c)
{
case 1: r = linearSearch();
break;
case 2: r = binarySearch();
break;
default: exit(0);
}
if (r == -1)
printf("Element not found!\n");
else
printf("Element found at index %d!\n", r);
}
return 0;
}
}
void heapSort()
{
for (int i = n / 2 - 1; i >= 0; i++)
heapify(i);
}
void mergeSort()
{
int s = 1, l1, l2, u1, u2, i, j, k, t[n];
while (s <= n)
{
l1 = 0;
k = 0;
while((l1 + s) < n)
{
l2 = l1 + s;
u1 = l2 - 1;
u2 = (u1 + s) < n ? (u1 + s) : (n - 1);
for (i = l1, j = l2;i <= u1 && j <= u2;)
if (a[i] <= a[j])
t[k++] = a[i++];
else
t[k++] = a[j++];
while (i <= u1)
t[k++] = a[i++];
while (j <= u2)
t[k++] = a[j++];
l1 = u2 + 1;
}
for (i = l1; i < n; i++)
t[k++] = a[i];
for (i = 0; i < n; i++)
a[i] = t[i];
s *= 2;
}
}
void print()
{
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);
}
int main()
{
int i = 0, c, r;
printf("Enter size of array (1 - 100): ");
scanf("%d", &n);
for(; i < n; i++)
{
printf("Enter element %d: ", (i + 1));
scanf("%d", (a + i));
}
printf("MENU:\n1. Selection Sort\n2. Bubble Sort");
printf("\n3. Insertion Sort\n4. Shell Sort\n5. Merge Sort");
printf("\n6. Quick Sort\nOthers: Exit\n");
printf("Enter your choice: ");
scanf("%d", &c);
printf("Array before sorting: ");
print();
printf("\n");
switch (c)
{
case 1: selectionSort();
break;
case 2: bubbleSort();
break;
case 3: insertionSort();
break;
case 4: shellSort();
break;
case 5: mergeSort();
break;
case 6: quickSortIter(0, n-1);
break;
default: break;
}
printf("Array after sorting (Ascending): ");
print();
printf("\n");
return 0;
}
5. Circular Queue
# include <stdio.h>
# include <stdlib.h>
# define MAX 5
int rear = -1, front = -1;
int queue[MAX];
void enQue(int e)
{
if ((rear + 1) % MAX == front)
{
printf("Queue Full\n");
return;
}
rear = (rear + 1) % MAX;
queue[rear] = e;
if (front == -1)
front = 0;
}
int deQue()
{
int e;
if (front == -1)
{
printf ("Queue Empty!\n");
return -1;
}
e = queue[front];
if (front == rear)
front = rear = -1;
else
front = (front + 1) % MAX;
return e;
}
void print()
{
int i;
if (front == -1)
{
printf ("Queue Empty!\n");
return;
}
for (i = front; i != rear; i = (i + 1) % MAX)
printf("%d ", queue[i]);
printf("%d", queue[rear]);
}
int main()
{
int queue[MAX], i, e;
printf("MENU:\n1. enQue element into Queue\n2. deQue element from Queue\n3.
Print Queue\nOthers: Exit\n");
while (1)
{
printf("Enter your choice: ");
scanf("%d", &i);
switch(i)
{
case 1: printf("Enter element: ");
scanf("%d", &e);
enQue(e);
break;
case 2: e = deQue();
if (e != -1)
printf("deQued element: %d\n", e);
break;
case 3: printf("Queue:\n");
print();
printf("\n");
break;
default: printf("Exiting...\n");
exit(0);
}
}
return 0;
}
8. infix to Postfix
#include <stdio.h>
#include <stdlib.h>
#define MAX 150
char ch[MAX];
int top = -1;
void check(char);
int isExp(char);
void push(char);
char pop(void);
int pr(char);
int main()
{
char exp[MAX];
int i = 0, p1 = 0, p2 = 0;
char c;
printf("Enter the infix expression: ");
scanf("%[^\n]", exp);
printf("The postfix expression is: ");
while((c = exp[i]) != '\0')
{
if(c == ' ')
{
i++;
continue;
}
else if(! isExp(c))
printf("%c", c);
else if(isExp(c))
{
if(c == ')')
{
while(ch[top] != '(')
printf("%c", pop());
pop();
}
else if(c == '(')
push(c);
else
check(c);
}
i++;
}
while(top > -1)
printf("%c", pop());
}
void check(char c)
{
int p1, p2;
p1 = pr(c);
p2 = pr(ch[top]);
if(p2 >= p1)
{
printf("%c", pop());
check(c);
}
else
push(c);
}
int isExp(char c)
{
if(c == '+' || c == '-' || c == '*' || c == '(' || c == ')' || c == '/' || c
== '^')
return 1;
else
return 0;
}
int pr(char c)
{
if(c == '(')
return 1;
else if(c == '+' || c == '-')
return 2;
else if(c == '*' || c == '/')
return 3;
else if(c == '^')
return 4;
}
char pop()
{
if(top == -1)
{
printf("\nStack Empty Error!");
exit(0);
}
return ch[top--];
}
void push(char a)
{
if(top++ == MAX)
{
printf("\nStack Full Error!");
exit(0);
}
ch[top] = a;
}
9. Postfix Evaluation
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# define MAX 100
# define SIZE 10
int top = -1;
void push(int stack[], int e)
{
if (++top == MAX)
{
printf("Stack Full!\n");
return;
}
stack[top] = e;
}
int pop(int stack[])
{
if (top == -1)
{
printf("Stack Empty!\n");
return -1;
}
return stack[top--];
}
int isDigit(char sym)
{
if((sym >= '0') && (sym <= '9'))
return 1;
return 0;
}
int oper(int sym, int op1, int op2)
{
switch (sym)
{
case '+': return (op1 + op2);
case '-': return (op1 - op2);
case '*': return (op1 * op2);
case '/': return (op1 / op2);
case '%': return (op1 % op2);
case '$': return (int) pow(op1, op2);
}
}
int eval(char exp[])
{
int i, op1, op2, val, j, stack[SIZE];
char c;
for (i = 0; exp[i] != '\0'; i++)
{
c = exp[i];
if (c == ' ') continue;
if (isDigit(c))
push(stack, c - '0');
else
{
op2 = pop(stack);
op1 = pop(stack);
val = oper(c, op1, op2);
push(stack, val);
}
}
return pop(stack);
}
int main()
{
char exp[MAX];
printf("Input Postfix expression: ");
scanf("%[^\n]s", exp);
printf("Value of expression is %d\n", eval(exp));
}
10. Queue
# include <stdio.h>
# include <stdlib.h>
# define MAX 100
int rear = -1, front = 0;
void enQue(int queue[], int e)
{
if (++rear == MAX)
{
printf("Queue Full!\n");
return;
}
queue[rear] = e;
}
int deQue(int queue[])
{
if (front > rear)
{
printf("Queue Empty!\n");
return -1;
}
return queue[front++];
}
void print(int queue[])
{
int i;
if (front > rear)
{
printf("Queue Empty!\n");
return;
}
for (i = front; i <= rear; i++)
printf("%d ", queue[i]);
}
int main()
{
int queue[MAX], i, e;
printf("MENU:\n1. enQue element into Queue\n2. deQue element from Queue\n3.
Print Queue\nOthers: Exit\n");
while (1)
{
printf("Enter your choice: ");
scanf("%d", &i);
switch(i)
{
case 1: printf("Enter element: ");
scanf("%d", &e);
enQue(queue, e);
break;
case 2: e = deQue(queue);
if (e != -1)
printf("deQued element: %d\n", e);
break;
case 3: printf("Queue:\n");
print(queue);
printf("\n");
break;
default: printf("Exiting...\n");
exit(0);
}
}
return 0;
}
13. Stack
# include <stdio.h>
# include <stdlib.h>
# define MAX 100
int top = -1;
void push(int stack[], int e)
{
if (++top == MAX)
{
printf("Stack Full!\n");
return;
}
stack[top] = e;
}
int pop(int stack[])
{
if (top == -1)
{
printf("Stack Empty!\n");
return -1;
}
return stack[top--];
}
void print(int stack[])
{
int i;
if (top == -1)
{
printf("Stack Empty!\n");
return;
}
for (i = top; i >= 0; i--)
printf("%d\n", stack[i]);
}
int main()
{
int stack[MAX], i, e;
printf("MENU:\n1. Push element into Stack\n2. Pop element from Stack\n3. Print
Stack\nOthers: Exit\n");
while (1)
{
printf("Enter your choice: ");
scanf("%d", &i);
switch(i)
{
case 1: printf("Enter element: ");
scanf("%d", &e);
push(stack, e);
break;
case 2: e = pop(stack);
if (e != -1)
printf("Popped element: %d\n", e);
break;
case 3: printf("Stack:\n");
print(stack);
printf("\n");
break;
default: printf("Exiting...\n");
exit(0);
}
}
return 0;
}