Реализовать в виде односвязного списка - C (СИ)

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

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

Туристическое агентство содержит список клиентов. Создайте массив структур «Клиенты», структура содержит идентификационный номер клиента, ФИО, стоимость путевки, место отдыха (реализовать в виде односвязного списка)

Решение задачи: «Реализовать в виде односвязного списка»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_LOCATION_LENGTH     128
#define MAX_PERSON_NAME_LENGTH  64
 
struct Voucher
{
  double price;
  char location[MAX_LOCATION_LENGTH + 1];
};
 
struct Client
{
  unsigned int id;
  char surname[MAX_PERSON_NAME_LENGTH + 1];
  char name[MAX_PERSON_NAME_LENGTH + 1];
  struct Voucher voucher;
};
 
struct OneWayList
{
  struct Client clientData;
  struct OneWayList* next;
};
 
void AddToList(struct OneWayList** const rootPtr, const struct Client client)
{
  if (*rootPtr == NULL)
  {    
    *rootPtr = malloc(sizeof(**rootPtr));
    
    (*rootPtr)->clientData = client;
    (*rootPtr)->next = NULL;
  }
  else
  {
    struct OneWayList* p = *rootPtr;  
    
    while (p->next != NULL) p = p->next;
    
    p->next = malloc(sizeof(*p));
    
    p->next->clientData = client;
    p->next->next = NULL;
  }
}
 
void PrintList(const struct OneWayList* const root)
{
  const struct OneWayList* p = root;
  
  int i = 0;
  
  printf("===== List values: =====\n");
  
  while (p != NULL)
  {
    printf("Client %3d:\n"
      "  ID: %u\n"
      "  Name: %s\n"
      "  Surname: %s\n"
      "  Voucher data:\n"
      "    location: %s\n"
      "    price: %f\n",
      ++i,
      p->clientData.id,
      p->clientData.name,
      p->clientData.surname,
      p->clientData.voucher.location,
      p->clientData.voucher.price);
      
    p = p->next;
  }
}
 
void ClearList(struct OneWayList** rootPtr)
{
  while (*rootPtr != NULL)
  {
    struct OneWayList* p = (*rootPtr)->next;
    free(*rootPtr);
    *rootPtr = p;
  }
}
 
int main(void)
{
  struct OneWayList* clientListRoot = NULL;
  
  struct Client clientIvanov = {
    .id = 119,
    .surname = "Ivanov",
    .name = "Ivan",
    .voucher.price = 12.45,
    .voucher.location = "Thailand"
  };
  
  struct Client clientPetrov = {
    .id = 187256,
    .surname = "Petrov",
    .name = "Sergey",
    .voucher.price = 9.5,
    .voucher.location = "India"
  };
  
  struct Client clientSidorov = {
    .id = 11223,
    .surname = "Sidorov",
    .name = "Oleg",
    .voucher.price = 112.99,
    .voucher.location = "Florida, USA"
  };
  
  struct Client clientSokolova = {
    .id = 998,
    .surname = "Sokolova",
    .name = "Oksana",
    .voucher.price = 229.99,
    .voucher.location = "Mallorca"
  };
  
  AddToList(&clientListRoot, clientIvanov);
  AddToList(&clientListRoot, clientPetrov);
  AddToList(&clientListRoot, clientSidorov);
  AddToList(&clientListRoot, clientSokolova);
  
  PrintList(clientListRoot);
  
  ClearList(&clientListRoot);
  
  return 0;
}

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

  1. В начале кода определяются две структуры: Client и Voucher.
  2. Структура Client содержит поля: id, surname, name и voucher.
  3. Структура Voucher содержит поля: price и location.
  4. Определяется структура OneWayList, которая содержит поля: clientData (содержащее структуру Client) и next (указатель на следующий элемент списка).
  5. Функция AddToList добавляет новый элемент в список. Если список пуст, выделяется память под новый элемент списка. Если список не пуст, новый элемент добавляется в конец списка.
  6. Функция PrintList выводит на экран все элементы списка.
  7. Функция ClearList освобождает память, выделенную под каждый элемент списка, начиная с его головы.
  8. В функции main создаются несколько структур Client с данными о клиентах.
  9. Создается указатель на голову списка clientListRoot.
  10. С помощью функции AddToList каждому клиенту создается запись в списке.
  11. С помощью функции PrintList выводятся данные всех клиентов.
  12. С помощью функции ClearList освобождается память, выделенная под списком.
  13. Программа завершается возвратом значения 0.

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


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

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

9   голосов , оценка 4.222 из 5
Похожие ответы