Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct Node
- {
- int data;
- struct Node *next;
- }node;
- void insert(node *pointer, int data)
- {
- /* Iterate through the list till we encounter the last node.*/
- while(pointer->next!=NULL)
- {
- pointer = pointer -> next;
- }
- /* Allocate memory for the new node and put data in it.*/
- pointer->next = (node *)malloc(sizeof(node));
- pointer = pointer->next;
- pointer->data = data;
- pointer->next = NULL;
- printf("Successfully inserted.......\n");
- }
- int find(node *pointer, int key)
- {
- pointer = pointer -> next; //First node is dummy node.
- /* Iterate through the entire linked list and search for the key. */
- while(pointer!=NULL)
- {
- if(pointer->data == key) //key is found.
- {
- return 1;
- }
- pointer = pointer -> next;//Search in the next node.
- }
- /*Key is not found */
- return 0;
- }
- int update(node *pointer, int key, int new_key)
- {
- pointer = pointer -> next; //First node is dummy node.
- /* Iterate through the entire linked list and search for the key. */
- while(pointer!=NULL)
- {
- if(pointer->data == key) //key is found.
- {
- pointer->data = new_key;
- return 1;
- }
- pointer = pointer -> next;//Search in the next node.
- }
- /*Key is not found */
- return 0;
- }
- void delete(node *pointer, int data)
- {
- /* Go to the node for which the node next to it has to be deleted */
- while(pointer->next!=NULL && (pointer->next)->data != data)
- {
- pointer = pointer -> next;
- }
- if(pointer->next==NULL)
- {
- printf("Element %d is not present in the list\n",data);
- return;
- }
- /* Now pointer points to a node and the node next to it has to be removed */
- node *temp;
- temp = pointer -> next;
- /*temp points to the node which has to be removed*/
- pointer->next = temp->next;
- /*We removed the node which is next to the pointer (which is also temp) */
- free(temp);
- /* Beacuse we deleted the node, we no longer require the memory used for it .
- free() will deallocate the memory.
- */
- printf("Successfully deleted.......\n");
- return;
- }
- void print(node *pointer)
- {
- if(pointer==NULL)
- {
- return;
- }
- printf("%d ",pointer->data);
- print(pointer->next);
- }
- int main()
- {
- /* start always points to the first node of the linked list.
- temp is used to point to the last node of the linked list.*/
- node *start,*temp;
- start = (node *)malloc(sizeof(node));
- temp = start;
- temp -> next = NULL;
- /* Here in this code, we take the first node as a dummy node.
- The first node does not contain data, but it used because to avoid handling special cases
- in insert and delete functions.
- */
- printf("1. Insert\n");
- printf("2. Delete\n");
- printf("3. Print\n");
- printf("4. Find\n");
- printf("5. Update\n");
- while(1)
- {
- int query;
- printf("Enter your choice :");
- scanf("%d",&query);
- if(query==1)
- {
- int data;
- printf("Enter the data you want to insert: ");
- scanf("%d",&data);
- insert(start,data);
- }
- else if(query==2)
- {
- int data;
- printf("Enter the data you want to delete: ");
- scanf("%d",&data);
- delete(start,data);
- }
- else if(query==3)
- {
- printf("The list is ");
- print(start->next);
- printf("\n");
- }
- else if(query==4)
- {
- int data;
- printf("Enter the data you want to find: ");
- scanf("%d",&data);
- int status = find(start,data);
- if(status)
- {
- printf("Element Found\n");
- }
- else
- {
- printf("Element Not Found\n");
- }
- }
- else if(query==5)
- {
- int data,new_data;
- printf("Enter the data you want to update: ");
- scanf("%d",&data);
- printf("Enter the new data: ");
- scanf("%d",&new_data);
- int status = update(start,data,new_data);
- if(status)
- {
- printf("Element successfully updated\n");
- }
- else
- {
- printf("Element Not updated\n");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement