Dsa PPS3
Dsa PPS3
Insert in beginning 2. Insert at last 3. Insert at any random location 4. Delete from
Beginning 5. Delete from last 6. Delete node after specified location 7. Search for
an element 8. Show 9. Exit
#include <stdlib.h>
struct Node {
int data;
};
newNode->data = value;
if (head == NULL) {
head = newNode;
} else {
temp = temp->next;
temp->next = newNode;
newNode->next = head;
head = newNode;
printf("node inserted\n");
newNode->data = value;
if (head == NULL) {
newNode->next = newNode;
head = newNode;
} else {
temp = temp->next;
temp->next = newNode;
newNode->next = head;
printf("node inserted\n");
void deleteFromBeginning() {
if (head == NULL) {
return;
if (head->next == head) {
free(head);
head = NULL;
} else {
last = last->next;
last->next = head->next;
head = head->next;
free(temp);
printf("node deleted\n");
}
void deleteFromEnd() {
if (head == NULL) {
return;
if (head->next == head) {
free(head);
head = NULL;
} else {
prev = temp;
temp = temp->next;
prev->next = head;
free(temp);
printf("node deleted\n");
if (head == NULL) {
printf("List is empty.\n");
return;
}
struct Node* temp = head;
do {
if (temp->data == value) {
printf("Item found\n");
return;
temp = temp->next;
void show() {
if (head == NULL) {
return;
do {
printf("%d\n", temp->data);
temp = temp->next;
int main() {
do {
printf("\n*********Main Menu*********\n\n");
printf("===============================================\n\n");
printf("1.Insert in begining\n");
printf("2.Insert at last\n");
printf("6.Show\n");
printf("7.Exit\n\n");
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &value);
insertAtBeginning(value);
break;
case 2:
printf("Enter Data?\n\n");
scanf("%d", &value);
insertAtEnd(value);
break;
case 3:
deleteFromBeginning();
break;
case 4:
deleteFromEnd();
break;
case 5:
scanf("%d", &value);
search(value);
break;
case 6:
show();
break;
case 7:
exit(0);
break;
default:
printf("Invalid choice.\n");
return 0;
2. Write a program to implement the below DOUBLY linked list operations. 1. Insert in beginning 2. Insert
at last 3. Insert at any random location 4. Delete from Beginning 5. Delete from last 6. Delete node after
specified location 7. Search for an element 8. Show 9. Exit
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
};
newNode->data = data;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
if (*head != NULL) {
newNode->next = *head;
(*head)->prev = newNode;
*head = newNode;
printf("Node inserted\n");
if (*head == NULL) {
*head = newNode;
printf("node inserted\n");
return;
temp = temp->next;
temp->next = newNode;
newNode->prev = temp;
printf("node inserted\n");
if (position < 1) {
return;
if (position == 1) {
insertAtBeginning(head, data);
return;
temp = temp->next;
if (temp == NULL) {
printf("Position does not exist. Node not inserted.\n");
free(newNode);
return;
newNode->next = temp->next;
if (temp->next != NULL) {
temp->next->prev = newNode;
temp->next = newNode;
newNode->prev = temp;
printf("node inserted\n");
if (*head == NULL) {
return;
*head = (*head)->next;
if (*head != NULL) {
(*head)->prev = NULL;
free(temp);
printf("node deleted\n");
return;
temp = temp->next;
if (temp->prev != NULL) {
temp->prev->next = NULL;
} else {
free(temp);
printf("node deleted\n");
temp = temp->next;
return;
}
struct Node* nodeToDelete = temp->next;
temp->next = nodeToDelete->next;
if (nodeToDelete->next != NULL) {
nodeToDelete->next->prev = temp;
free(nodeToDelete);
printf("node deleted\n");
if (temp->data == key) {
printf("Item found\n");
return;
temp = temp->next;
if (temp == NULL) {
printf("List is empty.\n");
return;
printf("printing values...\n");
while (temp != NULL) {
temp = temp->next;
printf("\n");
void displayMenu() {
printf("\n*********Main Menu*********\n\n");
printf("===============================================\n\n");
printf("1.Insert in begining\n");
printf("2.Insert at last\n");
printf("7.Search\n");
printf("8.Show\n");
printf("9.Exit\n\n");
int main() {
while (1) {
displayMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
scanf("%d", &data);
insertAtBeginning(&head, data);
break;
case 2:
printf("Enter value\n\n");
scanf("%d", &data);
insertAtEnd(&head, data);
break;
case 3:
scanf("%d", &position);
printf("Enter value\n\n");
scanf("%d", &data);
break;
case 4:
deleteFromBeginning(&head);
break;
case 5:
deleteFromEnd(&head);
break;
case 6:
scanf("%d", &data);
deleteAfterNode(&head, data);
break;
case 7:
scanf("%d", &data);
searchElement(head, data);
break;
case 8:
showList(head);
break;
case 9:
exit(0);
default:
return 0;
3. Write a program to implement the tree traversal (In order, Preorder, Postorder) methods.
#include <stdlib.h>
struct Node {
int data;
struct Node* left;
};
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
if (root == NULL) {
} else {
return root;
if (node == NULL)
return;
printf("%d ", node->data);
preorderTraversal(node->left);
preorderTraversal(node->right);
if (node == NULL)
return;
inorderTraversal(node->left);
inorderTraversal(node->right);
if (node == NULL)
return;
postorderTraversal(node->left);
postorderTraversal(node->right);
int main() {
char choice;
do {
int data;
scanf("%d", &data);
// Insert node into the binary tree
preorderTraversal(root);
printf("\n");
inorderTraversal(root);
printf("\n");
postorderTraversal(root);
printf("\n");
return 0;
4. Write a program for Binary Search Tree operations (Insert and Delete).
#include <stdlib.h>
struct Node {
int data;
};
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
if (root == NULL) {
return root;
return current;
if (root == NULL)
return root;
} else {
if (root->left == NULL) {
free(root);
return temp;
free(root);
return temp;
root->data = temp->data;
return root;
if (node == NULL)
return;
inorderTraversal(node->left, count);
(*count)++;
printf("%d", node->data);
if (*count != 8) {
inorderTraversal(node->right, count);
int main() {
int count = 0;
inorderTraversal(root, &count);
// Delete node 10
count = 0;
inorderTraversal(root, &count);
return 0;