Замена элемента в двусвязном списке - C (СИ)
Формулировка задачи:
Помогите пожалуйста реализовать замену элемента в двусвязном списке. Например есть у нас структура
И мы вводим имя элемента данные которого нужно заменить новым(введенным с клавиатуры)
Листинг программы
- struct st
- {
- char name[20];
- int ser_bal;
- st *next; /* указатель на следующую запись */
- st *prior; /* указатель на предыдущую запись */
- };
Решение задачи: «Замена элемента в двусвязном списке»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct node_t
- {
- char name[20];
- int gpa;
- struct node_t* next;
- struct node_t* prev;
- } TNode;
- //-----------------------------------------------------------------------------
- TNode* PushFront(TNode** list, const char* name, int gpa)
- {
- TNode* node = (TNode*) malloc(sizeof(TNode));
- strcpy(node->name, name);
- node->gpa = gpa;
- node->prev = NULL;
- node->next = *list;
- if (node->next)
- {
- node->next->prev = node;
- }
- *list = node;
- return *list;
- }
- //-----------------------------------------------------------------------------
- TNode* Replace(TNode* list, const char* oldName, const char* newName, int gpa)
- {
- for (; list; list = list->next)
- {
- if (strcmp(list->name, oldName) == 0)
- {
- strcpy(list->name, newName);
- list->gpa = gpa;
- }
- }
- return list;
- }
- //-----------------------------------------------------------------------------
- void Print(const TNode* list)
- {
- for (; list; list = list->next)
- {
- printf("%s\t%3d\n", list->name, list->gpa);
- }
- }
- //-----------------------------------------------------------------------------
- int main()
- {
- TNode* list = NULL;
- PushFront(&list, "Andreev", 5);
- PushFront(&list, "Avdeev", 10);
- PushFront(&list, "Grishin", 15);
- PushFront(&list, "Ivanov", 20);
- PushFront(&list, "Lobkov", 25);
- PushFront(&list, "Petrov", 30);
- Replace(list, "Ivanov", "Smirnov", 100);
- Print(list);
- return 0;
- }
Объяснение кода листинга программы
- В функции
PushFront
создается новый узел с заданными значениямиname
иgpa
. - Устанавливаются указатели
prev
иnext
нового узла. - Новый узел добавляется в начало списка, обновляя указатель
next
предыдущего узла и указательprev
нового узла. - Если новый узел не является первым в списке, то обновляется указатель
prev
следующего узла. - В функции
Replace
происходит проход по всем узлам списка. - Если в узле найдено совпадение по
name
, то обновляются значенияname
иgpa
этого узла. - В функции
Print
происходит проход по всем узлам списка и выводится значениеname
иgpa
каждого узла. - В функции
main
создается пустой список. - В список добавляются несколько узлов с различными значениями
name
иgpa
. - Затем выполняется замена значения
name
наSmirnov
и значенияgpa
на 100 для первого вхождения узла с именемIvanov
. - Выводится список до и после замены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д