Una lista enlazada es una estructura de datos lineal que consta de dos partes: una es la parte de datos y la otra es la parte de dirección. En este artículo, todas las operaciones comunes de una lista enlazada individualmente se analizan en un programa controlado por menú .
Operaciones a realizar :
- createList(): para crear la lista con ‘n’ número de Nodes inicialmente según lo definido por el usuario.
- atravesar(): Para ver el contenido de la lista enlazada, es necesario recorrer la lista enlazada dada. La función traverse() dada atraviesa e imprime el contenido de la lista enlazada.
- insertAtFront(): esta función simplemente inserta un elemento al principio o al principio de la lista enlazada.
- insertAtEnd(): Esta función inserta un elemento al final de la lista enlazada.
- insertAtPosition(): esta función inserta un elemento en una posición específica en la lista enlazada.
- deleteFirst(): Esta función simplemente elimina un elemento del frente/comienzo de la lista enlazada.
- deleteEnd(): esta función simplemente elimina un elemento del final de la lista enlazada.
- deletePosition(): esta función elimina un elemento de una posición específica en la lista enlazada.
- máximo(): esta función encuentra el elemento máximo en una lista vinculada.
- mean(): Esta función encuentra la media de los elementos en una lista enlazada.
- sort(): esta función ordena la lista vinculada dada en orden ascendente.
- reverseLL(): Esta función invierte la lista enlazada dada.
A continuación se muestra la implementación de las operaciones anteriores:
C
// C program for the all operations in // the Singly Linked List #include <stdio.h> #include <stdlib.h> // Linked List Node struct node { int info; struct node* link; }; struct node* start = NULL; // Function to create list with n nodes initially void createList() { if (start == NULL) { int n; printf("\nEnter the number of nodes: "); scanf("%d", &n); if (n != 0) { int data; struct node* newnode; struct node* temp; newnode = malloc(sizeof(struct node)); start = newnode; temp = start; printf("\nEnter number to" " be inserted : "); scanf("%d", &data); start->info = data; for (int i = 2; i <= n; i++) { newnode = malloc(sizeof(struct node)); temp->link = newnode; printf("\nEnter number to" " be inserted : "); scanf("%d", &data); newnode->info = data; temp = temp->link; } } printf("\nThe list is created\n"); } else printf("\nThe list is already created\n"); } // Function to traverse the linked list void traverse() { struct node* temp; // List is empty if (start == NULL) printf("\nList is empty\n"); // Else print the LL else { temp = start; while (temp != NULL) { printf("Data = %d\n", temp->info); temp = temp->link; } } } // Function to insert at the front // of the linked list void insertAtFront() { int data; struct node* temp; temp = malloc(sizeof(struct node)); printf("\nEnter number to" " be inserted : "); scanf("%d", &data); temp->info = data; // Pointer of temp will be // assigned to start temp->link = start; start = temp; } // Function to insert at the end of // the linked list void insertAtEnd() { int data; struct node *temp, *head; temp = malloc(sizeof(struct node)); // Enter the number printf("\nEnter number to" " be inserted : "); scanf("%d", &data); // Changes links temp->link = 0; temp->info = data; head = start; while (head->link != NULL) { head = head->link; } head->link = temp; } // Function to insert at any specified // position in the linked list void insertAtPosition() { struct node *temp, *newnode; int pos, data, i = 1; newnode = malloc(sizeof(struct node)); // Enter the position and data printf("\nEnter position and data :"); scanf("%d %d", &pos, &data); // Change Links temp = start; newnode->info = data; newnode->link = 0; while (i < pos - 1) { temp = temp->link; i++; } newnode->link = temp->link; temp->link = newnode; } // Function to delete from the front // of the linked list void deleteFirst() { struct node* temp; if (start == NULL) printf("\nList is empty\n"); else { temp = start; start = start->link; free(temp); } } // Function to delete from the end // of the linked list void deleteEnd() { struct node *temp, *prevnode; if (start == NULL) printf("\nList is Empty\n"); else { temp = start; while (temp->link != 0) { prevnode = temp; temp = temp->link; } free(temp); prevnode->link = 0; } } // Function to delete from any specified // position from the linked list void deletePosition() { struct node *temp, *position; int i = 1, pos; // If LL is empty if (start == NULL) printf("\nList is empty\n"); // Otherwise else { printf("\nEnter index : "); // Position to be deleted scanf("%d", &pos); position = malloc(sizeof(struct node)); temp = start; // Traverse till position while (i < pos - 1) { temp = temp->link; i++; } // Change Links position = temp->link; temp->link = position->link; // Free memory free(position); } } // Function to find the maximum element // in the linked list void maximum() { int a[10]; int i; struct node* temp; // If LL is empty if (start == NULL) printf("\nList is empty\n"); // Otherwise else { temp = start; int max = temp->info; // Traverse LL and update the // maximum element while (temp != NULL) { // Update the maximum // element if (max < temp->info) max = temp->info; temp = temp->link; } printf("\nMaximum number " "is : %d ", max); } } // Function to find the mean of the // elements in the linked list void mean() { int a[10]; int i; struct node* temp; // If LL is empty if (start == NULL) printf("\nList is empty\n"); // Otherwise else { temp = start; // Stores the sum and count of // element in the LL int sum = 0, count = 0; float m; // Traverse the LL while (temp != NULL) { // Update the sum sum = sum + temp->info; temp = temp->link; count++; } // Find the mean m = sum / count; // Print the mean value printf("\nMean is %f ", m); } } // Function to sort the linked list // in ascending order void sort() { struct node* current = start; struct node* index = NULL; int temp; // If LL is empty if (start == NULL) { return; } // Else else { // Traverse the LL while (current != NULL) { index = current->link; // Traverse the LL nestedly // and find the minimum // element while (index != NULL) { // Swap with it the value // at current if (current->info > index->info) { temp = current->info; current->info = index->info; index->info = temp; } index = index->link; } // Update the current current = current->link; } } } // Function to reverse the linked list void reverseLL() { struct node *t1, *t2, *temp; t1 = t2 = NULL; // If LL is empty if (start == NULL) printf("List is empty\n"); // Else else { // Traverse the LL while (start != NULL) { // reversing of points t2 = start->link; start->link = t1; t1 = start; start = t2; } start = t1; // New head Node temp = start; printf("Reversed linked " "list is : "); // Print the LL while (temp != NULL) { printf("%d ", temp->info); temp = temp->link; } } } // Driver Code int main() { int choice; while (1) { printf("\n\t1 To see list\n"); printf("\t2 For insertion at" " starting\n"); printf("\t3 For insertion at" " end\n"); printf("\t4 For insertion at " "any position\n"); printf("\t5 For deletion of " "first element\n"); printf("\t6 For deletion of " "last element\n"); printf("\t7 For deletion of " "element at any position\n"); printf("\t8 To find maximum among" " the elements\n"); printf("\t9 To find mean of " "the elements\n"); printf("\t10 To sort element\n"); printf("\t11 To reverse the " "linked list\n"); printf("\t12 To exit\n"); printf("\nEnter Choice :\n"); scanf("%d", &choice); switch (choice) { case 1: traverse(); break; case 2: insertAtFront(); break; case 3: insertAtEnd(); break; case 4: insertAtPosition(); break; case 5: deleteFirst(); break; case 6: deleteEnd(); break; case 7: deletePosition(); break; case 8: maximum(); break; case 9: mean(); break; case 10: sort(); break; case 11: reverseLL(); break; case 12: exit(1); break; default: printf("Incorrect Choice\n"); } } return 0; }
Producción:
Menú:
Inserción al inicio:
Inserción al final:
Inserción en posición específica:
Imprima la Lista Vinculada:
Máximo entre la lista enlazada:
Clasificación de la lista enlazada:
Invierta la lista enlazada:
Elimine el primer y último elemento con la opción 5 y 6:
Publicación traducida automáticamente
Artículo escrito por imsushant12 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA