[go: up one dir, main page]

0% found this document useful (0 votes)
11 views5 pages

Source Code

This document contains a C program that implements a linked list using an array of nodes. It provides functionalities to insert and delete nodes at various positions, as well as to display the list. The program includes a menu-driven interface for user interaction.

Uploaded by

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

Source Code

This document contains a C program that implements a linked list using an array of nodes. It provides functionalities to insert and delete nodes at various positions, as well as to display the list. The program includes a menu-driven interface for user interaction.

Uploaded by

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

Source code:

#include <stdio.h>
#define MAX 10
#define NULL_INDEX -1

struct Node {
int data;
int next;
};

struct Node node[MAX];


int head = NULL_INDEX;
int free_list = 0;

void initialize() {
for (int i = 0; i < MAX - 1; i++)
node[i].next = i + 1;
node[MAX - 1].next = NULL_INDEX;
}

int get_free_node() {
if (free_list == NULL_INDEX)
return NULL_INDEX;
int index = free_list;
free_list = node[free_list].next;
return index;
}

void free_node(int index) {


node[index].next = free_list;
free_list = index;
}

// Insert at beginning
void insert_beginning(int item) {
int new_node = get_free_node();
if (new_node == NULL_INDEX) {
printf("Overflow\n");
return;
}
node[new_node].data = item;
node[new_node].next = head;
head = new_node;
}
// Insert at end
void insert_end(int item) {
if (head == NULL_INDEX) {
insert_beginning(item);
return;
}
int new_node = get_free_node();
if (new_node == NULL_INDEX) {
printf("Overflow\n");
return;
}
node[new_node].data = item;
node[new_node].next = NULL_INDEX;
int temp = head;
while (node[temp].next != NULL_INDEX)
temp = node[temp].next;
node[temp].next = new_node;
}

// Insert after a specific element


void insert_after(int key, int item) {
int temp = head;
while (temp != NULL_INDEX && node[temp].data != key)
temp = node[temp].next;
if (temp == NULL_INDEX) {
printf("Element not found\n");
return;
}
int new_node = get_free_node();
if (new_node == NULL_INDEX) {
printf("Overflow\n");
return;
}
node[new_node].data = item;
node[new_node].next = node[temp].next;
node[temp].next = new_node;
}

// Delete from beginning


void delete_beginning() {
if (head == NULL_INDEX) {
printf("Underflow\n");
return;
}
int temp = head;
head = node[head].next;
free_node(temp);
}

// Delete from end


void delete_end() {
if (head == NULL_INDEX) {
printf("Underflow\n");
return;
}
if (node[head].next == NULL_INDEX) {
free_node(head);
head = NULL_INDEX;
return;
}
int temp = head;
while (node[node[temp].next].next != NULL_INDEX)
temp = node[temp].next;
int del = node[temp].next;
node[temp].next = NULL_INDEX;
free_node(del);
}

// Delete after a specific element


void delete_after(int key) {
int temp = head;
while (temp != NULL_INDEX && node[temp].data != key)
temp = node[temp].next;
if (temp == NULL_INDEX || node[temp].next == NULL_INDEX) {
printf("No node after given element\n");
return;
}
int del = node[temp].next;
node[temp].next = node[del].next;
free_node(del);
}

// Display list
void display() {
int temp = head;
printf("List: ");
while (temp != NULL_INDEX) {
printf("%d -> ", node[temp].data);
temp = node[temp].next;
}
printf("NULL\n");
}
int main() {
int choice, item, key;
initialize();

while (1) {
printf("\nMenu:\n");
printf("1. Insert at Beginning\n");
printf("2. Insert at End\n");
printf("3. Insert After Element\n");
printf("4. Delete from Beginning\n");
printf("5. Delete from End\n");
printf("6. Delete After Element\n");
printf("7. Display\n");
printf("8. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);

switch (choice) {
case 1:
printf("Enter item: ");
scanf("%d", &item);
insert_beginning(item);
break;
case 2:
printf("Enter item: ");
scanf("%d", &item);
insert_end(item);
break;
case 3:
printf("Enter element after which to insert: ");
scanf("%d", &key);
printf("Enter item: ");
scanf("%d", &item);
insert_after(key, item);
break;
case 4:
delete_beginning();
break;
case 5:
delete_end();
break;
case 6:
printf("Enter element after which to delete: ");
scanf("%d", &key);
delete_after(key);
break;
case 7:
display();
break;
case 8:
return 0;
default:
printf("Invalid choice\n");
}
}
}

You might also like