Linked List operation using C programing
Linked List in C Programming
A linked list is a linear data structure where each element is a separate object, known as a node. Each node contains two items: the data and a reference (or link) to the next node in the sequence. This structure allows for efficient insertion or removal of elements from any position in the sequence.
Components of a Linked List
- Node: A node is the basic building block of a linked list. It contains two items: the data and a reference to the next node.
- Head: The head is the first node in the linked list.
- Tail: The tail is the last node in the linked list.
Types of Linked Lists
- Singly Linked List: In a singly linked list, each node only points to the next node.
- Doubly Linked List: In a doubly linked list, each node points to both the previous and next nodes.
- Circularly Linked List: In a circularly linked list, the last node points back to the first node.
Linked List Operations
- Insertion: Inserting a new node at a specific position in the linked list.
- Deletion: Deleting a node from the linked list.
- Traversal: Traversing the linked list to access each node.
Time Complexity
- Insertion: O(1) (amortized)
- Deletion: O(n) (worst-case)
- Traversal: O(n)
Space Complexity
- O(n) (where n is the number of nodes in the linked list)
Note: The time and space complexities assume a singly linked list. The complexities may vary for doubly linked lists or circularly linked lists.
Code With Rudy
#include<stdio.h> #include<stdlib.h> struct node{ int data; struct node *next; }*start=NULL,*q,*t; int main(){ int ch; void insert_beg(); void insert_end(); int insert_pos(); void display(); void delete_beg(); void delete_end(); int delete_pos(); while(1){ printf("\n\n---- Singly Linked List(SLL) Menu ----"); printf("\n1.Insert\n2.Display\n3.Delete\n4.Exit\n\n"); printf("Enter your choice(1-4):"); scanf("%d",&ch); switch(ch){ case 1: printf("\n---- Insert Menu ----"); printf("\n1.Insert at beginning\n2.Insert at end\n3.Insert at specified position\n4.Exit"); printf("\n\nEnter your choice(1-4):"); scanf("%d",&ch); switch(ch){ case 1: insert_beg(); break; case 2: insert_end(); break; case 3: insert_pos(); break; case 4: exit(0); default: printf("Wrong Choice!!"); } break; case 2: display(); break; case 3: printf("\n---- Delete Menu ----"); printf("\n1.Delete from beginning\n2.Delete from end\n3.Delete from specified position\n4.Exit"); printf("\n\nEnter your choice(1-4):"); scanf("%d",&ch); switch(ch){ case 1: delete_beg(); break; case 2: delete_end(); break; case 3: delete_pos(); break; case 4: exit(0); default: printf("Wrong Choice!!"); } break; case 4: exit(0); default: printf("Wrong Choice!!"); } } return 0; } void insert_beg(){ int num; t=(struct node*)malloc(sizeof(struct node)); printf("Enter data:"); scanf("%d",&num); t->data=num; if(start==NULL){ t->next=NULL; start=t; } else{ t->next=start; start=t; } } void insert_end(){ int num; t=(struct node*)malloc(sizeof(struct node)); printf("Enter data:"); scanf("%d",&num); t->data=num; t->next=NULL; if(start==NULL){ start=t; } else{ q=start; while(q->next!=NULL) q=q->next; q->next=t; } } int insert_pos(){ int pos,i,num; if(start==NULL){ printf("List is empty!!"); return 0; } t=(struct node*)malloc(sizeof(struct node)); printf("Enter data:"); scanf("%d",&num); printf("Enter position to insert:"); scanf("%d",&pos); t->data=num; q=start; for(i=1;i<pos-1;i++){ if(q->next==NULL) { printf("There are less elements!!"); return 0; } q=q->next; } t->next=q->next; q->next=t; return 0; } void display(){ if(start==NULL){ printf("List is empty!!"); } else{ q=start; printf("The linked list is:\n"); while(q!=NULL){ printf("%d->",q->data); q=q->next; } } } void delete_beg(){ if(start==NULL){ printf("The list is empty!!"); } else{ q=start; start=start->next; printf("Deleted element is %d",q->data); free(q); } } void delete_end(){ if(start==NULL){ printf("The list is empty!!"); } else{ q=start; while(q->next->next!=NULL) q=q->next; t=q->next; q->next=NULL; printf("Deleted element is %d",t->data); free(t); } } int delete_pos(){ int pos,i; if(start==NULL){ printf("List is empty!!"); return 0; } printf("Enter position to delete:"); scanf("%d",&pos); q=start; for(i=1;i<pos-1;i++){ if(q->next==NULL) { printf("There are less elements!!"); return 0; } q=q->next; } t=q->next; q->next=t->next; printf("Deleted element is %d",t->data); free(t); return 0; }
0 Comments