Sistema de gestión de empleados usando una lista doblemente enlazada en C

Diseñe e implemente un programa basado en menús en C para las siguientes operaciones en DLL de datos de empleados con campos: SSN , nombre , departamento , designación , salario , número de teléfono :

  • Cree una DLL de los datos de N empleados mediante la inserción final.
  • Muestra el estado de DLL y cuenta el número de Nodes que contiene.
  • Realice la inserción y eliminación al final de la DLL.
  • Realice la inserción y eliminación al frente de la DLL.
  • Demuestre cómo se puede usar esta DLL como una cola de dos extremos .

Acercarse:

  • Para almacenar los datos del empleado, cree un tipo de datos definido por el usuario que almacenará la información sobre el empleado. A continuación se muestra la declaración del tipo de datos: 
struct node {
    struct node* prev;
    int ssn;
    long int phno;
    float sal;
    char name[20], dept[10], desg[20];
    struct node* next;
}
  • Creación de la tabla de empleados: para crear la tabla de empleados, la idea es usar el tipo de datos de estructura anterior que se usará para almacenar la información sobre el empleado y los detalles de cada nuevo empleado se agregarán como un Node de lista vinculada .
  • Eliminación en el registro: dado que se utiliza una lista doblemente vinculada para almacenar los datos, por lo tanto, para eliminar los datos en cualquier índice, simplemente vincule el siguiente al siguiente de los datos eliminados y vincule el Node anterior de los siguientes datos de los eliminados . Node a sus datos anteriores .
  • Búsqueda en el registro: Para buscar en el registro en base a cualquier parámetro, la idea es recorrer los datos y si en algún índice los parámetros de valor coinciden con el registro almacenado, imprimir toda la información de ese empleado.

A continuación se muestra el programa C para demostrar los detalles de los empleadores utilizando una lista doblemente vinculada :

C

// C-program to demonstrate employer
// details using a Doubly-linked list
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
// Global declaration
int count = 0;
  
// Structure declaration
struct node {
    struct node* prev;
    int ssn;
    long int phno;
    float sal;
    char name[20], dept[10], desg[20];
    struct node* next;
} * h, *temp, *temp1, *temp2, *temp4;
  
// Function to create node
void create()
{
    int ssn;
    long int phno;
    float sal;
    char name[20], dept[10], desg[20];
    temp = (struct node*)malloc(sizeof(struct node));
    temp->prev = NULL;
    temp->next = NULL;
    printf("\n enter ssn, name, depart"
           "ment, designation, salary "
           "and phno of employee:\n");
    scanf("%d %s %s %s %f %ld",
          &ssn, name, dept, desg,
          &sal, &phno);
    temp->ssn = ssn;
    strcpy(temp->name, name);
    strcpy(temp->dept, dept);
    strcpy(temp->desg, desg);
    temp->sal = sal;
    temp->phno = phno;
    count++;
}
  
// Function to insert at beginning
void insertbeg()
{
    // If DLL is empty
    if (h == NULL) {
        create();
        h = temp;
        temp1 = h;
    }
  
    // Else create a new node and
    // update the links
    else {
        create();
        temp->next = h;
        h->prev = temp;
        h = temp;
    }
}
  
// Function to insert at end
void insertend()
{
    // If DLL is empty
    if (h == NULL) {
        create();
        h = temp;
        temp1 = h;
    }
  
    // Else create a new node and
    // update the links
    else {
        create();
        temp1->next = temp;
        temp->prev = temp1;
        temp1 = temp;
    }
}
  
// Function to display from beginning
void displaybeg()
{
    temp2 = h;
    if (temp2 == NULL) {
        printf("\n list is empty\n");
        return;
    }
    printf("\n linked list elements "
           "from beginning:\n");
    while (temp2 != NULL) {
        printf("%d %s %s %s %f %ld\n",
               temp2->ssn, temp2->name,
               temp2->dept, temp2->desg,
               temp2->sal, temp2->phno);
        temp2 = temp2->next;
    }
  
    // Print the count
    printf("number of employees=%d", count);
}
  
// Function to delete at end
int deleteend()
{
    struct node* temp;
    temp = h;
    if (temp == NULL) {
        printf("list is empty\n");
        return 0;
    }
    if (temp->next == NULL) {
        printf("%d %s %s %s %f %ld\n",
               temp->ssn, temp->name,
               temp->dept, temp->desg,
               temp->sal, temp->phno);
        free(temp);
        h = NULL;
    }
    else {
        temp = temp1;
        temp2 = temp1->prev;
        temp2->next = NULL;
        printf("%d %s %s %s %f %ld\n",
               temp->ssn, temp->name,
               temp->dept, temp->desg,
               temp->sal, temp->phno);
        free(temp);
        temp1 = temp2;
    }
    count--;
    return 0;
}
  
// Function to delete from beginning
int deletebeg()
{
    struct node* temp;
    temp = h;
    if (temp == NULL) {
        printf("list is empty\n");
        return 0;
    }
    if (temp->next == NULL) {
        printf("%d %s %s %s %f %ld\n",
               temp->ssn, temp->name,
               temp->dept, temp->desg,
               temp->sal, temp->phno);
        free(temp);
        h = NULL;
    }
    else {
        h = h->next;
        h->prev = NULL;
        printf("%d %s %s %s %f %ld\n",
               temp->ssn, temp->name,
               temp->dept, temp->desg,
               temp->sal, temp->phno);
        free(temp);
    }
    count--;
    return 0;
}
  
// Function displaying menus
void employerDetails()
{
    int ch, n, i;
    h = NULL;
    temp = temp1 = NULL;
    printf("--------Menu------------\n");
    printf("\n 1.create a DLL of n emp");
    printf("\n 2.display from beginning");
    printf("\n 3.insert at end");
    printf("\n 4.delete at end");
    printf("\n 5.insert at beginning");
    printf("\n 6.delete at beginning");
    printf("\n 7.to show DLL as queue");
    printf("\n 8.exit\n");
    printf("----------------------\n");
    while (1) {
        printf("\n enter choice : ");
        scanf("%d", &ch);
  
        // Switch statements begins
        switch (ch) {
        case 1:
            printf("\n enter number of"
                   " employees:");
            scanf("%d", &n);
            for (i = 0; i < n; i++)
                insertend();
            break;
        case 2:
            displaybeg();
            break;
        case 3:
            insertend();
            break;
        case 4:
            deleteend();
            break;
        case 5:
            insertbeg();
            break;
        case 6:
            deletebeg();
            break;
        case 7:
            printf(
                "\n to show DLL as queue"
                " \n1.perform insert and"
                " deletion operation by "
                "calling insertbeg() and "
                "deleteend() respectively\n "
                "\t OR \n 2.perform insert "
                "and delete operations by 
                "calling  insertend() and "
                "deletebeg() respectively\n");
            break;
        case 8:
            exit(0);
        default:
            printf("wrong choice\n");
        }
    }
}
  
// Driver Code
int main()
{
    // Function Call
    employerDetails();
  
    return 0;
}

Producción:

Explicación:

  • create(): La función create() crea un Node de lista doblemente enlazado utilizando la asignación de memoria dinámica , es decir, utilizando la función malloc() . Datos insertados en él, como nombre , departamento , designación , salario , Phno. en el Node temporal.
  • insertbeg(): esta función se utiliza para insertar el Node al principio de la lista doblemente enlazada. En esta función, si h==NULL significa que la lista está completamente vacía, por lo que es necesario crear un nuevo Node. De lo contrario, cree un Node e insértelo al principio. Luego haga de este Node un nuevo Node temporal.
  • insertend(): esta función se utiliza para insertar el Node al final de la lista doblemente enlazada. En esta función, si h==NULL significa que la lista está completamente vacía, por lo que es necesario crear un nuevo Node. De lo contrario, inserte esta temperatura después del Node temp1, finalmente asigne temp como temp1 para uso futuro.
  • displaybeg(): Esta función se utiliza para mostrar los elementos de la lista desde el principio. También ayuda saber el número de empleados.
  • deleteend(): esta función es útil para eliminar el Node del final. Dado que la memoria se asigna dinámicamente para el Node, es necesario escribir explícitamente la función para liberar el Node que se realiza mediante el uso de free(temp) .
  • deletebeg(): esta función es útil para eliminar el Node desde el principio Dado que la memoria se asigna dinámicamente para el Node, es necesario escribir explícitamente la función para liberar el Node que se realiza utilizando free(temp) .
  • principal():Esta es la función principal que impulsa todo el programa. Utiliza declaraciones de cambio para operar todas las funciones que se requieren para ejecutar un programa exitoso.

Publicación traducida automáticamente

Artículo escrito por shrutipandey27122001 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *