Замена элемента в двусвязном списке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста реализовать замену элемента в двусвязном списке. Например есть у нас структура
Листинг программы
  1. struct st
  2. {
  3. char name[20];
  4. int ser_bal;
  5. st *next; /* указатель на следующую запись */
  6. st *prior; /* указатель на предыдущую запись */
  7. };
И мы вводим имя элемента данные которого нужно заменить новым(введенным с клавиатуры)

Решение задачи: «Замена элемента в двусвязном списке»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct node_t
  6. {
  7.    char name[20];
  8.    int  gpa;
  9.  
  10.    struct node_t* next;
  11.    struct node_t* prev;
  12. }  TNode;
  13.  
  14. //-----------------------------------------------------------------------------
  15. TNode* PushFront(TNode** list, const char* name, int gpa)
  16. {
  17.    TNode* node = (TNode*) malloc(sizeof(TNode));
  18.    strcpy(node->name, name);
  19.    node->gpa = gpa;
  20.    node->prev = NULL;
  21.    node->next = *list;
  22.  
  23.    if (node->next)
  24.    {
  25.       node->next->prev = node;
  26.    }
  27.  
  28.    *list = node;
  29.  
  30.    return *list;
  31. }
  32. //-----------------------------------------------------------------------------
  33. TNode* Replace(TNode* list, const char* oldName, const char* newName, int gpa)
  34. {
  35.    for (; list; list = list->next)
  36.    {
  37.       if (strcmp(list->name, oldName) == 0)
  38.       {
  39.          strcpy(list->name, newName);
  40.          list->gpa = gpa;
  41.       }
  42.    }
  43.  
  44.    return list;
  45. }
  46. //-----------------------------------------------------------------------------
  47. void Print(const TNode* list)
  48. {
  49.    for (; list; list = list->next)
  50.    {
  51.       printf("%s\t%3d\n", list->name, list->gpa);
  52.    }
  53. }
  54. //-----------------------------------------------------------------------------
  55.  
  56. int main()
  57. {
  58.    TNode* list = NULL;
  59.  
  60.    PushFront(&list, "Andreev",  5);
  61.    PushFront(&list, "Avdeev",  10);
  62.    PushFront(&list, "Grishin", 15);
  63.    PushFront(&list, "Ivanov",  20);
  64.    PushFront(&list, "Lobkov",  25);
  65.    PushFront(&list, "Petrov",  30);
  66.  
  67.    Replace(list, "Ivanov", "Smirnov", 100);
  68.  
  69.    Print(list);
  70.  
  71.    return 0;
  72. }

Объяснение кода листинга программы

  1. В функции PushFront создается новый узел с заданными значениями name и gpa.
  2. Устанавливаются указатели prev и next нового узла.
  3. Новый узел добавляется в начало списка, обновляя указатель next предыдущего узла и указатель prev нового узла.
  4. Если новый узел не является первым в списке, то обновляется указатель prev следующего узла.
  5. В функции Replace происходит проход по всем узлам списка.
  6. Если в узле найдено совпадение по name, то обновляются значения name и gpa этого узла.
  7. В функции Print происходит проход по всем узлам списка и выводится значение name и gpa каждого узла.
  8. В функции main создается пустой список.
  9. В список добавляются несколько узлов с различными значениями name и gpa.
  10. Затем выполняется замена значения name на Smirnov и значения gpa на 100 для первого вхождения узла с именем Ivanov.
  11. Выводится список до и после замены.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы