0% found this document useful (0 votes)
8 views

DS LAB PROGRAMS.RK

Data structure lab

Uploaded by

sachinnagesh2004
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

DS LAB PROGRAMS.RK

Data structure lab

Uploaded by

sachinnagesh2004
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 31

PROGRAM 3

3. Develop a menu driven Program in C for the following operations on STACK of Integers (Array
Implementation of Stack with maximum size MAX)
a) Push an Element on to Stack
b) Pop an Element from Stack
c) Demonstrate how Stack can be used to check Palindrome
d) Demonstrate Overflow and Underflow situations on Stack
e) Display the status of Stack
f) Exit

#include<stdio.h>

#include<stdlib.h>

#define MAX 3

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:

item = pop(); if (item != -1)

printf("\nElement popped is: %d", item);

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;

int pop()

{ int item; if

(top == -1)
{

printf("\n-----------Stack underflow-----------");

return -1;

item = s[top];

top = top - 1;

return item;

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

PROGRAM 2
2. Develop a Program in C for the following operations on Strings.
a) Read a main String (STR), a Pattern String (PAT) and a Replace String (REP).
b) Perform Pattern Matching Operation: Find and Replace all occurrences of PAT in STR with REP if
PAT exists in STR. Report suitable messages in case PAT does not exist in STR.

#include<stdio.h>

char str[50], pat[20], rep[20], res[50]; int

c = 0, m = 0, i = 0, j = 0, k, flag = 0;

void stringmatch()

while (str[c] != '\0')

if (str[m] == pat[i])
{ i++;

m++; if (pat[i]

== '\0')

flag = 1; for (k = 0;

rep[k] != '\0'; k++, j++)

res[j] = rep[k];

i = 0;

c = m;

else

res[j] = str[c];

j++; c++;

m = c; i = 0;

} res[j] =

'\0';

void main()

printf("Enter the main string:");

gets(str); printf("\nEnter the pat string:"); gets(pat);

printf("\nEnter the replace string:"); gets(rep);

printf("\nThe string before pattern match is:\n %s", str);

stringmatch(); if (flag == 1)

printf("\nThe string after pattern match and replace is: \n %s ", res);

else

printf("\nPattern string is not found");


}

PROGRAM 4
4. Develop a Program in C for converting an Infix Expression to Postfix Expression. Program should
support for both parenthesized and free parenthesized expressions with the operators: +, -, *, /,
(Remainder), ^ (Power) and alphanumeric operands.

#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("\n Enter the valid infix expression:"); 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;

PROGRAM 5 A
5. Develop a Program in C for the following Stack Applications.
a) Evaluation of Suffix expression with single digit operands and operators: +, -, *, /, %,^.
#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);


}

PROGRAM 5 B
5 b) Solving Tower of Hanoi problem with n disks.

#include <stdio.h>

void tower(int n, int source, int temp, int destination)

if (n == 0)

return;

tower(n - 1, source, destination, temp); printf("\nMove disc

%d from %c to %c", n, source, destination); tower(n - 1, temp,

source, destination);

void main()

{ int

n;

printf("\nEnter the number of discs: \n");

scanf("%d", & n);

tower(n, 'A', 'B', 'C');

printf("\n\nTotal Number of moves are: %d", (int) pow(2, n) - 1);

PROGRAM 6
6. Develop a menu driven Program in C for the following operations on Circular QUEUE of
Characters (Array Implementation of Queue with maximum size MAX).
a) Insert an Element on to Circular QUEUE
b) Delete an Element from Circular QUEUE
c) Demonstrate Overflow and Underflow situations on Circular QUEUE
d) Display the status of Circular QUEUE
e) Exit
Support the program with appropriate functions for each of the above operations.

#include<stdio.h>
#include<stdlib.h>

#define MAX 5

char circular_queue[MAX];

int front = -1, rear = -1;

int isEmpty()

if (front == -1 && rear == -1)

return 1;

else

return 0;

int isFull()

if ((rear + 1) % MAX == front)

return 1; else return 0;

void insertElement(char element)

{ if

(isFull())

printf("Circular Queue Overflow\n"); return;

else if (isEmpty())

front = rear = 0;

else

{
rear = (rear + 1) % MAX;

circular_queue[rear] = element;

void deleteElement()

if (isEmpty())

printf("Circular Queue Underflow\n");

return;

else if (front == rear)

front = rear = -1;

else

front = (front + 1) % MAX;

void display()

{ int i; if

(isEmpty())

printf("Circular Queue is empty\n");

return;

printf("Circular Queue elements: ");

i = front;

do

{
printf("%c ", circular_queue[i]);

i = (i + 1) % MAX;

while (i != (rear + 1) % MAX);

printf("\n");

int main()

int choice;

char element;

do

printf("\n\n---- Circular Queue Menu ----\n");

printf("1. Insert an Element\n"); printf("2.

Delete an Element\n"); printf("3. Display

Circular Queue\n"); printf("4. Exit\n");

printf("Enter your choice: "); scanf("%d",

&choice);

switch(choice)

case 1:

printf("Enter element to be inserted: ");

scanf(" %c", &element);

insertElement(element);

break; case

2:

deleteElement();

break; case 3:

display(); break;

case 4:
printf("Exiting...\n");

break; default:

printf("Invalid choice! Please enter a valid option.\n");

while(choice != 4);

return 0;

PROGRAM 8
8. Develop a menu driven Program in C for the following operations on Doubly Linked List (DLL) of
Employee Data with the fields: SSN, Name, Dept, Designation, Sal, PhNo.
a) Create a DLL of N Employees Data by using end insertion.
b) Display the status of DLL and count the number of nodes in it
c) Perform Insertion and Deletion at End of DLL
d) Perform Insertion and Deletion at Front of DLL
e) Demonstrate how this DLL can be used as Double Ended Queue.
f) Exit

#include<stdio.h>

#include<stdlib.h>

struct node

char ssn[25], name[25], dept[10], designation[25];

int sal; long int

phone; struct

node * llink; struct

node * rlink;

};

typedef struct node * NODE;

NODE first = NULL; int

count = 0;
NODE create()

NODE enode; enode = (NODE)

malloc(sizeof(struct node)); if (enode ==

NULL)

printf("\n Running out of memory ");

exit(0);

printf("\n Enter the ssn,Name,Department,Designation,Salary,PhoneNo of the employee: \n");

scanf("%s %s %s %s %d %ld", enode -> ssn, enode -> name, enode -> dept, enode -> designation, &
enode -> sal, & enode -> phone); enode -> llink = NULL; enode -> rlink = NULL; count++;
return enode;

NODE insertfront()

NODE temp;

temp = create();

if (first == NULL)

return temp;

temp -> rlink = first;

first -> llink = temp;

return temp;

void display()

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

cur = cur -> rlink;

nodeno++;

printf("\nNo of employee nodes is %d", count);

NODE deletefront()

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 insertend()

NODE cur, temp;

temp = create();

if (first == NULL)

return temp;

cur = first;

while (cur -> rlink != NULL)

cur = cur -> rlink;

cur -> rlink = temp;

temp -> llink = cur;

return first;

NODE deleteend()

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 deqdemo()

{ int ch;

while (1)

printf("\nDemo Double Ended Queue Operation ");

printf("\n1:InsertQueueFront\n 2: DeleteQueueFront\n 3:InsertQueueRear\n


4:DeleteQueueRear\n 5:DisplayStatus\n 6: Exit \n");

scanf("%d", & ch);

switch (ch)

{
case 1: first =

insertfront();

break;

case 2: first =

deletefront();

break; case 3:

first = insertend();

break; case 4:

first = deleteend();

break; case 5:

display(); 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 = insertend(); break;

case 2:

display();

break;

case 3: first =

insertend();

break;

case 4: first =

deleteend();

break;

case 5: first =

insertfront();

break;

case 6:

first = deletefront();

break;

case 7:

deqdemo();

break;
case 8:

exit(0);

default:

printf("\nPlease Enter the valid choice ");

PROGRAM 10
10. Design, Develop and Implement a menu driven Program in C for the following operations on
Binary Search Tree (BST) of Integers:
a) Create a BST of N Integers: 6, 9, 5, 2, 8, 15, 24, 14, 7, 8, 5, 2.
b) Traverse the BST in Inorder, Preorder and Post Order.
c) Search the BST for a given element. (KEY) and report the appropriate message.
d) Exit

#include<stdio.h>

#include<stdlib.h>

struct BST

int data; struct

BST * lchild; struct

BST * rchild;

};

typedef struct BST * NODE;

NODE create()

NODE temp; temp = (NODE)

malloc(sizeof(struct BST)); printf("\nEnter

The value: ");

scanf("%d", & temp -> data);


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

void insert(NODE root, NODE newnode)

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;

printf("\nEnter Element to be searched: ");

scanf("%d", & key); cur = root; while

(cur != NULL)

if (cur -> data == key)

printf("\nKey element is present in BST ");

return;

if (key < cur -> data)

cur = cur -> lchild;

else cur = cur ->

rchild;

printf("\nKey element is not found in the BST ");

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 = create();

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:

search(root);

break;

case 4:

exit(0);

}
}

PROGRAM 11
11. Develop a Program in C for the following operations on Graph(G) of Cities.
a) Create a Graph of N cities using Adjacency Matrix.
b) Print all the nodes reachable from a given starting node in a digraph using DFS/BFS method.

PROGRAM:

#include<stdio.h>

#include<stdlib.h>

int a[50][50], n, visited[50]; int

q[20], front = -1, rear = -1; int

s[20], top = -1, count = 0;

void bfs(int v)

{ int i, cur;

visited[v] = 1;

q[++rear] = 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)

printf("%d ", i);

dfs(i);

int main()

int ch, start, 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]);

for (i = 1; i <= n; i++)

visited[i] = 0;

printf("\nEnter the starting vertex: ");

scanf("%d", & start);


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:

printf("\nNodes reachable from starting vertex %d are: ", 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:

printf("\nNodes reachable from starting vertex %d are:\n", start);

dfs(start);

break; case

3: exit(0);

default:

printf("\nPlease enter valid choice:");

PROGRAM 12
12. Given a File of N employee records with a set K of Keys (4-digit) which uniquely determine the
records in file F. Assume that file F is maintained in memory by a Hash Table (HT) of m memory
locations with L as the set of memory addresses (2-digit) of locations in HT. Let the keys in K and
addresses in L are Integers. Develop a Program in C that uses Hash function H:K →L as H(K)=K mod m
(remainder method), and implement hashing technique to map a given key K to the address space L.
Resolve the collision (if any) using linear probing.

#include<stdio.h>
#include<stdlib.h>

int key[20], n, m;

int * ht, index; int

count = 0;

void insert(int key)

index = key % m;

while (ht[index] != -1)

index = (index + 1) % m;

ht[index] = key;

count++;

void display()

{ int

i;

if (count == 0)

printf("\nHash Table is empty");

return;

printf("\nHash Table contents are:\n ");

for (i = 0; i < m; i++) printf("\n

T[%d] --> %d ", i, ht[i]);

}
void main()

{ int

i;

printf("\nEnter the number of employee records (N): ");

scanf("%d", & n);

printf("\nEnter the two digit memory locations (m) for hash table: ");

scanf("%d", & m);

ht = (int * ) malloc(m * sizeof(int));

for (i = 0; i < m; i++) ht[i] = -1;

printf("\nEnter the four digit key values (K) for N Employee Records:\n ");

for (i = 0; i < n; i++)

scanf("%d", & key[i]);

for (i = 0; i < n; i++)

if (count == m)

printf("\n-----Hash table is full. Cannot insert the record %d key-----", i + 1);

break;

insert(key[i]);

display();

You might also like