Система управления сотрудниками с использованием двусвязного списка на C
Опубликовано: 21 Января, 2022
Разработка и реализация программы управляемый с помощью меню в C для операций ниже по DLL данных сотрудников с полями: ПКР, имя, отдел, назначение, зарплата, номер телефона:
- Создайте DLL данных N сотрудников, используя вставку конца.
- Отобразите состояние DLL и подсчитайте количество узлов в ней.
- Выполните вставку и удаление в конце DLL.
- Выполняйте вставку и удаление перед DLL.
- Продемонстрируйте, как эту DLL можно использовать в качестве двусторонней очереди.
Подход:
- Для хранения данных сотрудника создайте тип данных, определяемый пользователем, в котором будет храниться информация о сотруднике. Ниже приведено объявление типа данных:
struct node { struct node * prev; int ssn; длинный int phno; float sal; имя символа [20], отдел [10], дизайн [20]; struct node * next; }
- Создание таблицы сотрудника: для создания таблицы сотрудников идея состоит в том, чтобы использовать приведенный выше тип данных структуры, который будет использоваться для хранения информации о сотруднике, и данные каждого нового сотрудника будут добавлены в виде узла связанного списка .
- Удаление в записи: поскольку для хранения данных используется двусвязный список, поэтому для удаления данных по любому индексу просто свяжите следующий за следующим из удаленных данных и свяжите предыдущий узел следующих данных удаленных узел к его предыдущим данным .
- Поиск в записи: для поиска в записи на основе любого параметра идея состоит в том, чтобы просмотреть данные и, если по любому индексу параметры значения совпадают с сохраненной записью, распечатать всю информацию об этом сотруднике.
Below is the C-program to demonstrate employers details using a Doubly Linked List:
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 ( "
enter ssn, name, depart" "ment, designation, salary " "and phno of employee:
" ); 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 ( "
list is empty
" ); return ; } printf ( "
linked list elements " "from beginning:
" ); while (temp2 != NULL) { printf ( "%d %s %s %s %f %ld
" , 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
" ); return 0; } if (temp->next == NULL) { printf ( "%d %s %s %s %f %ld
" , 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
" , 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
" ); return 0; } if (temp->next == NULL) { printf ( "%d %s %s %s %f %ld
" , 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
" , 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------------
" ); printf ( "
1.create a DLL of n emp" ); printf ( "
2.display from beginning" ); printf ( "
3.insert at end" ); printf ( "
4.delete at end" ); printf ( "
5.insert at beginning" ); printf ( "
6.delete at beginning" ); printf ( "
7.to show DLL as queue" ); printf ( "
8.exit
" ); printf ( "----------------------
" ); while (1) { printf ( "
enter choice : " ); scanf ( "%d" , &ch); // Switch statements begins switch (ch) { case 1: printf ( "
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 ( "
to show DLL as queue" "
1.perform insert and" " deletion operation by " "calling insertbeg() and " "deleteend() respectvely
" " OR
2.perform insert " "and delete operations by "calling insertend() and " "deletebeg() respectively
" ); break ; case 8: exit (0); default : printf ( "wrong choice
" ); } } } // Driver Code int main() { // Function Call employerDetails(); return 0; } |
Выход:
Объяснение:
- create (): функция create () создает узел двусвязного списка с использованием динамического распределения памяти, то есть с помощью функции malloc (). Данные вставляются в него , такие как имя, отдел, назначение, зарплата, Phno. во временный узел.
- insertbeg (): эта функция используется для вставки узла в начало двусвязного списка. В этой функции, если h == NULL означает, что список полностью пуст, поэтому необходимо создать новый узел. В противном случае создайте узел и вставьте его в начало. Затем сделайте этот узел новым временным узлом.
- inserttend (): эта функция используется для вставки узла в конец двусвязного списка. В этой функции, если h == NULL означает, что список полностью пуст, поэтому необходимо создать новый узел. В противном случае, вставьте этот temp после узла temp1, наконец, назначьте temp как temp1 для будущего использования.
- displaybeg (): эта функция используется для отображения элементов списка с самого начала. Это также помогает узнать количество сотрудников.
- deleteend (): эта функция полезна для удаления узла с конца. Поскольку память для узла выделяется динамически, необходимо явно написать функцию для освобождения узла, что выполняется с помощью free (temp) .
- deletebeg (): эта функция полезна для удаления узла с самого начала. Поскольку память выделяется для узла динамически, необходимо явно написать функцию для освобождения узла, которая выполняется с помощью free (temp) .
- главный(): Это основная функция, управляющая всей программой. Он использует операторы switch для управления всеми функциями, необходимыми для успешного выполнения программы.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.