0% found this document useful (0 votes)
4 views27 pages

Linked List Types

The document contains C source code for managing singly and doubly linked lists, including functions for creating, inserting, deleting, modifying, and viewing nodes. It provides a menu-driven interface for users to perform various operations on the linked lists. Key functionalities include adding nodes at the beginning, end, or middle, as well as counting the nodes and releasing memory.
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)
4 views27 pages

Linked List Types

The document contains C source code for managing singly and doubly linked lists, including functions for creating, inserting, deleting, modifying, and viewing nodes. It provides a menu-driven interface for users to perform various operations on the linked lists. Key functionalities include adding nodes at the beginning, end, or middle, as well as counting the nodes and releasing memory.
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/ 27

SOURCE CODE:(SINGLE LINK)

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

typedef struct list {


int roll;
char name[20];
struct list *link;
} node;

node* getnode();
void createlist(node **headptr);
void insertfirst(node **headptr);
void insertlast(node **headptr);
void insertmiddle(node **headptr);
void deletefirst(node **headptr);
void deletelast(node **headptr);
void deletemiddle(node **headptr);
void modifynode(node *head);
void viewlist(node *head);
int countlist(node *head);
void releasenode(node *newnode);
void displaymenu();

int main() {
node *head = NULL;
int ch, count;
displaymenu();

while (1) {
printf("\n\n Enter the Choice? ");
fflush(stdin);
scanf("%d", &ch);

switch (ch) {
case 0:
createlist(&head);
break;
case 1:
insertfirst(&head);
break;
case 2:
insertlast(&head);
break;
case 3:
insertmiddle(&head);
break;
case 4:
deletefirst(&head);
break;
case 5:
deletelast(&head);
break;
case 6:
deletemiddle(&head);
break;
case 7:
modifynode(head);
break;
case 8:
viewlist(head);
break;
case 9:
count = countlist(head);
printf("Number of nodes in the list is: %d", count);
break;
case 10:
displaymenu();
break;
case 11:
printf("Exiting program...\n");
exit(0);
break;
default:
printf("Invalid option. Exiting program...\n");
exit(0);
}
}
}

void displaymenu() {
printf("\nBasic operations in a singly linked list...");
printf("\n\t 0. Create List");
printf("\n\t 1. Insert first");
printf("\n\t 2. Insert last");
printf("\n\t 3. Insert middle");
printf("\n\t 4. Delete first");
printf("\n\t 5. Delete last");
printf("\n\t 6. Delete middle");
printf("\n\t 7. Modify node");
printf("\n\t 8. View list");
printf("\n\t 9. Count list");
printf("\n\t 10. Show menu");
printf("\n\t 11. Exit");
}

node* getnode() {
node* newnode = (node*)malloc(sizeof(node));
return newnode;
}

void readnode(node* newnode) {


printf("\nEnter the roll number: ");
scanf("%d", &newnode->roll);
printf("Enter the name: ");
scanf("%s", newnode->name);
newnode->link = NULL;
}

void releasenode(node* newnode) {


free(newnode);
}

void createlist(node** headptr) {


node* head = NULL, * newnode, * last;
char ch;
do {
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
last = head;
} else {
last->link = newnode;
last = last->link;
}
fflush(stdin);
printf("Do you wish to add data in the list (Y/N)? ");
scanf("%c", &ch);
} while ((ch == 'y') || (ch == 'Y'));
*headptr = head;
}

void insertfirst(node** headptr) {


node* head, * newnode;
head = *headptr;
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
} else {
newnode->link = head;
head = newnode;
}
*headptr = head;
}

void insertlast(node** headptr) {


node* head, * last, * newnode;
head = *headptr;
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
} else {
last = head;
while (last->link != NULL)
last = last->link;
last->link = newnode;
}
*headptr = head;
}

void insertmiddle(node** headptr) {


node* head, * last, * newnode;
int insdata;
head = *headptr;
if (head == NULL) {
printf("Singly linked list is empty, so the new node becomes the head
node.");
newnode = getnode();
readnode(newnode);
head = newnode;
} else {
printf("\nEnter the node roll number after which the insertion is to be
made: ");
scanf("%d", &insdata);
last = head;
while (last != NULL) {
if (last->roll == insdata) {
newnode = getnode();
readnode(newnode);
newnode->link = last->link;
last->link = newnode;
return;
} else {
last = last->link;
}
}
printf("Insert node is not found.");
}
*headptr = head;
}

void deletefirst(node** headptr) {


node* head, * delnode;
head = *headptr;
if (head == NULL) {
printf("\nSingly linked list is empty....");
return;
}
delnode = head;
head = head->link;
printf("\nDeleted data is .....\n");
printf("\nRoll number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
}
void deletelast(node** headptr) {
node* head, * delnode, * last, * prev;
head = *headptr;
if (head == NULL) {
printf("\nSingly linked list is empty...");
return;
} else if (head->link == NULL) {
delnode = head;
head = NULL;
} else {
last = head;
while (last->link != NULL) {
prev = last;
last = last->link;
}
delnode = last;
prev->link = NULL;
}
printf("\nDeleted data is...\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
}
void deletemiddle(node** headptr) {
node* head, * delnode, * last, * prev;
int deldata;
head = *headptr;
if (head == NULL) {
printf("\nSingly linked list is empty...");
return;
}
printf("\nEnter the node roll number to be deleted: ");
scanf("%d", &deldata);
if (head->roll == deldata) {
delnode = head;
head = head->link;
printf("\nDeleted data is ...\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
return;
}
last = head->link;
prev = head;
while (last != NULL) {
if (last->roll == deldata) {
delnode = last;
prev->link = last->link;
printf("\nDeleted data is ....\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
return;
} else {
last = last->link;
prev = prev->link;
}
}
printf("Delete node is not found");
*headptr = head;
}

void modifynode(node* head) {


int moddata;
if (head == NULL) {
printf("\nSingly linked list is empty...");
return;
}
printf("\nEnter the node roll number for modification: ");
scanf("%d", &moddata);
while (head != NULL) {
if (head->roll == moddata) {
printf("\nModify the data of the node....\n");
printf("\nEnter the new roll number: ");
scanf("%d", &head->roll);
printf("\nEnter the new name: ");
scanf("%s", head->name);
return;
} else {
head = head->link;
}
}
printf("Modify node is not found");
}

void viewlist(node* head) {


if (head == NULL) {
printf("\nSingly linked list is empty....");
return;
}
while (head != NULL) {
printf("\nRoll number = %d", head->roll);
printf("\nName = %s", head->name);
head = head->link;
}
}

int countlist(node* head) {


int count = 0;
if (head == NULL) {
printf("\nSingly linked list is empty...");
return count;
}
while (head != NULL) {
count++;
head = head->link;
}
return count;
}\
SOURCE CODE:(DOUBLE LINK)
#include <stdio.h>
#include <stdlib.h>

typedef struct list {


int roll;
char name[20];
struct list *prev;
struct list *next;
} node;

node* getnode();
void createlist(node **headptr);
void insertfirst(node **headptr);
void insertlast(node **headptr);
void insertmiddle(node **headptr);
void deletefirst(node **headptr);
void deletelast(node **headptr);
void deletemiddle(node **headptr);
void modifynode(node *head);
void viewlist(node *head);
int countlist(node *head);
void releasenode(node *newnode);
void displaymenu();

int main() {
node *head = NULL;
int ch, count;
displaymenu();

while (1) {
printf("\n\nEnter the Choice? ");
fflush(stdin);
scanf("%d", &ch);

switch (ch) {
case 0:
createlist(&head);
break;
case 1:
insertfirst(&head);
break;
case 2:
insertlast(&head);
break;
case 3:
insertmiddle(&head);
break;
case 4:
deletefirst(&head);
break;
case 5:
deletelast(&head);
break;
case 6:
deletemiddle(&head);
break;
case 7:
modifynode(head);
break;
case 8:
viewlist(head);
break;
case 9:
count = countlist(head);
printf("Number of nodes in the list is: %d", count);
break;
case 10:
displaymenu();
break;
case 11:
printf("Exiting program...\n");
exit(0);
break;
default:
printf("Invalid option. Exiting program...\n");
exit(0);
}
}
}

void displaymenu() {
printf("\nBasic operations in a doubly linked list...");
printf("\n\t 0. Create List");
printf("\n\t 1. Insert first");
printf("\n\t 2. Insert last");
printf("\n\t 3. Insert middle");
printf("\n\t 4. Delete first");
printf("\n\t 5. Delete last");
printf("\n\t 6. Delete middle");
printf("\n\t 7. Modify node");
printf("\n\t 8. View list");
printf("\n\t 9. Count list");
printf("\n\t 10. Show menu");
printf("\n\t 11. Exit");
}

node* getnode() {
node* newnode = (node*)malloc(sizeof(node));
return newnode;
}

void readnode(node* newnode) {


printf("\nEnter the roll number: ");
scanf("%d", &newnode->roll);
printf("Enter the name: ");
scanf("%s", newnode->name);
newnode->prev = NULL;
newnode->next = NULL;
}

void releasenode(node* newnode) {


free(newnode);
}

void createlist(node** headptr) {


node* head = NULL, *newnode, *last;
char ch;
do {
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
last = head;
} else {
last->next = newnode;
newnode->prev = last;
last = last->next;
}
fflush(stdin);
printf("Do you wish to add data in the list (Y/N)? ");
scanf("%c", &ch);
} while ((ch == 'y') || (ch == 'Y'));
*headptr = head;
}

void insertfirst(node** headptr) {


node* head, *newnode;
head = *headptr;
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
} else {
newnode->next = head;
head->prev = newnode;
head = newnode;
}
*headptr = head;
}

void insertlast(node** headptr) {


node* head, *last, *newnode;
head = *headptr;
newnode = getnode();
readnode(newnode);
if (head == NULL) {
head = newnode;
} else {
last = head;
while (last->next != NULL) {
last = last->next;
}
last->next = newnode;
newnode->prev = last;
}
*headptr = head;
}

void insertmiddle(node** headptr) {


node* head, *last, *newnode;
int insdata;
head = *headptr;
if (head == NULL) {
printf("Doubly linked list is empty, so the new node becomes the head
node.");
newnode = getnode();
readnode(newnode);
head = newnode;
} else {
printf("\nEnter the node roll number after which the insertion is to be
made: ");
scanf("%d", &insdata);
last = head;
while (last != NULL) {
if (last->roll == insdata) {
newnode = getnode();
readnode(newnode);
newnode->next = last->next;
if (last->next != NULL) {
last->next->prev = newnode;
}
last->next = newnode;
newnode->prev = last;
return;
} else {
last = last->next;
}
}
printf("Insert node is not found.");
}
*headptr = head;
}

void deletefirst(node** headptr) {


node* head, *delnode;
head = *headptr;
if (head == NULL) {
printf("\nDoubly linked list is empty....");
return;
}
delnode = head;
head = head->next;
if (head != NULL) {
head->prev = NULL;
}
printf("\nDeleted data is .....\n");
printf("\nRoll number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
}

void deletelast(node** headptr) {


node* head, *delnode, *last;
head = *headptr;
if (head == NULL) {
printf("\nDoubly linked list is empty...");
return;
} else if (head->next == NULL) {
delnode = head;
head = NULL;
} else {
last = head;
while (last->next != NULL) {
last = last->next;
}
delnode = last;
last->prev->next = NULL;
}
printf("\nDeleted data is...\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
}

void deletemiddle(node** headptr) {


node* head, *delnode, *last;
int deldata;
head = *headptr;
if (head == NULL) {
printf("\nDoubly linked list is empty...");
return;
}
printf("\nEnter the node roll number to be deleted: ");
scanf("%d", &deldata);
if (head->roll == deldata) {
delnode = head;
head = head->next;
if (head != NULL) {
head->prev = NULL;
}
printf("\nDeleted data is ...\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
*headptr = head;
return;
}
last = head->next;
while (last != NULL) {
if (last->roll == deldata) {
delnode = last;
last->prev->next = last->next;
if (last->next != NULL) {
last->next->prev = last->prev;
}
printf("\nDeleted data is ....\n");
printf("\nRoll Number = %d", delnode->roll);
printf("\nName = %s", delnode->name);
releasenode(delnode);
return;
} else {
last = last->next;
}
}
printf("Delete node is not found");
*headptr = head;
}

void modifynode(node* head) {


int moddata;
if (head == NULL) {
printf("\nDoubly linked list is empty...");
return;
}
printf("\nEnter the node roll number for modification: ");
scanf("%d", &moddata);
while (head != NULL) {
if (head->roll == moddata) {
printf("\nModify the data of the node....\n");
printf("\nEnter the new roll number: ");
scanf("%d", &head->roll);
printf("\nEnter the new name: ");
scanf("%s", head->name);
return;
} else {
head = head->next;
}
}
printf("Modify node is not found");
}
void viewlist(node* head) {
if (head == NULL) {
printf("\nDoubly linked list is empty....");
return;
}
while (head != NULL) {
printf("\nRoll number = %d", head->roll);
printf("\nName = %s", head->name);
head = head->next;
}
}

int countlist(node* head) {


int count = 0;
if (head == NULL) {
printf("\nDoubly linked list is empty...");
return count;
}
while (head != NULL) {
count++;
head = head->next;
}
return count;
}

You might also like