Tree
Tree
Code Implementation
Part – 1 : Nested linked lists
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Delete the first book from the list under a specific genre
void deleteBookFromFront(Genre* genre) {
if (genre->books == NULL) {
printf("No books to delete in this genre.\n");
return;
}
Book* temp = genre->books;
genre->books = genre->books->next;
free(temp);
}
do {
printf("\nLibrary Catalog Management System\n");
printf("1. Add Genre\n");
printf("2. Add Book\n");
printf("3. Delete Genre\n");
printf("4. Delete Book\n");
printf("5. Display Catalog\n");
printf("6. Search Book\n");
printf("7. Update Book\n");
printf("8. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
getchar(); // to consume the newline after scanf
switch (choice) {
case 1:
// Add Genre
printf("Enter genre name: ");
fgets(genreName, sizeof(genreName), stdin);
genreName[strlen(genreName) - 1] = '\0'; // remove newline
insertGenreAtFront(genreList, genreName);
break;
case 2:
// Add Book
printf("Enter genre name to add book: ");
fgets(genreName, sizeof(genreName), stdin);
genreName[strlen(genreName) - 1] = '\0';
printf("Enter book title: ");
fgets(title, sizeof(title), stdin);
title[strlen(title) - 1] = '\0';
printf("Enter author: ");
fgets(author, sizeof(author), stdin);
author[strlen(author) - 1] = '\0';
printf("Enter publication year: ");
scanf("%d", &year);
getchar();
case 3:
// Delete Genre
printf("Enter genre name to delete: ");
fgets(genreName, sizeof(genreName), stdin);
genreName[strlen(genreName) - 1] = '\0';
if (*genreList != NULL && strcmp((*genreList)->genreName, genreName) == 0) {
deleteGenreFromFront(genreList);
printf("Genre deleted successfully.\n");
} else {
Genre* prev = NULL;
Genre* current = *genreList;
while (current != NULL && strcmp(current->genreName, genreName) != 0) {
prev = current;
current = current->next;
}
if (current != NULL) {
prev->next = current->next;
while (current->books != NULL) {
deleteBookFromFront(current);
}
free(current);
printf("Genre deleted successfully.\n");
} else {
printf("Genre not found.\n");
}
}
break;
case 4:
// Delete Book
printf("Enter genre name to delete book from: ");
fgets(genreName, sizeof(genreName), stdin);
genreName[strlen(genreName) - 1] = '\0';
genre = searchGenreByName(*genreList, genreName);
if (genre != NULL) {
printf("Enter book title to delete: ");
fgets(title, sizeof(title), stdin);
title[strlen(title) - 1] = '\0';
Book* prevBook = NULL;
Book* currentBook = genre->books;
if (currentBook != NULL && strcmp(currentBook->title, title) == 0) {
deleteBookFromFront(genre);
printf("Book deleted successfully.\n");
} else {
while (currentBook != NULL && strcmp(currentBook->title, title) != 0) {
prevBook = currentBook;
currentBook = currentBook->next;
}
if (currentBook != NULL) {
prevBook->next = currentBook->next;
free(currentBook);
printf("Book deleted successfully.\n");
} else {
printf("Book not found.\n");
}
}
} else {
printf("Genre not found.\n");
}
break;
case 5:
// Display Catalog
displayGenres(*genreList);
break;
case 6:
// Search Book
printf("Enter book title to search: ");
fgets(title, sizeof(title), stdin);
title[strlen(title) - 1] = '\0';
Book* foundBook = searchBookByTitle(*genreList, title);
if (foundBook != NULL) {
printf("Book found: %s by %s, Published in %d\n", foundBook->title, foundBook->author, foundBook-
>publicationYear);
}
break;
case 7:
// Update Book
printf("Enter book title to update: ");
fgets(title, sizeof(title), stdin);
title[strlen(title) - 1] = '\0';
printf("Enter new author name: ");
fgets(author, sizeof(author), stdin);
author[strlen(author) - 1] = '\0';
printf("Enter new publication year: ");
scanf("%d", &year);
getchar();
updateBookDetails(*genreList, title, author, year);
break;
case 8:
// Exit
printf("Exiting the Library Catalog Management System.\n");
break;
default:
printf("Invalid choice. Please try again.\n");
break;
}
} while (choice != 8);
}
int main() {
Genre* genreList = NULL;
menu(&genreList);
return 0;
}
Part – 2: Polynomial using linked lists
#include <stdio.h>
#include <stdlib.h>
#include <math.h> // Include math.h to use pow function
// If the list is empty or the exponent is larger than the head, insert at the front
if (*poly == NULL || (*poly)->exp < exp) {
newTerm->next = *poly;
*poly = newTerm;
} else {
Term* current = *poly;
while (current->next != NULL && current->next->exp >= exp) {
if (current->next->exp == exp) {
current->next->coeff += coeff; // If same exponent, add coefficients
free(newTerm);
return;
}
current = current->next;
}
newTerm->next = current->next;
current->next = newTerm;
}
}
if (poly->exp == 0) {
printf("%d ", poly->coeff);
} else if (poly->exp == 1) {
printf("%dx ", poly->coeff);
} else {
printf("%dx^%d ", poly->coeff, poly->exp);
}
poly = poly->next;
firstTerm = 0;
}
printf("\n");
}
return result;
}
return result;
}
return poly;
}
int main() {
Term* poly1 = NULL;
Term* poly2 = NULL;
Term* result = NULL;
int choice, x;
do {
printf("\nPolynomial Operations Menu\n");
printf("1. Create Polynomial\n");
printf("2. Display Polynomial\n");
printf("3. Add Polynomials\n");
printf("4. Multiply Polynomials\n");
printf("5. Evaluate Polynomial\n");
printf("6. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Create first polynomial:\n");
poly1 = createPolynomial();
printf("Create second polynomial:\n");
poly2 = createPolynomial();
break;
case 2:
printf("First polynomial: ");
displayPolynomial(poly1);
printf("Second polynomial: ");
displayPolynomial(poly2);
break;
case 3:
result = addPolynomials(poly1, poly2);
printf("Sum of polynomials: ");
displayPolynomial(result);
break;
case 4:
result = multiplyPolynomials(poly1, poly2);
printf("Product of polynomials: ");
displayPolynomial(result);
break;
case 5:
printf("Enter the value of x to evaluate: ");
scanf("%d", &x);
printf("Evaluation of first polynomial: %d\n", evaluatePolynomial(poly1, x));
printf("Evaluation of second polynomial: %d\n", evaluatePolynomial(poly2, x));
break;
case 6:
printf("Exiting...\n");
break;
default:
printf("Invalid choice! Please try again.\n");
}
} while (choice != 6);
return 0;}
Part – 3 : Postfix Expression Evaluation using Stack
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
// Stack operations
StackNode* createNode(int data) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// If the character is an operator, pop two elements and apply the operator
else {
int val1 = pop(&stack);
int val2 = pop(&stack);
switch (exp[i]) {
case '+':
push(&stack, val2 + val1);
break;
case '-':
push(&stack, val2 - val1);
break;
case '*':
push(&stack, val2 * val1);
break;
case '/':
push(&stack, val2 / val1);
break;
}
}
}
// The final result will be at the top of the stack
return pop(&stack);
}
while (1) {
printf("\nMenu:\n");
printf("1. Evaluate Postfix Expression\n");
printf("2. Convert Infix to Postfix and Evaluate\n");
printf("3. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
getchar(); // To consume the newline character left by scanf
switch (choice) {
case 1: {
char postfixExp[100];
printf("Enter a postfix expression: ");
fgets(postfixExp, 100, stdin);
postfixExp[strcspn(postfixExp, "\n")] = 0; // Remove trailing newline
printf("Result: %d\n", evaluatePostfixExpression(postfixExp));
break;
}
case 2: {
printf("Enter an infix expression: ");
fgets(infix, 100, stdin);
infix[strcspn(infix, "\n")] = 0; // Remove trailing newline
convertInfixToPostfix(infix, postfix);
printf("Postfix expression: %s\n", postfix);
printf("Result: %d\n", evaluatePostfixExpression(postfix));
break;
}
case 3:
exit(0);
default:
printf("Invalid choice!\n");
}
}
return 0;
}
Part – 4 : Hot Potato Game Simulation using Queues
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Queue structure
typedef struct Queue {
QueueNode* front;
QueueNode* rear;
} Queue;
free(temp);
return name;
}
int main() {
Queue* q = createQueue();
int numPlayers, passCount;
return 0;
}
Sample and Significant Outputs
Part 1
Library Catalog Management System
1. Add Genre
2. Add Book
3. Delete Genre
4. Delete Book
5. Display Catalog
6. Search Book
7. Update Book
8. Exit
Enter your choice: 1
Enter genre name: news