Linked List in c

12
#include<stdio.h> #include <malloc.h> #define ISEMPTY printf("\nThe List is Empty.\n"); struct node { int value; struct node *next; }; typedef struct node snode; snode *first=NULL, *last=NULL; snode *newnode,*ptr,*prev,*temp; snode* create_node(int); void insert_node_first(); void insert_node_last(); void insert_node_pos(); void display(); void delete_pos(); void sort(); main() { int a,ch; char ans='Y';

description

linked

Transcript of Linked List in c

Page 1: Linked List in c

#include<stdio.h>

#include <malloc.h>

#define ISEMPTY printf("\nThe List is Empty.\n");

struct node

{

int value;

struct node *next;

};

typedef struct node snode;

snode *first=NULL, *last=NULL;

snode *newnode,*ptr,*prev,*temp;

snode* create_node(int);

void insert_node_first();

void insert_node_last();

void insert_node_pos();

void display();

void delete_pos();

void sort();

main()

{

int a,ch;

char ans='Y';

while(ans=='Y'||ans=='y')

Page 2: Linked List in c

{

printf("\nOperations on a Singly Linked List.\n");

printf("\n1. Insert node at the first position of the list.");

printf("\n2. Insert node at the last position of the list.");

printf("\n3. Insert node at any position of the list.");

printf("\n4. Delete node from any position of the list.");

printf("\n5. Display the list.");

printf("\n6. Sorting the list.");

printf("\n7. Exit\n");

printf("\nEnter your choice: ");

scanf("%d",&ch);

switch(ch)

{

case 1:

printf("\nInserting data at the first node\n");

insert_node_first();

break;

case 2:

printf("\nInserting data at the last node\n");

insert_node_last();

break;

case 3:

printf("\nInserting data at a position.\n");

insert_node_pos();

break;

Page 3: Linked List in c

case 4:

printf("\nDeleting node from a position in the list.\n");

delete_pos();

break;

case 5:

printf("\nDisplaying the nodes\n");

display();

break;

case 6:

printf("\nSorting the list in ascending order.\n");

sort();

break;

case 7:

printf("\nExiting.\n");

return 0;

break;

default:

printf("\nInvalid Choice\n");

break;

}

printf("\nDo you want to continue? Type('y'/'n').\n");

scanf(" %c", &ans);

}

}

Page 4: Linked List in c

snode* create_node(int val)

{

newnode= (snode *)malloc(sizeof(snode));

if(newnode==NULL)

{

printf("\nMemory was not allocated\n");

return (0);

}

else

{

newnode->value=val;

newnode->next=NULL;

return newnode;

}

}

void insert_node_first()

{

int val;

printf("\nEnter the value for the first node.\n");

scanf("%d",&val);

newnode=create_node(val);

if(first==last && first==NULL)

{

first=last=newnode;

first->next=NULL;

Page 5: Linked List in c

last->next=NULL;

}

else

{

temp=first;

first=newnode;

first->next=temp;

}

printf("\nData inserted in node.\n");

}

void insert_node_last()

{

int val;

printf("\nEnter the value for the last node.\n");

scanf("%d",&val);

newnode=create_node(val);

if(first==last && first==NULL)

{

first=last=newnode;

first->next=NULL;

last->next=NULL;

}

else

{

Page 6: Linked List in c

last->next=newnode;

last=newnode;

last->next=NULL;

}

printf("\nData inserted in node.\n");

}

void display()

{

if(first==NULL)

{

ISEMPTY;

}

else

{

printf("\n");

printf("\t");

for(ptr=first; ptr!=NULL; ptr=ptr->next)

{

printf("|%d|*|->",ptr->value);

}

printf("\n");

}

}

Page 7: Linked List in c

void insert_node_pos()

{

int pos, val, cnt = 0, i;

printf("\nEnter the value for the Node:");

scanf("%d", &val);

newnode = create_node(val);

printf("\nEnter the position ");

scanf("%d", &pos);

ptr = first;

while (ptr != NULL)

{

ptr = ptr->next;

cnt++;

}

printf("\nThe value of counter is %d\n",cnt);

if (pos == 1)

{

if (first == last && first == NULL)

{

first = last = newnode;

first->next = NULL;

last->next = NULL;

}

else

Page 8: Linked List in c

{

temp = first;

first = newnode;

first->next = temp;

}

printf("\nData Inserted\n");

}

else if (pos>1 && pos<=cnt)

{

ptr = first;

for (i = 1;i < pos;i++)

{

prev = ptr;

ptr = ptr->next;

}

prev->next = newnode;

newnode->next = ptr;

printf("\nData Inserted.\n");

}

else

{

printf("Position is out of range");

}

}

Page 9: Linked List in c

void delete_pos()

{

int pos, cnt = 0, i;

if (first == NULL)

{

ISEMPTY;

printf(":No node to delete\n");

}

else

{

printf("\nEnter the position of value to be deleted:");

scanf(" %d", &pos);

ptr = first;

if (pos == 1)

{

first = ptr->next;

printf("\nElement deleted");

}

else

{

while (ptr != NULL)

{

ptr = ptr->next;

cnt++;

}

Page 10: Linked List in c

if (pos > 0 && pos <= cnt)

{

ptr = first;

for (i = 1;i < pos;i++)

{

prev = ptr;

ptr = ptr->next;

}

prev->next = ptr->next;

}

else

{

printf("Position is out of range");

}

free(ptr);

printf("\nElement deleted");

}

}

}

void sort()

{

snode *nxt;

int t;

if (first == NULL)

Page 11: Linked List in c

{

ISEMPTY;

printf(":No elements to sort\n");

}

else

{

for (ptr = first;ptr != NULL;ptr = ptr->next)

{

for (nxt = ptr->next;nxt != NULL;nxt = nxt->next)

{

if (ptr->value > nxt->value)

{

t = ptr->value;

ptr->value = nxt->value;

nxt->value = t;

}

}

}

printf("\n---Sorted List---\n");

for (ptr = first;ptr != NULL;ptr = ptr->next)

{

printf("%d\t", ptr->value);

}

}

}