VTU LAB PROGRAMS.
NOTE: eclipse gcc linker default command is gcc, u have to change it to
gcc -lm, to run the math.h functions for avoiding unreference type errors.
#include<stdlib.h>
#define MAX 5
int a[MAX], pos, elem;
int n = 0;
void create();
void display();
void insert();
void delete();
void main()
{
int choice;
while(1)
{
printf("\n\n~~~~MENU~~~~");
printf("\n=>1. Create an array of N integers");
printf("\n=>2. Display of array elements");
printf("\n=>3. Insert ELEM at a given POS");
printf("\n=>4. Delete an element at a given POS");
printf("\n=>5. Exit");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1: create();
break;
case 2: display();
break;
case 3: insert();
break;
case 4: delete();
break;
case 5: exit(1);
break;
default: printf("\nPlease enter a valid choice:");
}
}
}
void create()
{
int i;
printf("\nEnter the number of elements: ");
scanf("%d", &n);
printf("\nEnter the elements: ");
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
void display()
{
int i;
if(n == 0)
{
printf("\nNo elements to display");
return;
}
printf("\nArray elements are: ");
for(i=0; i<n;i++)
printf("%d\t ", a[i]);
}
void insert()
{
int i;
if(n == MAX)
{
printf("\nArray is full. Insertion is not possible");
return;
}
do
{
printf("\nEnter a valid position where element to be inserted: ");
scanf("%d", &pos);
}while(pos > n);
printf("\nEnter the value to be inserted: ");
scanf("%d", &elem);
for(i=n-1; i>=pos ; i--)
{
a[i+1] = a[i];
}
a[pos] = elem;
n = n+1;
display();
}
void delete()
{
int i;
if(n == 0)
{
printf("\nArray is empty and no elements to delete");
return;
}
do
{
printf("\nEnter a valid position from where element to be deleted: ");
scanf("%d", &pos);
}while(pos>=n);
elem = a[pos];
printf("\nDeleted element is : %d \n", elem);
for( i = pos; i< n-1; i++)
{
a[i] = a[i+1];
}
n = n-1;
display();
}
Output:
~~~~MENU~~~~
=>1. Create an array of N integers
=>2. Display of array elements
=>3. Insert ELEM at a given POS
=>4. Delete an element at a given POS
=>5. Exit
Enter your choice: 1
Enter the number of elements: 3
Enter the elements: 10 20 30
2
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[50], pat[50], rep[50];
int start = 0, patfound = 0;
int lasts, lastp, lastr;
void replacepattern()
{
int i, j;
lastr = strlen(rep)-2;
if(lastp != lastr)
{
printf("\nInvalid length of replace string");
exit(0);
}
else
{
i = start;
for(j=0; j<=lastr; j++)
{
str[i] = rep[j];
i++;
}
}
return;
}
void findpattern()
{
int i, j, inmatch;
lasts = (strlen(str)) - 2;
lastp = (strlen(pat)) - 2;
int endmatch;
for(endmatch = lastp; endmatch<=lasts; endmatch++, start++)
{
if(str[endmatch] == pat[lastp])
{
inmatch = start;
j=0;
while(j<lastp)
{
if(str[inmatch] == pat[j])
{
inmatch++;
j++;
}
else
{
break;
}
}
if(j == lastp)
{
patfound = 1;
replacepattern();
}
}
}
return;
}
void main()
{
printf("\nEnter the main string(STR): ");
fgets(str, 50, stdin);
printf("\nEnter the pattern to be matched(PAT): ");
fgets(pat, 50, stdin);
printf("\nEnter the string to be replaced(REP): ");
fgets(rep, 50, stdin);
printf("\nThe string before pattern match is:\n %s", str);
findpattern();
if(patfound == 0)
printf("\nThe pattern is not found in the main string");
else
printf("\nThe string after pattern match and replace is: \n %s ", str);
}
Output:
Case 1:
Enter the main string(STR): Hello hii how are you hii
Enter the pattern to be matched(PAT): hii
Enter the string to be replaced(REP): xyz
The string before pattern match is:
Hello hii how are you hii
The string after pattern match and replace is:
Hello xyz how are you xyz.
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
int s[MAX];
int top = -1;
void push(int item);
int pop();
void palindrome();
void display();
void main()
{
int choice, item;
while(1)
{
printf("\n\n\n\n~~~~~~Menu~~~~~~ : ");
printf("\n=>1.Push an Element to Stack and Overflow demo ");
printf("\n=>2.Pop an Element from Stack and Underflow demo");
printf("\n=>3.Palindrome demo ");
printf("\n=>4.Display ");
printf("\n=>5.Exit");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1: printf("\nEnter an element to be pushed: ");
scanf("%d", &item);
push(item);
break;
case 2: pop();
break;
case 3: palindrome();
break;
case 4: display();
break;
case 5: exit(1);
default: printf("\nPlease enter valid choice ") ;
break;
}
}
}
void push(int item)
{
if(top == MAX-1)
{
printf("\n~~~~Stack overflow~~~~");
return;
}
top = top + 1 ;
s[top] = item;
}
void pop()
{
int item;
if(top == -1)
{
printf("\n~~~~Stack underflow~~~~");
return -1;
}
item = s[top];
printf("\nElement popped is: %d", item);
top = top - 1;
}
void display()
{
int i;
if(top == -1)
{
printf("\n~~~~Stack is empty~~~~");
return;
}
printf("\nStack elements are:\n ");
for(i=top; i>=0 ; i--)
printf("| %d |\n", s[i]);
}
void palindrome()
{
int flag=1,i;
printf("\nStack content are:\n");
for(i=top; i>=0 ; i--)
printf("| %d |\n", s[i]);
printf("\nReverse of stack content are:\n");
for(i=0; i<=top; i++)
printf("| %d |\n", s[i]);
for(i=0; i<=top/2; i++)
{
if( s[i] != s[top-i] )
{
flag = 0;
break;
}
}
if(flag == 1)
printf("\nIt is palindrome number");
else
printf("\nIt is not a palindrome number");
}
Output:
~~~~~~Menu~~~~~~ :
=>1.Push an Element to Stack and Overflow demo
=>2.Pop an Element from Stack and Underflow demo
=>3.Palindrome demo
=>4.Display
=>5.Exit
Enter your choice: 1
Enter an element to be pushed: 11
4
#include<stdio.h>
#include<stdlib.h>
void evaluate();
void push(char);
char pop();
int prec(char);
char infix[30], postfix[30], stack[30];
int top = -1;
void main()
{
printf("\nEnter the valid infix expression:\t");
scanf("%s", infix);
evaluate();
printf("\nThe entered infix expression is :\n %s \n", infix);
printf("\nThe corresponding postfix expression is :\n %s \n", postfix);
}
void evaluate()
{
int i = 0, j = 0;
char symb, temp;
push('#');
for(i=0; infix[i] != '\0'; i++)
{
symb = infix[i];
switch(symb)
{
case '(' : push(symb);
break;
case ')' : temp = pop();
while(temp != '(' )
{
postfix[j] = temp;
j++;
temp = pop();
}
break;
case '+' :
case '-' :
case '*' :
case '/' :
case '%' :
case '^' :
case '$' : while( prec(stack[top]) >= prec(symb) )
{
temp = pop();
postfix[j] = temp;
j++;
}
push(symb);
break;
default: postfix[j] = symb;
j++;
}
}
while(top > 0)
{
temp = pop();
postfix[j] = temp;
j++;
}
postfix[j] = '\0';
}
void push(char item)
{
top = top+1;
stack[top] = item;
}
char pop()
{
char item;
item = stack[top];
top = top-1;
return item;
}
int prec(char symb)
{
int p;
switch(symb)
{
case '#' : p = -1;
break;
case '(' :
case ')' : p = 0;
break;
case '+' :
case '-' : p = 1;
break;
case '*' :
case '/' :
case '%' : p = 2;
break;
case '^' :
case '$' : p = 3;
break;
}
return p;
}
Output:
Enter the valid infix expression: (a+b)+c/d*e
The entered infix expression is :
(a+b)+c/d*e
The corresponding postfix expression is :
ab+cd/e*+
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int i, top = -1;
int op1, op2, res, s[20];
char postfix[90], symb;
void push(int item)
{
top = top+1;
s[top] = item;
}
int pop()
{
int item;
item = s[top];
top = top-1;
return item;
}
void main()
{
printf("\nEnter a valid postfix expression:\n");
scanf("%s", postfix);
for(i=0; postfix[i]!='\0'; i++)
{
symb = postfix[i];
if(isdigit(symb))
{
push(symb - '0');
}
else
{
op2 = pop();
op1 = pop();
switch(symb)
{
case '+': push(op1+op2);
break;
case '-': push(op1-op2);
break;
case '*': push(op1*op2);
break;
case '/': push(op1/op2);
break;
case '%': push(op1%op2);
break;
case '$':
case '^': push(pow(op1,op2));
break;
default : push(0);
}
}
}
res = pop();
printf("\n Result = %d", res);
}
Output:
To compile in Linux: cc 5.c -lm
Enter a valid postfix expression:
623+-382/+*2$3+
Result = 52
Enter a valid postfix expression:
42$3*3-84/11+/+
Result = 46
#include<stdio.h>
#include<math.h>
void tower(int n, char from_peg, char aux_peg, char to_peg);
void main()
{
int n;
printf("\nEnter the number of disks: ");
scanf("%d", &n);
tower(n, 'A', 'B', 'C'); // A -> from_peg B -> aux_peg C -> to_peg
printf("\nTotal number of moves = %.0lf", pow(2,n)-1 );
}
// A -> from_peg B -> aux_peg C -> to_peg
void tower(int n, char from_peg, char aux_peg, char to_peg)
{
if(n == 1)
{
printf("\nMove disk %d from %c peg to %c peg", n, from_peg, to_peg);
return;
}
// move n-1 disks from A(from_peg) to B(to_peg) using C(aux_peg) as auxiliary
tower(n-1, from_peg, to_peg, aux_peg);
printf("\nMove disk %d from peg %c to %c peg", n, from_peg, to_peg);
// move n-1 disks from B(aux_peg) to C(to_peg) using A(from_peg) as auxiliary
tower(n-1, aux_peg, from_peg, to_peg);
}
Output:
Enter the number of disks: 3
Move disk 1 from A peg to C peg
Move disk 2 from peg A to B peg
Move disk 1 from C peg to B peg
Move disk 3 from peg A to C peg
Move disk 1 from B peg to A peg
Move disk 2 from peg B to C peg
Move disk 1 from A peg to C peg
Total number of moves = 7
#include <stdio.h>
#include<stdlib.h>
#include<stdio_ext.h>
#define MAX 3
char cq[MAX];
int front = -1,rear = -1;
void inset(char);
void delete();
void display();
int main()
{
int ch;
char item;
while(1)
{
printf("\n\n~~Main Menu~~");
printf("\n==> 1. Insertion and Overflow Demo");
printf("\n==> 2. Deletion and Underflow Demo");
printf("\n==> 3. Display");
printf("\n==> 4. Exit");
printf("\nEnter Your Choice: ");
scanf("%d", &ch);
__fpurge(stdin);
switch(ch)
{
case 1: printf("\n\nEnter the element to be inserted: ");
scanf("%c", &item);
insert(item);
break;
case 2: delete();
break;
case 3: display();
break;
case 4: exit(0);
default: printf("\n\nPlease enter a valid choice");
}
}
}
void insert(char item)
{
if(front ==(rear+1)%MAX)
{
printf("\n\n~~Circular Queue Overflow~~");
}
else
{
if(front == -1)
front = rear = 0;
else
rear = (rear+1)%MAX;
cq[rear] = item;
}
}
void delete()
{
char item;
if(front == -1)
{
printf("\n\n~~Circular Queue Underflow~~");
}
else
{
item = cq[front];
if(front == rear) //only one element
front = rear = -1;
else
front = (front+1)%MAX;
printf("\n\nDeleted element from the queue is: %c ", item );
}
}
void display()
{
int i ;
if(front ==-1)
{
printf("\n\nCircular Queue Empty");
return;
}
else
{
printf("\nCircular Queue contents are:\n");
printf("\nFront[%d]-> ", front);
for(i=front; i!=rear ; i=(i+1)%MAX)
{
printf(" %c", cq[i]);
}
printf(" %c", cq[i]);
printf(" <-[%d]Rear", rear);
printf("\n");
}
}
Output:
~~Main Menu~~
==> 1. Insertion and Overflow Demo
==> 2. Deletion and Underflow Demo
==> 3. Display
==> 4. Exit
Enter Your Choice: 1
Enter the element to be inserted: A
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char usn[25], name[25], branch[25];
int sem;
long int phoneNo;
struct node *link;
};
typedef struct node * NODE;
NODE first = NULL;
int count = 0;
NODE createStudentNode()
{
char us[20], nam[20], bran[20];
int se;
long int pn;
printf("\nEnter the usn,Name,Branch, sem,PhoneNo of the student: \n");
scanf("%s %s %s %d %ld", us, nam, bran, &se, &pn);
NODE studentNode;
studentNode = (NODE)malloc(sizeof(struct node));
if(studentNode == NULL)
{
printf("\nMemory is not available");
exit(0);
}
studentNode->link = NULL;
strcpy(studentNode->usn, us);
strcpy(studentNode->name, nam);
strcpy(studentNode->branch, bran);
studentNode->sem = se;
studentNode->phoneNo = pn;
count++;
return studentNode;
}
NODE insertAtFront()
{
NODE temp;
temp = createStudentNode();
if(first == NULL)
{
return temp;
}
temp->link = first;
return temp;
}
NODE deleteAtFront()
{
NODE temp;
if(first == NULL)
{
printf("\nLinked list is empty");
return NULL;
}
if(first->link == NULL)
{
printf("\nThe Student node with usn:%s is deleted ", first->usn);
count--;
free(first);
return NULL;
}
temp = first;
first = first->link;
printf("\nThe Student node with usn:%s is deleted",temp->usn);
count--;
free(temp);
return first;
}
NODE insertAtEnd()
{
NODE cur, temp;
temp = createStudentNode();
if(first == NULL)
{
return temp;
}
if(first->link == NULL)
{
first->link = temp;
return first;
}
cur = first;
while(cur->link !=NULL)
{
cur = cur->link;
}
cur->link = temp;
return first;
}
NODE deleteAtEnd()
{
NODE cur, prev;
if(first == NULL)
{
printf("\nLinked List is empty");
return NULL;
}
if(first->link == NULL)
{
printf("\nThe student node with the usn:%s is deleted", first->usn);
free(first);
count--;
return NULL;
}
prev = NULL;
cur = first;
while(cur->link != NULL)
{
prev = cur;
cur = cur->link;
}
printf("\nThe student node with the usn:%s is deleted",cur->usn);
free(cur);
prev->link = NULL;
count--;
return first;
}
void displayStatus()
{
NODE cur;
int nodeNo = 1;
cur = first;
printf("\nThe contents of SLL: \n");
if(cur == NULL)
printf("\nNo Contents to display in SLL \n");
while(cur!=NULL)
{
printf("\n||%d||", nodeNo);
printf(" USN:%s|", cur->usn);
printf(" Name:%s|", cur->name);
printf(" Branch:%s|", cur->branch);
printf(" Sem:%d|", cur->sem);
printf(" Ph:%ld|", cur->phoneNo);
cur = cur->link;
nodeNo++;
}
printf("\n No of student nodes is %d \n",count);
}
void stackDemoUsingSLL()
{
int ch;
while(1)
{
printf("\n~~~Stack Demo using SLL~~~\n");
printf("\n1:Push operation \n2: Pop operation \n3: Display \n4:Exit \n");
printf("\nEnter your choice for stack demo");
scanf("%d", &ch);
switch(ch)
{
case 1: first = insertAtFront();
break;
case 2: first = deleteAtFront();
break;
case 3: displayStatus(); break;
default: return;
}
}
}
void main()
{
int ch, i, n;
while(1)
{
printf("\n~~~Menu~~~");
printf("\nEnter your choice for SLL operation \n");
printf("\n1:Create SLL of Student Nodes");
printf("\n2:DisplayStatus");
printf("\n3:InsertAtEnd");
printf("\n4:DeleteAtEnd");
printf("\n5:Stack Demo using SLL(Insertion and Deletion at Front)");
printf("\n6:Exit \n");
printf("\nEnter your choice:");
scanf("%d", &ch);
switch(ch)
{
case 1 : printf("\nEnter the no of students: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
first = insertAtFront();
break;
case 2: displayStatus();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: stackDemoUsingSLL();
break;
case 6: exit(0);
default: printf("\nPlease enter the valid choice");
}
}
}
Output:
~~~Menu~~~
Enter your choice for SLL operation
1:Create SLL of Student Nodes
2:DisplayStatus
3:InsertAtEnd
4:DeleteAtEnd
5:Stack Demo using SLL(Insertion and Deletion at Front)
6:Exit
Enter your choice:1
Enter the no of students: 3
Enter the usn, Name, Branch, sem, PhoneNo of the student:
111
aaa
cs
1
111111
Enter the usn, Name, Branch, sem, PhoneNo of the student:
222
bbb
ec
2
222222
Enter the usn, Name, Branch, sem, PhoneNo of the student:
333
ccc
ec
3
333333
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char ssn[25], name[25], dept[10], designation[25];
int sal;
long int phoneno;
struct node *llink;
struct node *rlink;
};
typedef struct node* NODE;
NODE first = NULL;
int count = 0;
NODE createEmployeeNode()
{
char ssn[25], name[25], dept[10], designation[25];
int sal;
long int phoneno;
printf("\nEnter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee: \n");
scanf("%s %s %s %s %d %ld",ssn,name,dept,designation,&sal,&phoneno);
NODE employeeNode;
employeeNode = (NODE)malloc(sizeof(struct node));
if( employeeNode== NULL)
{
printf("\nRunning out of memory");
exit(0);
}
employeeNode->llink = NULL;
employeeNode->rlink = NULL;
strcpy(employeeNode->ssn, ssn);
strcpy(employeeNode->name, name);
strcpy(employeeNode->dept, dept);
strcpy(employeeNode->designation, designation);
employeeNode->sal = sal;
employeeNode->phoneno = phoneno;
count++;
return employeeNode;
}
NODE insertAtFront()
{
NODE temp;
temp = createEmployeeNode();
if(first == NULL)
{
return temp;
}
temp->rlink = first;
first->llink = temp;
return temp;
}
NODE deleteAtFront()
{
NODE temp;
if(first == NULL)
{
printf("\nDoubly Linked List is empty");
return NULL;
}
if(first->rlink== NULL)
{
printf("\nThe employee node with the ssn:%s is deleted", first->ssn);
free(first);
count--;
return NULL;
}
temp = first;
first = first->rlink;
temp->rlink = NULL;
first->llink = NULL;
printf("\nThe employee node with the ssn:%s is deleted", temp->ssn);
free(temp);
count--;
return first;
}
NODE insertAtEnd()
{
NODE cur, temp;
temp = createEmployeeNode();
if(first == NULL)
{
return temp;
}
cur = first;
while(cur->rlink!=NULL)
{
cur = cur->rlink;
}
cur->rlink = temp;
temp->llink = cur;
return first;
}
NODE deleteAtEnd()
{
NODE prev, cur;
if(first == NULL)
{
printf("\nDoubly Linked List is empty");
return NULL;
}
if(first->rlink == NULL)
{
printf("\nThe employee node with the ssn:%s is deleted", first->ssn);
free(first);
count--;
return NULL;
}
prev = NULL;
cur = first;
while(cur->rlink!=NULL)
{
prev = cur;
cur = cur->rlink;
}
cur->llink = NULL;
printf("\nThe employee node with the ssn:%s is deleted", cur->ssn);
free(cur);
prev->rlink = NULL;
count--;
return first;
}
void displayStatus()
{
NODE cur;
int nodeno=1;
cur = first;
if(cur == NULL)
printf("\nNo Contents to display in DLL");
while(cur!=NULL)
{
printf("\nENode:%d|| SSN:%s| Name:%s| Department:%s| Designation:%s|
Salary:%d| Phone no:%ld", nodeno, cur->ssn, cur->name, cur->dept,
cur->designation, cur->sal, cur->phoneno);
cur = cur->rlink;
nodeno++;
}
printf("\nNo of employee nodes is %d",count);
}
void doubleEndedQueueDemo()
{
int ch;
while(1)
{
printf("\nDemo Double Ended Queue Operation");
printf("\n1:InsertQueueFront \n2: DeleteQueueFront \n3:InsertQueueRear
\n4:DeleteQueueRear \n5:DisplayStatus \n6: Exit \n");
scanf("%d", &ch);
switch(ch)
{
case 1: first = insertAtFront();
break;
case 2: first = deleteAtFront();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: displayStatus();
break;
default : return;
}
}
}
void main()
{
int ch, i, n;
while(1)
{
printf("\n\n~~~Menu~~~");
printf("\n1:Create DLL of Employee Nodes");
printf("\n2:DisplayStatus");
printf("\n3:InsertAtEnd");
printf("\n4:DeleteAtEnd");
printf("\n5:InsertAtFront");
printf("\n6:DeleteAtFront");
printf("\n7:Double Ended Queue Demo using DLL");
printf("\n8:Exit \n");
printf("\nPlease enter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1 : printf("\nEnter the no of Employees: ");
scanf("%d", &n);
for(i=1;i<=n;i++)
first = insertAtEnd();
break;
case 2: displayStatus();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: first = insertAtFront();
break;
case 6: first = deleteAtFront();
break;
case 7: doubleEndedQueueDemo();
break;
case 8 : exit(0);
default: printf("\nPlease Enter the valid choice");
}
}
}
Output:
~~~Menu~~~
1:Create DLL of Employee Nodes
2:DisplayStatus
3:InsertAtEnd
4:DeleteAtEnd
5:InsertAtFront
6:DeleteAtFront
7:Double Ended Queue Demo using DLL
8:Exit
Please enter your choice: 1
Enter the no of Employees: 2
Enter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee:
111
aaa
dept1
des1
1000
11111
Enter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee:
222
bbb
dept2
des2
2000
22222
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define COMPARE(x, y) ( (x == y) ? 0 : (x > y) ? 1 : -1)
struct node
{
int coef;
int xexp, yexp, zexp;
struct node *link;
};
typedef struct node *NODE;
NODE getnode()
{
NODE x;
x = (NODE) malloc(sizeof(struct node));
if(x == NULL)
{
printf("Running out of memory \n");
return NULL;
}
return x;
}
NODE attach(int coef, int xexp, int yexp, int zexp, NODE head)
{
NODE temp, cur;
temp = getnode();
temp->coef = coef;
temp->xexp = xexp;
temp->yexp = yexp;
temp->zexp = zexp;
cur = head->link;
while(cur->link != head)
{
cur = cur->link;
}
cur->link = temp;
temp->link = head;
return head;
}
NODE read_poly(NODE head)
{
int i, j, coef, xexp, yexp, zexp, n;
printf("\nEnter the no of terms in the polynomial: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
printf("\n\tEnter the %d term: ",i);
printf("\n\t\tCoef = ");
scanf("%d", &coef);
printf("\n\t\tEnter Pow(x) Pow(y) and Pow(z): ");
scanf("%d", &xexp);
scanf("%d", &yexp);
scanf("%d", &zexp);
head = attach(coef, xexp, yexp, zexp, head);
}
return head;
}
void display(NODE head)
{
NODE temp;
if(head->link == head)
{
printf("\nPolynomial does not exist.");
return;
}
temp = head->link;
while(temp != head)
{
printf("%dx^%dy^%dz^%d", temp->coef, temp->xexp, temp->yexp, temp->zexp);
temp = temp->link;
if(temp != head)
printf(" + ");
}
}
int poly_evaluate(NODE head)
{
int x, y, z, sum = 0;
NODE poly;
printf("\nEnter the value of x,y and z: ");
scanf("%d %d %d", &x, &y, &z);
poly = head->link;
while(poly != head)
{
sum += poly->coef * pow(x,poly->xexp)* pow(y,poly->yexp) * pow(z,poly->zexp);
poly = poly->link;
}
return sum;
}
NODE poly_sum(NODE head1, NODE head2, NODE head3)
{
NODE a, b;
int coef;
a = head1->link;
b = head2->link;
while(a!=head1 && b!=head2)
{
while(1)
{
if(a->xexp == b->xexp && a->yexp == b->yexp && a->zexp == b->zexp)
{
coef = a->coef + b->coef;
head3 = attach(coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
b = b->link;
break;
} //if ends here
if(a->xexp!=0 || b->xexp!=0)
{
switch(COMPARE(a->xexp, b->xexp))
{
case -1 : head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
case 0 : if(a->yexp > b->yexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->yexp < b->yexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
else if(a->zexp > b->zexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->zexp < b->zexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
case 1 : head3 = attach(a->coef,a->xexp,a->yexp,a->zexp,head3);
a = a->link;
break;
} //switch ends here
break;
} //if ends here
if(a->yexp!=0 || b->yexp!=0)
{
switch(COMPARE(a->yexp, b->yexp))
{
case -1 : head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
case 0 : if(a->zexp > b->zexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->zexp < b->zexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
case 1 : head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
break;
}
if(a->zexp!=0 || b->zexp!=0)
{
switch(COMPARE(a->zexp,b->zexp))
{
case -1 : head3 = attach(b->coef,b->xexp,b->yexp,b->zexp,head3);
b = b->link;
break;
case 1 : head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
break;
}
}
}
while(a!= head1)
{
head3 = attach(a->coef,a->xexp,a->yexp,a->zexp,head3);
a = a->link;
}
while(b!= head2)
{
head3 = attach(b->coef,b->xexp,b->yexp,b->zexp,head3);
b = b->link;
}
return head3;
}
void main()
{
NODE head, head1, head2, head3;
int res, ch;
head = getnode(); /* For polynomial evalaution */
head1 = getnode(); /* To hold POLY1 */
head2 = getnode(); /* To hold POLY2 */
head3 = getnode(); /* To hold POLYSUM */
head->link=head;
head1->link=head1;
head2->link=head2;
head3->link= head3;
while(1)
{
printf("\n~~~Menu~~~");
printf("\n1.Represent and Evaluate a Polynomial P(x,y,z)");
printf("\n2.Find the sum of two polynomials POLY1(x,y,z)");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\n~~~~Polynomial evaluation P(x,y,z)~~~\n");
head = read_poly(head);
printf("\nRepresentation of Polynomial for evaluation: \n");
display(head);
res = poly_evaluate(head);
printf("\nResult of polynomial evaluation is : %d \n", res);
break;
case 2: printf("\nEnter the POLY1(x,y,z): \n");
head1 = read_poly(head1);
printf("\nPolynomial 1 is: \n");
display(head1);
printf("\nEnter the POLY2(x,y,z): \n");
head2 = read_poly(head2);
printf("\nPolynomial 2 is: \n");
display(head2);
printf("\nPolynomial addition result: \n");
head3 = poly_sum(head1,head2,head3);
display(head3);
break;
case 3: exit(0);
}
}
}
Output:
~~~Menu~~~
1.Represent and Evaluate a Polynomial P(x,y,z)
2.Find the sum of two polynomials POLY1(x,y,z) and POLY2(x,y,z)
Enter your choice: 1
~~~~Polynomial evaluation P(x,y,z)~~~
Enter the no of terms in the polynomial: 5
Enter the 1 term:
Coef = 6
Enter Pow(x) Pow(y) and Pow(z): 2 2 1
Enter the 2 term:
Coef = -4
Enter Pow(x) Pow(y) and Pow(z): 0 1 5
Enter the 3 term:
Coef = 3
Enter Pow(x) Pow(y) and Pow(z): 3 1 1
Enter the 4 term:
Coef = 2
Enter Pow(x) Pow(y) and Pow(z): 1 5 1
Enter the 5 term:
Coef = -2
Enter Pow(x) Pow(y) and Pow(z): 1 1 3
Representation of Polynomial for evaluation:
6x^2y^2z^1 + -4x^0y^1z^5 + 3x^3y^1z^1 + 2x^1y^5z^1 + -2x^1y^1z^3
Enter the value of x,y and z: 1 1 1
Result of polynomial evaluation is : 5
#include<stdio.h>
#include<stdlib.h>
struct BST
{
int data;
struct BST *lchild;
struct BST *rchild;
};
typedef struct BST * NODE;
NODE get_node()
{
NODE temp;
temp = (NODE) malloc(sizeof(struct BST));
temp->lchild = NULL;
temp->rchild = NULL;
return temp;
}
void insert(NODE root, NODE newnode);
void inorder(NODE root);
void preorder(NODE root);
void postorder(NODE root);
void search(NODE root, int key);
void insert(NODE root, NODE newnode)
{
/*Note: if newnode->data == root->data it will be skipped. No duplicate nodes are allowed */
if (newnode->data < root->data)
{
if (root->lchild == NULL)
root->lchild = newnode;
else
insert(root->lchild, newnode);
}
if (newnode->data > root->data)
{
if (root->rchild == NULL)
root->rchild = newnode;
else
insert(root->rchild, newnode);
}
void search(NODE root, int key)
{
NODE cur;
if(root == NULL)
{
printf("\nBST is empty.");
return;
}
cur = root;
while (cur != NULL)
{
if (cur->data == key)
{
printf("\nKey element %d is present in BST", cur->data);
return;
}
if (key < cur->data)
cur = cur->lchild;
else
cur = cur->rchild;
}
printf("\nKey element %d is not found in the BST", key);
}
void inorder(NODE root)
{
if(root != NULL)
{
inorder(root->lchild);
printf("%d ", root->data);
inorder(root->rchild);
}
}
void preorder(NODE root)
{
if (root != NULL)
{
printf("%d ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
void postorder(NODE root)
{
if (root != NULL)
{
postorder(root->lchild);
postorder(root->rchild);
printf("%d ", root->data);
}
}
void main()
{
int ch, key, val, i, n;
NODE root = NULL, newnode;
while(1)
{
printf("\n~~~~BST MENU~~~~");
printf("\n1.Create a BST");
printf("\n2.Search");
printf("\n3.BST Traversals: ");
printf("\n4.Exit");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1: printf("\nEnter the number of elements: ");
scanf("%d", &n);
for(i=1;i<=n;i++)
{
newnode = get_node();
printf("\nEnter The value: ");
scanf("%d", &val);
newnode->data = val;
if (root == NULL)
root = newnode;
else
insert(root, newnode);
}
break;
case 2: if (root == NULL)
printf("\nTree Is Not Created");
else
{
printf("\nThe Preorder display : ");
preorder(root);
printf("\nThe Inorder display : ");
inorder(root);
printf("\nThe Postorder display : ");
postorder(root);
}
break;
case 3: printf("\nEnter Element to be searched: ");
scanf("%d", &key);
search(root, key);
break;
case 4: exit(0);
}
}
printf("\nEnter the number of employee records (N) : ");
scanf("%d", &n);
printf("\nEnter the four digit key values (K) of 'N' Employee Records:\n ");
for(i=0; i<n; i++)
scanf("%d", &key[i]);
printf("\nEnter the two digit memory locations (m) for hash table: ");
scanf("%d", &m);
createHashTable();
printf("\nInserting key values of Employee records into hash table….. ");
for(i=0; i<n; i++)
{
if(elecount == m)
{
printf("\nHash table is full. Cannot insert the %d record key value", i+1);
break;
}
insertIntoHashTable(key[i]);
}
displayHashTable();
}
Output:
Enter the number of employee records (N) : 12
Enter the four digit key values (K) of 'N' Employee Records:
1234
5678
3456
2345
6799
1235
7890
3214
3456
1235
5679
2346
Enter the two digit memory locations (m) for hash table: 15
Inserting key values of Employee records into hash table
Hash Table contents are:
T[0] --> 7890
T[1] --> -1
T[2] --> -1
T[3] --> -1
T[4] --> 1234
T[5] --> 2345
T[6] --> 3456
T[7] --> 6799
T[8] --> 5678
T[9] --> 1235
T[10] --> 3214
T[11] --> 3456
T[12] --> 1235
T[13] --> 5679
T[14] --> 2346
NOTE: eclipse gcc linker default command is gcc, u have to change it to
gcc -lm, to run the math.h functions for avoiding unreference type errors.
Array
#include<stdio.h>#include<stdlib.h>
#define MAX 5
int a[MAX], pos, elem;
int n = 0;
void create();
void display();
void insert();
void delete();
void main()
{
int choice;
while(1)
{
printf("\n\n~~~~MENU~~~~");
printf("\n=>1. Create an array of N integers");
printf("\n=>2. Display of array elements");
printf("\n=>3. Insert ELEM at a given POS");
printf("\n=>4. Delete an element at a given POS");
printf("\n=>5. Exit");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1: create();
break;
case 2: display();
break;
case 3: insert();
break;
case 4: delete();
break;
case 5: exit(1);
break;
default: printf("\nPlease enter a valid choice:");
}
}
}
void create()
{
int i;
printf("\nEnter the number of elements: ");
scanf("%d", &n);
printf("\nEnter the elements: ");
for(i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
void display()
{
int i;
if(n == 0)
{
printf("\nNo elements to display");
return;
}
printf("\nArray elements are: ");
for(i=0; i<n;i++)
printf("%d\t ", a[i]);
}
void insert()
{
int i;
if(n == MAX)
{
printf("\nArray is full. Insertion is not possible");
return;
}
do
{
printf("\nEnter a valid position where element to be inserted: ");
scanf("%d", &pos);
}while(pos > n);
printf("\nEnter the value to be inserted: ");
scanf("%d", &elem);
for(i=n-1; i>=pos ; i--)
{
a[i+1] = a[i];
}
a[pos] = elem;
n = n+1;
display();
}
void delete()
{
int i;
if(n == 0)
{
printf("\nArray is empty and no elements to delete");
return;
}
do
{
printf("\nEnter a valid position from where element to be deleted: ");
scanf("%d", &pos);
}while(pos>=n);
elem = a[pos];
printf("\nDeleted element is : %d \n", elem);
for( i = pos; i< n-1; i++)
{
a[i] = a[i+1];
}
n = n-1;
display();
}
Output:
~~~~MENU~~~~
=>1. Create an array of N integers
=>2. Display of array elements
=>3. Insert ELEM at a given POS
=>4. Delete an element at a given POS
=>5. Exit
Enter your choice: 1
Enter the number of elements: 3
Enter the elements: 10 20 30
2
String
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[50], pat[50], rep[50];
int start = 0, patfound = 0;
int lasts, lastp, lastr;
void replacepattern()
{
int i, j;
lastr = strlen(rep)-2;
if(lastp != lastr)
{
printf("\nInvalid length of replace string");
exit(0);
}
else
{
i = start;
for(j=0; j<=lastr; j++)
{
str[i] = rep[j];
i++;
}
}
return;
}
void findpattern()
{
int i, j, inmatch;
lasts = (strlen(str)) - 2;
lastp = (strlen(pat)) - 2;
int endmatch;
for(endmatch = lastp; endmatch<=lasts; endmatch++, start++)
{
if(str[endmatch] == pat[lastp])
{
inmatch = start;
j=0;
while(j<lastp)
{
if(str[inmatch] == pat[j])
{
inmatch++;
j++;
}
else
{
break;
}
}
if(j == lastp)
{
patfound = 1;
replacepattern();
}
}
}
return;
}
void main()
{
printf("\nEnter the main string(STR): ");
fgets(str, 50, stdin);
printf("\nEnter the pattern to be matched(PAT): ");
fgets(pat, 50, stdin);
printf("\nEnter the string to be replaced(REP): ");
fgets(rep, 50, stdin);
printf("\nThe string before pattern match is:\n %s", str);
findpattern();
if(patfound == 0)
printf("\nThe pattern is not found in the main string");
else
printf("\nThe string after pattern match and replace is: \n %s ", str);
}
Output:
Case 1:
Enter the main string(STR): Hello hii how are you hii
Enter the pattern to be matched(PAT): hii
Enter the string to be replaced(REP): xyz
The string before pattern match is:
Hello hii how are you hii
The string after pattern match and replace is:
Hello xyz how are you xyz.
3.Palindrome
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
int s[MAX];
int top = -1;
void push(int item);
int pop();
void palindrome();
void display();
void main()
{
int choice, item;
while(1)
{
printf("\n\n\n\n~~~~~~Menu~~~~~~ : ");
printf("\n=>1.Push an Element to Stack and Overflow demo ");
printf("\n=>2.Pop an Element from Stack and Underflow demo");
printf("\n=>3.Palindrome demo ");
printf("\n=>4.Display ");
printf("\n=>5.Exit");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1: printf("\nEnter an element to be pushed: ");
scanf("%d", &item);
push(item);
break;
case 2: pop();
break;
case 3: palindrome();
break;
case 4: display();
break;
case 5: exit(1);
default: printf("\nPlease enter valid choice ") ;
break;
}
}
}
void push(int item)
{
if(top == MAX-1)
{
printf("\n~~~~Stack overflow~~~~");
return;
}
top = top + 1 ;
s[top] = item;
}
void pop()
{
int item;
if(top == -1)
{
printf("\n~~~~Stack underflow~~~~");
return -1;
}
item = s[top];
printf("\nElement popped is: %d", item);
top = top - 1;
}
void display()
{
int i;
if(top == -1)
{
printf("\n~~~~Stack is empty~~~~");
return;
}
printf("\nStack elements are:\n ");
for(i=top; i>=0 ; i--)
printf("| %d |\n", s[i]);
}
void palindrome()
{
int flag=1,i;
printf("\nStack content are:\n");
for(i=top; i>=0 ; i--)
printf("| %d |\n", s[i]);
printf("\nReverse of stack content are:\n");
for(i=0; i<=top; i++)
printf("| %d |\n", s[i]);
for(i=0; i<=top/2; i++)
{
if( s[i] != s[top-i] )
{
flag = 0;
break;
}
}
if(flag == 1)
printf("\nIt is palindrome number");
else
printf("\nIt is not a palindrome number");
}
Output:
~~~~~~Menu~~~~~~ :
=>1.Push an Element to Stack and Overflow demo
=>2.Pop an Element from Stack and Underflow demo
=>3.Palindrome demo
=>4.Display
=>5.Exit
Enter your choice: 1
Enter an element to be pushed: 11
4
Infix to postfix
#include<stdio.h>
#include<stdlib.h>
void evaluate();
void push(char);
char pop();
int prec(char);
char infix[30], postfix[30], stack[30];
int top = -1;
void main()
{
printf("\nEnter the valid infix expression:\t");
scanf("%s", infix);
evaluate();
printf("\nThe entered infix expression is :\n %s \n", infix);
printf("\nThe corresponding postfix expression is :\n %s \n", postfix);
}
void evaluate()
{
int i = 0, j = 0;
char symb, temp;
push('#');
for(i=0; infix[i] != '\0'; i++)
{
symb = infix[i];
switch(symb)
{
case '(' : push(symb);
break;
case ')' : temp = pop();
while(temp != '(' )
{
postfix[j] = temp;
j++;
temp = pop();
}
break;
case '+' :
case '-' :
case '*' :
case '/' :
case '%' :
case '^' :
case '$' : while( prec(stack[top]) >= prec(symb) )
{
temp = pop();
postfix[j] = temp;
j++;
}
push(symb);
break;
default: postfix[j] = symb;
j++;
}
}
while(top > 0)
{
temp = pop();
postfix[j] = temp;
j++;
}
postfix[j] = '\0';
}
void push(char item)
{
top = top+1;
stack[top] = item;
}
char pop()
{
char item;
item = stack[top];
top = top-1;
return item;
}
int prec(char symb)
{
int p;
switch(symb)
{
case '#' : p = -1;
break;
case '(' :
case ')' : p = 0;
break;
case '+' :
case '-' : p = 1;
break;
case '*' :
case '/' :
case '%' : p = 2;
break;
case '^' :
case '$' : p = 3;
break;
}
return p;
}
Output:
Enter the valid infix expression: (a+b)+c/d*e
The entered infix expression is :
(a+b)+c/d*e
The corresponding postfix expression is :
ab+cd/e*+
5postfix
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int i, top = -1;
int op1, op2, res, s[20];
char postfix[90], symb;
void push(int item)
{
top = top+1;
s[top] = item;
}
int pop()
{
int item;
item = s[top];
top = top-1;
return item;
}
void main()
{
printf("\nEnter a valid postfix expression:\n");
scanf("%s", postfix);
for(i=0; postfix[i]!='\0'; i++)
{
symb = postfix[i];
if(isdigit(symb))
{
push(symb - '0');
}
else
{
op2 = pop();
op1 = pop();
switch(symb)
{
case '+': push(op1+op2);
break;
case '-': push(op1-op2);
break;
case '*': push(op1*op2);
break;
case '/': push(op1/op2);
break;
case '%': push(op1%op2);
break;
case '$':
case '^': push(pow(op1,op2));
break;
default : push(0);
}
}
}
res = pop();
printf("\n Result = %d", res);
}
Output:
To compile in Linux: cc 5.c -lm
Enter a valid postfix expression:
623+-382/+*2$3+
Result = 52
Enter a valid postfix expression:
42$3*3-84/11+/+
Result = 46
Tower of Hanoi
#include<math.h>
void tower(int n, char from_peg, char aux_peg, char to_peg);
void main()
{
int n;
printf("\nEnter the number of disks: ");
scanf("%d", &n);
tower(n, 'A', 'B', 'C'); // A -> from_peg B -> aux_peg C -> to_peg
printf("\nTotal number of moves = %.0lf", pow(2,n)-1 );
}
// A -> from_peg B -> aux_peg C -> to_peg
void tower(int n, char from_peg, char aux_peg, char to_peg)
{
if(n == 1)
{
printf("\nMove disk %d from %c peg to %c peg", n, from_peg, to_peg);
return;
}
// move n-1 disks from A(from_peg) to B(to_peg) using C(aux_peg) as auxiliary
tower(n-1, from_peg, to_peg, aux_peg);
printf("\nMove disk %d from peg %c to %c peg", n, from_peg, to_peg);
// move n-1 disks from B(aux_peg) to C(to_peg) using A(from_peg) as auxiliary
tower(n-1, aux_peg, from_peg, to_peg);
}
Output:
Enter the number of disks: 3
Move disk 1 from A peg to C peg
Move disk 2 from peg A to B peg
Move disk 1 from C peg to B peg
Move disk 3 from peg A to C peg
Move disk 1 from B peg to A peg
Move disk 2 from peg B to C peg
Move disk 1 from A peg to C peg
Total number of moves = 7
7.circular q
#include <stdio.h>
#include<stdlib.h>
#include<stdio_ext.h>
#define MAX 3
char cq[MAX];
int front = -1,rear = -1;
void inset(char);
void delete();
void display();
int main()
{
int ch;
char item;
while(1)
{
printf("\n\n~~Main Menu~~");
printf("\n==> 1. Insertion and Overflow Demo");
printf("\n==> 2. Deletion and Underflow Demo");
printf("\n==> 3. Display");
printf("\n==> 4. Exit");
printf("\nEnter Your Choice: ");
scanf("%d", &ch);
__fpurge(stdin);
switch(ch)
{
case 1: printf("\n\nEnter the element to be inserted: ");
scanf("%c", &item);
insert(item);
break;
case 2: delete();
break;
case 3: display();
break;
case 4: exit(0);
default: printf("\n\nPlease enter a valid choice");
}
}
}
void insert(char item)
{
if(front ==(rear+1)%MAX)
{
printf("\n\n~~Circular Queue Overflow~~");
}
else
{
if(front == -1)
front = rear = 0;
else
rear = (rear+1)%MAX;
cq[rear] = item;
}
}
void delete()
{
char item;
if(front == -1)
{
printf("\n\n~~Circular Queue Underflow~~");
}
else
{
item = cq[front];
if(front == rear) //only one element
front = rear = -1;
else
front = (front+1)%MAX;
printf("\n\nDeleted element from the queue is: %c ", item );
}
}
void display()
{
int i ;
if(front ==-1)
{
printf("\n\nCircular Queue Empty");
return;
}
else
{
printf("\nCircular Queue contents are:\n");
printf("\nFront[%d]-> ", front);
for(i=front; i!=rear ; i=(i+1)%MAX)
{
printf(" %c", cq[i]);
}
printf(" %c", cq[i]);
printf(" <-[%d]Rear", rear);
printf("\n");
}
}
Output:
~~Main Menu~~
==> 1. Insertion and Overflow Demo
==> 2. Deletion and Underflow Demo
==> 3. Display
==> 4. Exit
Enter Your Choice: 1
Enter the element to be inserted: A
8.student data ll
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char usn[25], name[25], branch[25];
int sem;
long int phoneNo;
struct node *link;
};
typedef struct node * NODE;
NODE first = NULL;
int count = 0;
NODE createStudentNode()
{
char us[20], nam[20], bran[20];
int se;
long int pn;
printf("\nEnter the usn,Name,Branch, sem,PhoneNo of the student: \n");
scanf("%s %s %s %d %ld", us, nam, bran, &se, &pn);
NODE studentNode;
studentNode = (NODE)malloc(sizeof(struct node));
if(studentNode == NULL)
{
printf("\nMemory is not available");
exit(0);
}
studentNode->link = NULL;
strcpy(studentNode->usn, us);
strcpy(studentNode->name, nam);
strcpy(studentNode->branch, bran);
studentNode->sem = se;
studentNode->phoneNo = pn;
count++;
return studentNode;
}
NODE insertAtFront()
{
NODE temp;
temp = createStudentNode();
if(first == NULL)
{
return temp;
}
temp->link = first;
return temp;
}
NODE deleteAtFront()
{
NODE temp;
if(first == NULL)
{
printf("\nLinked list is empty");
return NULL;
}
if(first->link == NULL)
{
printf("\nThe Student node with usn:%s is deleted ", first->usn);
count--;
free(first);
return NULL;
}
temp = first;
first = first->link;
printf("\nThe Student node with usn:%s is deleted",temp->usn);
count--;
free(temp);
return first;
}
NODE insertAtEnd()
{
NODE cur, temp;
temp = createStudentNode();
if(first == NULL)
{
return temp;
}
if(first->link == NULL)
{
first->link = temp;
return first;
}
cur = first;
while(cur->link !=NULL)
{
cur = cur->link;
}
cur->link = temp;
return first;
}
NODE deleteAtEnd()
{
NODE cur, prev;
if(first == NULL)
{
printf("\nLinked List is empty");
return NULL;
}
if(first->link == NULL)
{
printf("\nThe student node with the usn:%s is deleted", first->usn);
free(first);
count--;
return NULL;
}
prev = NULL;
cur = first;
while(cur->link != NULL)
{
prev = cur;
cur = cur->link;
}
printf("\nThe student node with the usn:%s is deleted",cur->usn);
free(cur);
prev->link = NULL;
count--;
return first;
}
void displayStatus()
{
NODE cur;
int nodeNo = 1;
cur = first;
printf("\nThe contents of SLL: \n");
if(cur == NULL)
printf("\nNo Contents to display in SLL \n");
while(cur!=NULL)
{
printf("\n||%d||", nodeNo);
printf(" USN:%s|", cur->usn);
printf(" Name:%s|", cur->name);
printf(" Branch:%s|", cur->branch);
printf(" Sem:%d|", cur->sem);
printf(" Ph:%ld|", cur->phoneNo);
cur = cur->link;
nodeNo++;
}
printf("\n No of student nodes is %d \n",count);
}
void stackDemoUsingSLL()
{
int ch;
while(1)
{
printf("\n~~~Stack Demo using SLL~~~\n");
printf("\n1:Push operation \n2: Pop operation \n3: Display \n4:Exit \n");
printf("\nEnter your choice for stack demo");
scanf("%d", &ch);
switch(ch)
{
case 1: first = insertAtFront();
break;
case 2: first = deleteAtFront();
break;
case 3: displayStatus(); break;
default: return;
}
}
}
void main()
{
int ch, i, n;
while(1)
{
printf("\n~~~Menu~~~");
printf("\nEnter your choice for SLL operation \n");
printf("\n1:Create SLL of Student Nodes");
printf("\n2:DisplayStatus");
printf("\n3:InsertAtEnd");
printf("\n4:DeleteAtEnd");
printf("\n5:Stack Demo using SLL(Insertion and Deletion at Front)");
printf("\n6:Exit \n");
printf("\nEnter your choice:");
scanf("%d", &ch);
switch(ch)
{
case 1 : printf("\nEnter the no of students: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
first = insertAtFront();
break;
case 2: displayStatus();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: stackDemoUsingSLL();
break;
case 6: exit(0);
default: printf("\nPlease enter the valid choice");
}
}
}
Output:
~~~Menu~~~
Enter your choice for SLL operation
1:Create SLL of Student Nodes
2:DisplayStatus
3:InsertAtEnd
4:DeleteAtEnd
5:Stack Demo using SLL(Insertion and Deletion at Front)
6:Exit
Enter your choice:1
Enter the no of students: 3
Enter the usn, Name, Branch, sem, PhoneNo of the student:
111
aaa
cs
1
111111
Enter the usn, Name, Branch, sem, PhoneNo of the student:
222
bbb
ec
2
222222
Enter the usn, Name, Branch, sem, PhoneNo of the student:
333
ccc
ec
3
333333
9..dll employee
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
char ssn[25], name[25], dept[10], designation[25];
int sal;
long int phoneno;
struct node *llink;
struct node *rlink;
};
typedef struct node* NODE;
NODE first = NULL;
int count = 0;
NODE createEmployeeNode()
{
char ssn[25], name[25], dept[10], designation[25];
int sal;
long int phoneno;
printf("\nEnter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee: \n");
scanf("%s %s %s %s %d %ld",ssn,name,dept,designation,&sal,&phoneno);
NODE employeeNode;
employeeNode = (NODE)malloc(sizeof(struct node));
if( employeeNode== NULL)
{
printf("\nRunning out of memory");
exit(0);
}
employeeNode->llink = NULL;
employeeNode->rlink = NULL;
strcpy(employeeNode->ssn, ssn);
strcpy(employeeNode->name, name);
strcpy(employeeNode->dept, dept);
strcpy(employeeNode->designation, designation);
employeeNode->sal = sal;
employeeNode->phoneno = phoneno;
count++;
return employeeNode;
}
NODE insertAtFront()
{
NODE temp;
temp = createEmployeeNode();
if(first == NULL)
{
return temp;
}
temp->rlink = first;
first->llink = temp;
return temp;
}
NODE deleteAtFront()
{
NODE temp;
if(first == NULL)
{
printf("\nDoubly Linked List is empty");
return NULL;
}
if(first->rlink== NULL)
{
printf("\nThe employee node with the ssn:%s is deleted", first->ssn);
free(first);
count--;
return NULL;
}
temp = first;
first = first->rlink;
temp->rlink = NULL;
first->llink = NULL;
printf("\nThe employee node with the ssn:%s is deleted", temp->ssn);
free(temp);
count--;
return first;
}
NODE insertAtEnd()
{
NODE cur, temp;
temp = createEmployeeNode();
if(first == NULL)
{
return temp;
}
cur = first;
while(cur->rlink!=NULL)
{
cur = cur->rlink;
}
cur->rlink = temp;
temp->llink = cur;
return first;
}
NODE deleteAtEnd()
{
NODE prev, cur;
if(first == NULL)
{
printf("\nDoubly Linked List is empty");
return NULL;
}
if(first->rlink == NULL)
{
printf("\nThe employee node with the ssn:%s is deleted", first->ssn);
free(first);
count--;
return NULL;
}
prev = NULL;
cur = first;
while(cur->rlink!=NULL)
{
prev = cur;
cur = cur->rlink;
}
cur->llink = NULL;
printf("\nThe employee node with the ssn:%s is deleted", cur->ssn);
free(cur);
prev->rlink = NULL;
count--;
return first;
}
void displayStatus()
{
NODE cur;
int nodeno=1;
cur = first;
if(cur == NULL)
printf("\nNo Contents to display in DLL");
while(cur!=NULL)
{
printf("\nENode:%d|| SSN:%s| Name:%s| Department:%s| Designation:%s|
Salary:%d| Phone no:%ld", nodeno, cur->ssn, cur->name, cur->dept,
cur->designation, cur->sal, cur->phoneno);
cur = cur->rlink;
nodeno++;
}
printf("\nNo of employee nodes is %d",count);
}
void doubleEndedQueueDemo()
{
int ch;
while(1)
{
printf("\nDemo Double Ended Queue Operation");
printf("\n1:InsertQueueFront \n2: DeleteQueueFront \n3:InsertQueueRear
\n4:DeleteQueueRear \n5:DisplayStatus \n6: Exit \n");
scanf("%d", &ch);
switch(ch)
{
case 1: first = insertAtFront();
break;
case 2: first = deleteAtFront();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: displayStatus();
break;
default : return;
}
}
}
void main()
{
int ch, i, n;
while(1)
{
printf("\n\n~~~Menu~~~");
printf("\n1:Create DLL of Employee Nodes");
printf("\n2:DisplayStatus");
printf("\n3:InsertAtEnd");
printf("\n4:DeleteAtEnd");
printf("\n5:InsertAtFront");
printf("\n6:DeleteAtFront");
printf("\n7:Double Ended Queue Demo using DLL");
printf("\n8:Exit \n");
printf("\nPlease enter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1 : printf("\nEnter the no of Employees: ");
scanf("%d", &n);
for(i=1;i<=n;i++)
first = insertAtEnd();
break;
case 2: displayStatus();
break;
case 3: first = insertAtEnd();
break;
case 4: first = deleteAtEnd();
break;
case 5: first = insertAtFront();
break;
case 6: first = deleteAtFront();
break;
case 7: doubleEndedQueueDemo();
break;
case 8 : exit(0);
default: printf("\nPlease Enter the valid choice");
}
}
}
Output:
~~~Menu~~~
1:Create DLL of Employee Nodes
2:DisplayStatus
3:InsertAtEnd
4:DeleteAtEnd
5:InsertAtFront
6:DeleteAtFront
7:Double Ended Queue Demo using DLL
8:Exit
Please enter your choice: 1
Enter the no of Employees: 2
Enter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee:
111
aaa
dept1
des1
1000
11111
Enter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee:
222
bbb
dept2
des2
2000
22222
~~~polynomial~~
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define COMPARE(x, y) ( (x == y) ? 0 : (x > y) ? 1 : -1)
struct node
{
int coef;
int xexp, yexp, zexp;
struct node *link;
};
typedef struct node *NODE;
NODE getnode()
{
NODE x;
x = (NODE) malloc(sizeof(struct node));
if(x == NULL)
{
printf("Running out of memory \n");
return NULL;
}
return x;
}
NODE attach(int coef, int xexp, int yexp, int zexp, NODE head)
{
NODE temp, cur;
temp = getnode();
temp->coef = coef;
temp->xexp = xexp;
temp->yexp = yexp;
temp->zexp = zexp;
cur = head->link;
while(cur->link != head)
{
cur = cur->link;
}
cur->link = temp;
temp->link = head;
return head;
}
NODE read_poly(NODE head)
{
int i, j, coef, xexp, yexp, zexp, n;
printf("\nEnter the no of terms in the polynomial: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
printf("\n\tEnter the %d term: ",i);
printf("\n\t\tCoef = ");
scanf("%d", &coef);
printf("\n\t\tEnter Pow(x) Pow(y) and Pow(z): ");
scanf("%d", &xexp);
scanf("%d", &yexp);
scanf("%d", &zexp);
head = attach(coef, xexp, yexp, zexp, head);
}
return head;
}
void display(NODE head)
{
NODE temp;
if(head->link == head)
{
printf("\nPolynomial does not exist.");
return;
}
temp = head->link;
while(temp != head)
{
printf("%dx^%dy^%dz^%d", temp->coef, temp->xexp, temp->yexp, temp->zexp);
temp = temp->link;
if(temp != head)
printf(" + ");
}
}
int poly_evaluate(NODE head)
{
int x, y, z, sum = 0;
NODE poly;
printf("\nEnter the value of x,y and z: ");
scanf("%d %d %d", &x, &y, &z);
poly = head->link;
while(poly != head)
{
sum += poly->coef * pow(x,poly->xexp)* pow(y,poly->yexp) * pow(z,poly->zexp);
poly = poly->link;
}
return sum;
}
NODE poly_sum(NODE head1, NODE head2, NODE head3)
{
NODE a, b;
int coef;
a = head1->link;
b = head2->link;
while(a!=head1 && b!=head2)
{
while(1)
{
if(a->xexp == b->xexp && a->yexp == b->yexp && a->zexp == b->zexp)
{
coef = a->coef + b->coef;
head3 = attach(coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
b = b->link;
break;
} //if ends here
if(a->xexp!=0 || b->xexp!=0)
{
switch(COMPARE(a->xexp, b->xexp))
{
case -1 : head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
case 0 : if(a->yexp > b->yexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->yexp < b->yexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
else if(a->zexp > b->zexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->zexp < b->zexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
case 1 : head3 = attach(a->coef,a->xexp,a->yexp,a->zexp,head3);
a = a->link;
break;
} //switch ends here
break;
} //if ends here
if(a->yexp!=0 || b->yexp!=0)
{
switch(COMPARE(a->yexp, b->yexp))
{
case -1 : head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
case 0 : if(a->zexp > b->zexp)
{
head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
else if(a->zexp < b->zexp)
{
head3 = attach(b->coef, b->xexp, b->yexp, b->zexp, head3);
b = b->link;
break;
}
case 1 : head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
break;
}
if(a->zexp!=0 || b->zexp!=0)
{
switch(COMPARE(a->zexp,b->zexp))
{
case -1 : head3 = attach(b->coef,b->xexp,b->yexp,b->zexp,head3);
b = b->link;
break;
case 1 : head3 = attach(a->coef, a->xexp, a->yexp, a->zexp, head3);
a = a->link;
break;
}
break;
}
}
}
while(a!= head1)
{
head3 = attach(a->coef,a->xexp,a->yexp,a->zexp,head3);
a = a->link;
}
while(b!= head2)
{
head3 = attach(b->coef,b->xexp,b->yexp,b->zexp,head3);
b = b->link;
}
return head3;
}
void main()
{
NODE head, head1, head2, head3;
int res, ch;
head = getnode(); /* For polynomial evalaution */
head1 = getnode(); /* To hold POLY1 */
head2 = getnode(); /* To hold POLY2 */
head3 = getnode(); /* To hold POLYSUM */
head->link=head;
head1->link=head1;
head2->link=head2;
head3->link= head3;
while(1)
{
printf("\n~~~Menu~~~");
printf("\n1.Represent and Evaluate a Polynomial P(x,y,z)");
printf("\n2.Find the sum of two polynomials POLY1(x,y,z)");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("\n~~~~Polynomial evaluation P(x,y,z)~~~\n");
head = read_poly(head);
printf("\nRepresentation of Polynomial for evaluation: \n");
display(head);
res = poly_evaluate(head);
printf("\nResult of polynomial evaluation is : %d \n", res);
break;
case 2: printf("\nEnter the POLY1(x,y,z): \n");
head1 = read_poly(head1);
printf("\nPolynomial 1 is: \n");
display(head1);
printf("\nEnter the POLY2(x,y,z): \n");
head2 = read_poly(head2);
printf("\nPolynomial 2 is: \n");
display(head2);
printf("\nPolynomial addition result: \n");
head3 = poly_sum(head1,head2,head3);
display(head3);
break;
case 3: exit(0);
}
}
}
Output:
~~~Menu~~~
1.Represent and Evaluate a Polynomial P(x,y,z)
2.Find the sum of two polynomials POLY1(x,y,z) and POLY2(x,y,z)
Enter your choice: 1
~~~~Polynomial evaluation P(x,y,z)~~~
Enter the no of terms in the polynomial: 5
Enter the 1 term:
Coef = 6
Enter Pow(x) Pow(y) and Pow(z): 2 2 1
Enter the 2 term:
Coef = -4
Enter Pow(x) Pow(y) and Pow(z): 0 1 5
Enter the 3 term:
Coef = 3
Enter Pow(x) Pow(y) and Pow(z): 3 1 1
Enter the 4 term:
Coef = 2
Enter Pow(x) Pow(y) and Pow(z): 1 5 1
Enter the 5 term:
Coef = -2
Enter Pow(x) Pow(y) and Pow(z): 1 1 3
Representation of Polynomial for evaluation:
6x^2y^2z^1 + -4x^0y^1z^5 + 3x^3y^1z^1 + 2x^1y^5z^1 + -2x^1y^1z^3
Enter the value of x,y and z: 1 1 1
Result of polynomial evaluation is : 5
11BTT
#include<stdio.h>
#include<stdlib.h>
struct BST
{
int data;
struct BST *lchild;
struct BST *rchild;
};
typedef struct BST * NODE;
NODE get_node()
{
NODE temp;
temp = (NODE) malloc(sizeof(struct BST));
temp->lchild = NULL;
temp->rchild = NULL;
return temp;
}
void insert(NODE root, NODE newnode);
void inorder(NODE root);
void preorder(NODE root);
void postorder(NODE root);
void search(NODE root, int key);
void insert(NODE root, NODE newnode)
{
/*Note: if newnode->data == root->data it will be skipped. No duplicate nodes are allowed */
if (newnode->data < root->data)
{
if (root->lchild == NULL)
root->lchild = newnode;
else
insert(root->lchild, newnode);
}
if (newnode->data > root->data)
{
if (root->rchild == NULL)
root->rchild = newnode;
else
insert(root->rchild, newnode);
}
}
{
NODE cur;
if(root == NULL)
{
printf("\nBST is empty.");
return;
}
cur = root;
while (cur != NULL)
{
if (cur->data == key)
{
printf("\nKey element %d is present in BST", cur->data);
return;
}
if (key < cur->data)
cur = cur->lchild;
else
cur = cur->rchild;
}
printf("\nKey element %d is not found in the BST", key);
}
void inorder(NODE root)
{
if(root != NULL)
{
inorder(root->lchild);
printf("%d ", root->data);
inorder(root->rchild);
}
}
void preorder(NODE root)
{
if (root != NULL)
{
printf("%d ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
void postorder(NODE root)
{
if (root != NULL)
{
postorder(root->lchild);
postorder(root->rchild);
printf("%d ", root->data);
}
}
void main()
{
int ch, key, val, i, n;
NODE root = NULL, newnode;
while(1)
{
printf("\n~~~~BST MENU~~~~");
printf("\n1.Create a BST");
printf("\n2.Search");
printf("\n3.BST Traversals: ");
printf("\n4.Exit");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1: printf("\nEnter the number of elements: ");
scanf("%d", &n);
for(i=1;i<=n;i++)
{
newnode = get_node();
printf("\nEnter The value: ");
scanf("%d", &val);
newnode->data = val;
if (root == NULL)
root = newnode;
else
insert(root, newnode);
}
break;
case 2: if (root == NULL)
printf("\nTree Is Not Created");
else
{
printf("\nThe Preorder display : ");
preorder(root);
printf("\nThe Inorder display : ");
inorder(root);
printf("\nThe Postorder display : ");
postorder(root);
}
break;
case 3: printf("\nEnter Element to be searched: ");
scanf("%d", &key);
search(root, key);
break;
case 4: exit(0);
}
}
Output:
~~~~BST MENU~~~~
1.Create a BST
2.Search
3.BST Traversals:
4.Exit
Enter your choice:
1
Enter the number of elements: 12
Enter The value:
6
Enter The value:
9
Enter The value:
5
Enter The value:
2
Enter The value:
8
Enter The value: 15
Enter The value: 24
Enter The value: 14
Enter The value:
7
Enter The value:
8
Enter The value:
5
Enter The value:
2
12 bfs n dfs
#include<stdio.h>
#include<stdlib.h>
void bfs(int v);
void dfs(int v);
int a[50][50], n, visited[50];
int q[20], front = -1,rear = -1;
int s[20], top = -1, count=0;
void creategraph()
{
int i, j;
printf("\nEnter the number of vertices in graph: ");
scanf("%d", &n);
printf("\nEnter the adjacency matrix:\n");
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
scanf("%d", &a[i][j]);
}
void bfs(int v)
{
int i, cur;
visited[v] = 1;
q[++rear] = v;
printf("\nNodes reachable from starting vertex %d are: ", v);
while(front!=rear)
{
cur = q[++front];
for(i=1;i<=n;i++)
{
if((a[cur][i]==1)&&(visited[i]==0))
{
q[++rear]=i;
visited[i]=1;
printf("%d ", i);
}
}
}
}
void dfs(int v)
{
int i;
visited[v]=1;
s[++top] = v;
for(i=1;i<=n;i++)
{
if(a[v][i] == 1&& visited[i] == 0 )
{
dfs(i);
count++;
}
}
}
int main()
{
int ch, start, i, j;
creategraph();
printf("\n\n~~~Menu~~~~");
printf("\n==>1. BFS: Print all nodes reachable from a given starting node");
printf("\n==>2. DFS: Print all nodes reachable from a given starting node");
printf("\n==>3:Exit");
printf("\nEnter your choice: ");
scanf("%d", &ch);
switch(ch)
{
case 1: for(i=1;i<=n;i++)
visited[i] = 0;
printf("\nEnter the starting vertex: ");
scanf("%d", &start);
bfs(start);
for(i=1;i<=n;i++)
{
if(visited[i] == 0)
printf("\nThe vertex that is not reachable is %d", i);
}
break;
case 2: for(i=1;i<=n;i++)
visited[i] = 0;
printf("\n Enter the starting vertex:\t");
scanf("%d", &start);
dfs(start);
printf("\nNodes reachable from starting vertex %d are:\n", start);
for(i=1; i<=count; i++)
printf("%d\t", s[i]);
break;
case 3: exit(0);
default: printf("\nPlease enter valid choice:");
}
}
Case 1:
Enter the number of vertices in graph: 4
Enter the adjacency matrix:
0 1 0 1
0 0 1 0
0 0 0 1
0 0 0 0
~~~Menu~~~~
==>1. BFS: Print all nodes reachable from a given starting node
==>2. DFS: Print all nodes reachable from a given starting node
==>3:Exit
Enter your choice: 1
Enter the starting vertex: 1
Nodes reachable from starting vertex 1 are: 2 4 3
Case 2:
Enter the number of vertices in graph: 4
Enter the adjacency matrix:
0 1 0 1
0 0 1 0
0 0 0 1
0 0 0 0
~~~Menu~~~~
==>1. BFS: Print all nodes reachable from a given starting node
==>2. DFS: Print all nodes reachable from a given starting node
==>3:Exit
Enter your choice: 1
Enter the starting vertex: 2
Nodes reachable from starting vertex 2 are: 3 4
The vertex that is not reachable is 1
13Hashtable
#include<stdio.h>
#include<stdlib.h>
int key[20], n, m;
int *ht, hashindex;
int elecount = 0;
void createHashTable()
{
int i;
ht = (int*)malloc(m*sizeof(int));
if(ht == NULL)
printf("\nUnable to create the hash table");
else
for(i=0; i<m; i++)
ht[i] = -1;
}
void insertIntoHashTable(int key)
{
hashindex = key % m;
while(ht[hashindex] != -1)
{
hashindex = (hashindex+1)%m;
}
ht[hashindex] = key;
elecount++;
}
void displayHashTable()
{
int i;
if(elecount == 0)
{
printf("\nHash Table is empty");
return;
}
printf("\nHash Table contents are:\n\n ");
for(i=0; i<m; i++)
printf("\nT[%d] --> %d ", i, ht[i]);
}
void main()
{
int i;
printf("\nEnter the number of employee records (N) : ");
scanf("%d", &n);
printf("\nEnter the four digit key values (K) of 'N' Employee Records:\n ");
for(i=0; i<n; i++)
scanf("%d", &key[i]);
printf("\nEnter the two digit memory locations (m) for hash table: ");
scanf("%d", &m);
createHashTable();
printf("\nInserting key values of Employee records into hash table….. ");
for(i=0; i<n; i++)
{
if(elecount == m)
{
printf("\nHash table is full. Cannot insert the %d record key value", i+1);
break;
}
insertIntoHashTable(key[i]);
}
displayHashTable();
}
Output:
Enter the number of employee records (N) : 12
Enter the four digit key values (K) of 'N' Employee Records:
1234
5678
3456
2345
6799
1235
7890
3214
3456
1235
5679
2346
Enter the two digit memory locations (m) for hash table: 15
Inserting key values of Employee records into hash table
Hash Table contents are:
T[0] --> 7890
T[1] --> -1
T[2] --> -1
T[3] --> -1
T[4] --> 1234
T[5] --> 2345
T[6] --> 3456
T[7] --> 6799
T[8] --> 5678
T[9] --> 1235
T[10] --> 3214
T[11] --> 3456
T[12] --> 1235
T[13] --> 5679
T[14] --> 2346
Comments
Post a Comment