Перебор элементов динамического списка - C (СИ)

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

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

задача программы:

находит сумму последнего и предпоследнего элементов списка L, содержащего не менее двух элементов

постановка задачи:

Элементы списка должны вводиться с клавиатуры и размещаться в динамической памяти. как сделать перебор элементов динамического списка? это для того чтобы можно было определить последнее и предпоследнее число

Решение задачи: «Перебор элементов динамического списка»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <assert.h>
 
typedef struct list {
    int data;
    struct list * next;
} list_t, *list_ptr;
char ch1, str[100];
int  i, count = 0;
struct list *x = NULL;
 
int sum_last(list_ptr first) {
    list_ptr ptr;
 
    assert(NULL != first);
    assert(NULL != first->next);
 
    for (ptr = first; ptr->next->next; ptr = ptr->next) {}
    return ptr->data + ptr->next->data;
}
 
void show(struct list *a) { 
    char wrd[100];
    while (a != NULL) {
        strcpy(wrd, a->data);
        a = a->next;
        printf(" %s\t", wrd);
    }
}
 
 
void add(struct list **a, char m[100]) {
    struct list *b = (struct list *)malloc(sizeof(struct list));
    strcpy(b->data, m);
    b->next = NULL;
    if (*a == NULL)
        *a = b;
    else {
        struct list *t = *a;
        while (t->next != NULL)
            t = t->next;
        t->next = b;
    }
}
 
int main()
{
    char c, c1;
    int i, j, min;
 
    while (!(c == 27))
    {
        system("cls");
        printf(" Enter - run the program.\n");
        printf(" Esc - exit.\n");
        printf(" Any other key - information about program.\n");
        c = getch();
        system("cls");
        switch (c)
        {
        case 27:
            break;
        case 13:
        {
            system("cls");
            printf("It\'s time to fill the first list (to end the filling eneter ***)\n\n");
            for (i = 0; ; i++) {
                printf("Enter the data:\n>>");
                do
                {
                    gets(str);
                    if (strlen(str) == 0) printf("You've entered an empty string. Try again:\n>> ");
                } while (strlen(str) == 0);
                if (strcmp(str, "***") == 0) break;
                add(&x, str);
                count++;
            }
            if (count == 0) printf("\nThe first list is empty.\n");
            else printf("Elements in your first list are:\n");
            show(x);
            printf("\n\n\nPress \'Enter\' to continue");
            getch();
            sum_last(x);
            x = NULL;
            printf("\n\tEsc - exit.\n");
            printf("\tAny other - go to the main page.\n");
            c = getch();
            break;
        }
 
        default:
        {
            printf("\n Finds the sum of the last and penultimate elements of the list L containing at least two elements.\n\n");
            printf(" Esc - exit.\n");
            printf(" Any other - go to the main page.\n");
            c = getch();
            break;
        }
        }
    }
    return 0;
}

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

В этом коде представлена программа, которая создает и манипулирует динамическим списком, используя указатели. Вот список функций и переменных:

  1. sum_last(list_ptr first): Эта функция находит сумму последнего и предпоследнего элементов списка.
  2. show(struct list *a): Эта функция отображает элементы списка.
  3. add(struct list **a, char m[100]): Эта функция добавляет новый элемент в список.
  4. main(): Это точка входа в программу. Она содержит основной цикл программы и несколько вложенных циклов для добавления данных в список и отображения списка. Вот список номеров строк и их соответствующих функций или переменных:
  5. 16: sum_last(list_ptr first)
  6. 18: show(struct list *a)
  7. 22: add(struct list **a, char m[100])
  8. 35: main() Вот список вызовов функций и переменных:
  9. Строка 17: sum_last(x) используется для вычисления суммы последнего и предпоследнего элементов списка.
  10. Строка 19: show(x) используется для отображения элементов списка.
  11. Строка 23: add(&x, str) используется для добавления нового элемента в список.
  12. Строка 36: main() является точкой входа в программу. Вот список действий:
  13. Создать новый элемент списка.
  14. Добавить новый элемент в список.
  15. Вычислить сумму последнего и предпоследнего элементов списка.
  16. Отобразить элементы списка.
  17. Продолжить выполнение цикла, пока не будет введен символ ***, указывающий на конец ввода данных.
  18. Проверить, пуст ли список.
  19. Если список пуст, вывести сообщение.
  20. Продолжить выполнение цикла, пока не будет введен символ ***, указывающий на конец ввода данных.
  21. Выйти из программы.

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


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

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

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