Замена элемента в двусвязном списке - 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;
}

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

  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
Похожие ответы