Program 12


Program 12



#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();

}

Program 11


Program 11



#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:");

}

}

Program 10


Program 10



#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);

}

}

}

Program 9


Program 9
#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);

}

}

}

Program 8


Program 8



#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");

}

}

}

Program 7


Program 7



#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");

}

}

}