Professional Documents
Culture Documents
DS prgms
DS prgms
1)
#include <stdio.h>
#include <stdlib.h>
int data;
} Node;
void printList() {
while(temp != NULL) {
temp = temp->next;
if(temp == NULL){
printf("(NULL)\n");
newNode->next = head;
head = newNode;
printList();
newNode->data = val;
newNode->next = NULL;
if(head == NULL) {
head = newNode;
} else {
while(temp->next != NULL) {
temp = temp->next;
temp->next = newNode;
printList();
newNode->data = val;
if(pos == 0) {
newNode->next = head;
head = newNode;
} else {
temp = temp->next;
newNode->next = temp->next;
temp->next = newNode;
printList();
void deleteFirst() {
head = head->next;
free(temp);
printList();
void deleteLast() {
if(head->next == NULL) {
free(head);
head = NULL;
} else {
while(secondLast->next->next != NULL) {
secondLast = secondLast->next;
free(secondLast->next);
secondLast->next = NULL;
printList();
if(pos == 0) {
head = head->next;
free(temp);
} else {
temp = temp->next;
temp->next = nextNode;
printList();
int main() {
while(1) {
printf("\n1. Insert First\n2. Insert Last\n3. Insert at Position\n4. Delete First\n5. Delete Last\n6.
Delete at Position\n7. Print List\n8. Exit\n");
scanf("%d", &choice);
switch(choice) {
case 1:
scanf("%d", &val);
insertFirst(val);
break;
case 2:
scanf("%d", &val);
insertLast(val);
break;
case 3:
insertAt(pos, val);
break;
case 4:
deleteFirst();
break;
case 5:
deleteLast();
break;
case 6:
scanf("%d", &pos);
deleteAt(pos);
break;
case 7:
printList();
break;
case 8:
return 0;
return 0;
}
DLL
#include <stdio.h>
#include <stdlib.h>
int data;
} Node;
void printList() {
while(temp != NULL) {
temp = temp->next;
printf("(NULL)\n");
newNode->data = val;
newNode->prev = NULL;
newNode->next = head;
if(head != NULL) {
head->prev = newNode;
}
head = newNode;
printList();
newNode->data = val;
newNode->next = NULL;
if(head == NULL) {
newNode->prev = NULL;
head = newNode;
} else {
while(temp->next != NULL) {
temp = temp->next;
temp->next = newNode;
newNode->prev = temp;
printList();
newNode->data = val;
if(pos == 0) {0,
newNode->prev = NULL;
newNode->next = head;
if(head != NULL) {
head->prev = newNode;
head = newNode;
} else {
temp = temp->next;
newNode->prev = temp;
newNode->next = temp->next;
if(temp->next != NULL) {
temp->next->prev = newNode;
temp->next = newNode;
printList();
void deleteFirst() {
head = head->next;
if(head != NULL) {
head->prev = NULL;
free(temp);
printList();
void deleteLast() {
while(temp->next != NULL) {
temp = temp->next;
if(temp->prev != NULL) {
temp->prev->next = NULL;
} else {
head = NULL;
free(temp);
printList();
temp=temp->next;
return;
free(temp);
printList();
}
int main() {
while(1) {
printf("\n1. Insert First\n2. Insert Last\n3. Insert at Position\n4. Delete First\n5. Delete Last\n6.
Delete at Position\n7. Print List\n8. Exit\n");
scanf("%d", &choice);
switch(choice) {
case 1:
scanf("%d", &val);
insertFirst(val);
break;
case 2:
scanf("%d", &val);
insertLast(val);
break;
case 3:
insertAt(pos, val);
break;
case 4:
deleteFirst();
break;
case 5:
deleteLast();
break;
case 6:
scanf("%d", &pos);
deleteAt(pos);
break;
case 7:
printList();
break;
case 8:
return 0;
return 0;
}
CSLL
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
};
void createList() {
int n, data;
scanf("%d", &n);
if (n <= 0) {
return;
scanf("%d", &data);
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
temp = temp->next;
temp->next = newNode;
newNode->next = head;
newNode->data = data;
newNode->next = head;
temp = temp->next;
temp->next = newNode;
head = newNode;
newNode->data = data;
newNode->next = head;
if (head == NULL) {
head = newNode;
newNode->next = head;
} else {
temp = temp->next;
temp->next = newNode;
newNode->data = data;
newNode->next = NULL;
if (position == 1) {
insertAtFirst(data);
return;
temp = temp->next;
if (temp == head) {
return;
newNode->next = temp->next;
temp->next = newNode;
void deleteAtFirst() {
if (head == NULL) {
printf("List is empty.\n");
return;
temp = temp->next;
if (temp == head) {
free(head);
head = NULL;
} else {
temp->next = head->next;
free(head);
head = temp->next;
}
void deleteAtLast() {
if (head == NULL) {
printf("List is empty.\n");
return;
prev = temp;
temp = temp->next;
if (prev == NULL) {
free(head);
head = NULL;
} else {
prev->next = head;
free(temp);
if (head == NULL) {
printf("List is empty.\n");
return;
}
if (position == 1) {
deleteAtFirst();
return;
prev = temp;
temp = temp->next;
if (temp == head) {
return;
prev->next = temp->next;
free(temp);
void displayList() {
if (head == NULL) {
printf("List is empty.\n");
return;
do {
printf("%d -> ", temp->data);
temp = temp->next;
printf(" (NULL)\n");
int main() {
while (1) {
scanf("%d", &choice);
switch (choice) {
case 1:
createList();
break;
case 2:
scanf("%d", &data);
insertAtFirst(data);
break;
case 3:
insertAtLast(data);
break;
case 4:
scanf("%d", &data);
scanf("%d", &position);
insertAtPosition(data, position);
break;
case 5:
deleteAtFirst();
break;
case 6:
deleteAtLast();
break;
case 7:
scanf("%d", &position);
deleteAtPosition(position);
break;
case 8:
displayList();
break;
case 9:
exit(0);
default:
}
}
return 0;
}
CDLL
#include <stdio.h>
#include <stdlib.h>
Struct Node {
Int data;
};
Void createList() {
Int n, data;
Scanf(“%d”, &n);
If (n <= 0) {
Return;
scanf(“%d”, &data);
newNode->data = data;
newNode->next = NULL;
newNode->prev = NULL;
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
} else {
Temp = temp->next;
Temp->next = newNode;
newNode->prev = temp;
newNode->next = head;
head->prev = newNode;
newNode->data = data;
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
} else {
newNode->next = head;
newNode->prev = head->prev;
head->prev->next = newNode;
head->prev = newNode;
head = newNode;
newNode->data = data;
if (head == NULL) {
head = newNode;
newNode->next = head;
newNode->prev = head;
} else {
Temp->next = newNode;
newNode->prev = temp;
newNode->next = head;
head->prev = newNode;
newNode->data = data;
if (position == 1) {
insertAtFirst(data);
return;
Temp = temp->next;
If (temp == head) {
Free(newNode);
Return;
newNode->next = temp->next;
newNode->prev = temp;
temp->next->prev = newNode;
temp->next = newNode;
Void deleteAtFirst() {
If (head == NULL) {
Printf(“List is empty.\n”);
Return;
Free(temp);
Head = NULL;
} else {
Head = temp->next;
Head->prev = temp->prev;
Temp->prev->next = head;
Free(temp);
Void deleteAtLast() {
If (head == NULL) {
Printf(“List is empty.\n”);
Return;
Free(temp);
Head = NULL;
} else {
Head->prev = temp->prev;
Temp->prev->next = head;
Free(temp);
}
Void deleteAtPosition(int position) {
If (head == NULL) {
Printf(“List is empty.\n”);
Return;
If (position == 1) {
deleteAtFirst();
return;
Temp = temp->next;
If (temp == head) {
Return;
Temp->prev->next = temp->next;
Temp->next->prev = temp->prev;
Free(temp);
Void displayList() {
If (head == NULL) {
Printf(“List is empty.\n”);
Return;
}
Do {
Temp = temp->next;
Printf(“ (NULL)\n”);
Int main() {
While (1) {
Printf(“\n***list menu***”);
Scanf(“%d”, &choice);
Switch (choice) {
Case 1:
createList();
break;
case 2:
scanf(“%d”, &data);
insertAtFirst(data);
break;
case 3:
scanf(“%d”, &data);
insertAtLast(data);
break;
case 4:
scanf(“%d”, &data);
scanf(“%d", &position);
insertAtPosition(data, position);
break;
case 5:
deleteAtFirst();
break;
case 6:
deleteAtLast();
break;
case 7:
scanf("%d", &position);
deleteAtPosition(position);
break;
case 8:
displayList();
break;
case 9:
exit(0);
default:
return 0;
}
STACK
#include <stdio.h>
void print_stack() {
printf("%d ", array[i]); // Use %d to print the element itself, not its address
printf("\n");
if (size == 5) {
printf("Stack is full\n");
return;
array[size] = val;
size++;
print_stack();
void pop() {
if (size == 0) {
printf("Stack is empty\n");
return;
} else {
size--;
print_stack();
int main() {
while (1) {
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &val);
push(val);
break;
case 2:
pop();
break;
case 3:
print_stack();
break;
default:
printf("Invalid choice\n");
return 0;
}
QUEUES
#include <stdio.h>
void printQueue() {
if (size == 0) {
printf("Queue is empty\n");
return;
printf("\n");
if (size == 5) {
printf("Queue is full\n");
return;
array[size] = val;
size++;
printQueue();
}
void deQueue() {
if (size == 0) {
printf("Queue is empty\n");
return;
size--;
printQueue();
int main() {
while (1) {
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &val);
enqueue(val);
break;
case 2:
deQueue();
break;
case 3:
printQueue();
break;
case 4:
default:
printf("Invalid choice\n");
}
STACKS LL
#include <stdio.h>
#include <stdlib.h>
int data;
} Node;
void print_stack() {
while(temp != NULL) {
temp = temp->next;
if(temp == NULL){
printf("(NULL)");
newNode->data = val;
newNode->next = NULL;
if(head == NULL) {
head = newNode;
} else {
while(temp->next != NULL) {
temp = temp->next;
temp->next = newNode;
print_stack();
void pop() {
if(head->next == NULL) {
free(head);
head = NULL;
} else {
while(secondLast->next->next != NULL) {
secondLast = secondLast->next;
free(secondLast->next);
secondLast->next = NULL;
print_stack();
int main() {
int val, choice;
while (1) {
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &val);
push(val);
break;
case 2:
pop();
break;
case 3:
print_stack();
break;
default:
printf("Invalid choice\n");
2 return 0;
}
QUEUES LL
#include <stdio.h>
#include <stdlib.h>
Int data;
} Node;
Void printQueue() {
While(temp != NULL) {
Temp = temp->next;
If(temp == NULL){
Printf(“(NULL)”);
newNode->data = val;
newNode->next = NULL;
if(head == NULL) {
head = newNode;
} else {
While(temp->next != NULL) {
Temp = temp->next;
Temp->next = newNode;
printQueue();
Void deQueue() {
Head = head->next;
Free(temp);
printQueue();
Int main() {
While (1) {
Scanf(“%d”, &choice);
Switch (choice) {
Case 1:
Scanf(“%d”, &val);
Enqueue(val);
Break;
Case 2:
deQueue();
break;
case 3:
printQueue();
break;
case 4:
default:
printf(“Invalid choice\n”);
}
SORTINGS
#include <stdio.h>
#include <stdlib.h>
*a = *b;
*b = temp;
i++;
swap(&arr[i], &arr[j]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
quickSort(arr, pi + 1, high);
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
largest = left;
largest = right;
if (largest != i) {
swap(&arr[i], &arr[largest]);
heapify(arr, n, largest);
swap(&arr[0], &arr[i]);
heapify(arr, i, 0);
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
i = 0;
j = 0;
k = l;
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
k++;
arr[k] = L[i];
i++;
k++;
arr[k] = R[j];
j++;
k++;
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
// Function to print an array
printf("\n");
int main() {
int x, choice;
scanf("%d", &x);
scanf("%d", &arr[i]);
printArray(arr, x);
scanf("%d", &choice);
switch (choice) {
case 1:
quickSort(arr, 0, x - 1);
break;
case 2:
mergeSort(arr, 0, x - 1);
break;
case 3:
heapSort(arr, x);
break;
default:
printf("Invalid choice\n");
printArray(arr, x);
free(arr);
return 0;
}
GRAPH TRAVERSAL
#include <stdio.h>
#include <stdlib.h>
#define SIZE 40
struct node {
int vertex;
};
struct Graph {
int numVertices;
int *visited;
};
struct queue {
int items[SIZE];
int front;
int rear;
};
// Function prototypes
newNode->vertex = v;
newNode->next = NULL;
return newNode;
graph->numVertices = vertices;
graph->adjLists[i] = NULL;
graph->visited[i] = 0;
return graph;
newNode->next = graph->adjLists[src];
graph->adjLists[src] = newNode;
newNode = createNode(src);
newNode->next = graph->adjLists[dest];
graph->adjLists[dest] = newNode;
while (temp) {
temp = temp->next;
printf("\n");
}
// Function for DFS
graph->visited[vertex] = 1;
if (graph->visited[connectedVertex] == 0) {
DFS(graph, connectedVertex);
temp = temp->next;
q->front = -1;
q->rear = -1;
return q;
if (q->rear == SIZE - 1)
printf("\nQueue is Full!!");
else {
if (q->front == -1)
q->front = 0;
q->rear++;
q->items[q->rear] = value;
int item;
if (isEmpty(q)) {
printf("Queue is empty");
item = -1;
} else {
item = q->items[q->front];
q->front++;
return item;
}
// Function to print the queue
int i = q->front;
if (!isEmpty(q)) {
graph->visited[startVertex] = 1;
enqueue(q, startVertex);
while (!isEmpty(q)) {
while (temp) {
graph->visited[adjVertex] = 1;
enqueue(q, adjVertex);
temp = temp->next;
int main() {
scanf("%d", &startVertex);
printf("1. DFS\n");
printf("2. BFS\n");
scanf("%d", &choice);
switch (choice) {
case 1:
graph = createGraph(6);
addEdge(graph, 0, 1);
addEdge(graph, 0, 2);
addEdge(graph, 1, 2);
addEdge(graph, 2, 3);
addEdge(graph, 2, 4);
addEdge(graph, 3, 1);
addEdge(graph, 3, 5);
addEdge(graph, 5, 4);
printf("\nGraph:\n");
printGraph(graph);
printf("\nDFS Traversal:\n");
DFS(graph, startVertex);
break;
case 2:
graph = createGraph(4);
addEdge(graph, 0, 1);
addEdge(graph, 0, 2);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 3);
addEdge(graph, 2, 3);
addEdge(graph, 3, 3);
printf("\nGraph:\n");
printGraph(graph);
printf("\nBFS Traversal:\n");
BFS(graph, startVertex);
break;
default:
printf("\nInvalid choice\n");
return 0;
}
PATTERN MATCHING
#include <limits.h>
#include <string.h>
#include <stdio.h>
int main()
int choice;
char txt[100];
char pat[100];
printf("1. Knuth-Morris-Pratt\n");
printf("2. Boyer-Moore\n");
scanf("%d", &choice);
scanf("%s", pat);
switch (choice)
case 1:
kmpSearch(txt, pat);
break;
case 2:
search(txt, pat);
break;
default:
break;
return 0;
int i;
badchar[i] = -1;
badchar[(int)str[i]] = i;
}
void search(char *txt, char *pat)
int m = strlen(pat);
int n = strlen(txt);
int badchar[NO_OF_CHARS];
badCharHeuristic(pat, m, badchar);
int s = 0;
int j = m - 1;
j--;
if (j < 0)
else
int m = strlen(pat);
int n = strlen(txt);
int lps[m];
computeLPSArray(pat, m, lps);
int i = 0;
int j = 0;
while (i < n)
if (pat[j] == txt[i])
j++;
i++;
if (j == m)
j = lps[j - 1];
if (j != 0)
j = lps[j - 1];
else
i = i + 1;
int len = 0;
int i = 1;
lps[0] = 0;
while (i < m)
if (pat[i] == pat[len])
len++;
lps[i] = len;
i++;
else
if (len != 0)
else
lps[i] = 0;
i++;