Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:a76236b7a8e6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Sep 16 13:57:00 2019 +0000
@@ -0,0 +1,368 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2018 ARM Limited
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "mbed.h"
+#include "ThisThread.h"
+#include "stats_report.h"
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+DigitalOut led1(LED1);
+
+#define SLEEP_TIME 500 // (msec)
+#define PRINT_AFTER_N_LOOPS 20
+
+
+
+struct node
+{
+ struct node *prev;
+ int n;
+ struct node *next;
+}*h,*temp,*temp1,*temp2,*temp4;
+
+void insert1();
+void insert2();
+void insert3();
+void traversebeg();
+void traverseend(int);
+void sort();
+void search();
+void update();
+void d_delete();
+
+int counter = 0;
+
+int main()
+{
+ int ch;
+
+ h = NULL;
+ temp = temp1 = NULL;
+
+ printf("\n 1 - Insert at beginning");
+ printf("\n 2 - Insert at end");
+ printf("\n 3 - Insert at position i");
+ printf("\n 4 - Delete at i");
+ printf("\n 5 - Display from beginning");
+ printf("\n 6 - Display from end");
+ printf("\n 7 - Search for element");
+ printf("\n 8 - Sort the list");
+ printf("\n 9 - Update an element");
+ printf("\n 10 - Exit");
+
+ while (1)
+ {
+ printf("\n Enter choice : ");
+ scanf("%d", &ch);
+ switch (ch)
+ {
+ case 1:
+ insert1();
+ break;
+ case 2:
+ insert2();
+ break;
+ case 3:
+ insert3();
+ break;
+ case 4:
+ d_delete();
+ break;
+ case 5:
+ traversebeg();
+ break;
+ case 6:
+ temp2 = h;
+ if (temp2 == NULL)
+ printf("\n Error : List empty to display ");
+ else
+ {
+ printf("\n Reverse order of linked list is : ");
+ traverseend(temp2->n);
+ }
+ break;
+ case 7:
+ search();
+ break;
+ case 8:
+ sort();
+ break;
+ case 9:
+ update();
+ break;
+ case 10:
+ exit(0);
+ default:
+ printf("\n Wrong choice menu");
+ }
+ }
+}
+
+/* TO create an empty node */
+void create()
+{
+ int data;
+
+ temp =(struct node *)malloc(1*sizeof(struct node));
+ temp->prev = NULL;
+ temp->next = NULL;
+ printf("\n Enter value to node : ");
+ scanf("%d", &data);
+ temp->n = data;
+ counter++;
+}
+
+/* TO insert at beginning */
+void insert1()
+{
+ if (h == NULL)
+ {
+ create();
+ h = temp;
+ temp1 = h;
+ }
+ else
+ {
+ create();
+ temp->next = h;
+ h->prev = temp;
+ h = temp;
+ }
+}
+
+/* To insert at end */
+void insert2()
+{
+ if (h == NULL)
+ {
+ create();
+ h = temp;
+ temp1 = h;
+ }
+ else
+ {
+ create();
+ temp1->next = temp;
+ temp->prev = temp1;
+ temp1 = temp;
+ }
+}
+
+/* To insert at any position */
+void insert3()
+{
+ int pos, i = 2;
+
+ printf("\n Enter position to be inserted : ");
+ scanf("%d", &pos);
+ temp2 = h;
+
+ if ((pos < 1) || (pos >= counter + 1))
+ {
+ printf("\n Position out of range to insert");
+ return;
+ }
+ if ((h == NULL) && (pos != 1))
+ {
+ printf("\n Empty list cannot insert other than 1st position");
+ return;
+ }
+ if ((h == NULL) && (pos == 1))
+ {
+ create();
+ h = temp;
+ temp1 = h;
+ return;
+ }
+ else
+ {
+ while (i < pos)
+ {
+ temp2 = temp2->next;
+ i++;
+ }
+ create();
+ temp->prev = temp2;
+ temp->next = temp2->next;
+ temp2->next->prev = temp;
+ temp2->next = temp;
+ }
+}
+
+/* To delete an element */
+void d_delete()
+{
+ int i = 1, pos;
+
+ printf("\n Enter position to be deleted : ");
+ scanf("%d", &pos);
+ temp2 = h;
+
+ if ((pos < 1) || (pos >= counter + 1))
+ {
+ printf("\n Error : Position out of range to delete");
+ return;
+ }
+ if (h == NULL)
+ {
+ printf("\n Error : Empty list no elements to delete");
+ return;
+ }
+ else
+ {
+ while (i < pos)
+ {
+ temp2 = temp2->next;
+ i++;
+ }
+ if (i == 1)
+ {
+ if (temp2->next == NULL)
+ {
+ printf("Node deleted from list");
+ free(temp2);
+ temp2 = h = NULL;
+ return;
+ }
+ }
+ if (temp2->next == NULL)
+ {
+ temp2->prev->next = NULL;
+ free(temp2);
+ printf("Node deleted from list");
+ return;
+ }
+ temp2->next->prev = temp2->prev;
+ if (i != 1)
+ temp2->prev->next = temp2->next; /* Might not need this statement if i == 1 check */
+ if (i == 1)
+ h = temp2->next;
+ printf("\n Node deleted");
+ free(temp2);
+ }
+ counter--;
+}
+
+/* Traverse from beginning */
+void traversebeg()
+{
+ temp2 = h;
+
+ if (temp2 == NULL)
+ {
+ printf("List empty to display \n");
+ return;
+ }
+ printf("\n Linked list elements from begining : ");
+
+ while (temp2->next != NULL)
+ {
+ printf(" %d ", temp2->n);
+ temp2 = temp2->next;
+ }
+ printf(" %d ", temp2->n);
+}
+
+/* To traverse from end recursively */
+void traverseend(int i)
+{
+ if (temp2 != NULL)
+ {
+ i = temp2->n;
+ temp2 = temp2->next;
+ traverseend(i);
+ printf(" %d ", i);
+ }
+}
+
+/* To search for an element in the list */
+void search()
+{
+ int data, counter = 0;
+ temp2 = h;
+
+ if (temp2 == NULL)
+ {
+ printf("\n Error : List empty to search for data");
+ return;
+ }
+ printf("\n Enter value to search : ");
+ scanf("%d", &data);
+ while (temp2 != NULL)
+ {
+ if (temp2->n == data)
+ {
+ printf("\n Data found in %d position",counter + 1);
+ return;
+ }
+ else
+ temp2 = temp2->next;
+ counter++;
+ }
+ printf("\n Error : %d not found in list", data);
+}
+
+/* To update a node value in the list */
+void update()
+{
+ int data, data1;
+
+ printf("\n Enter node data to be updated : ");
+ scanf("%d", &data);
+ printf("\n Enter new data : ");
+ scanf("%d", &data1);
+ temp2 = h;
+ if (temp2 == NULL)
+ {
+ printf("\n Error : List empty no node to update");
+ return;
+ }
+ while (temp2 != NULL)
+ {
+ if (temp2->n == data)
+ {
+
+ temp2->n = data1;
+ traversebeg();
+ return;
+ }
+ else
+ temp2 = temp2->next;
+ }
+
+ printf("\n Error : %d not found in list to update", data);
+}
+
+/* To sort the linked list */
+void sort()
+{
+ int i, j, x;
+
+ temp2 = h;
+ temp4 = h;
+
+ if (temp2 == NULL)
+ {
+ printf("\n List empty to sort");
+ return;
+ }
+
+ for (temp2 = h; temp2 != NULL; temp2 = temp2->next)
+ {
+ for (temp4 = temp2->next; temp4 != NULL; temp4 = temp4->next)
+ {
+ if (temp2->n > temp4->n)
+ {
+ x = temp2->n;
+ temp2->n = temp4->n;
+ temp4->n = x;
+ }
+ }
+ }
+ traversebeg();
+}
\ No newline at end of file