Перебор элементов динамического списка - 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; }
Объяснение кода листинга программы
В этом коде представлена программа, которая создает и манипулирует динамическим списком, используя указатели. Вот список функций и переменных:
sum_last(list_ptr first)
: Эта функция находит сумму последнего и предпоследнего элементов списка.show(struct list *a)
: Эта функция отображает элементы списка.add(struct list **a, char m[100])
: Эта функция добавляет новый элемент в список.main()
: Это точка входа в программу. Она содержит основной цикл программы и несколько вложенных циклов для добавления данных в список и отображения списка. Вот список номеров строк и их соответствующих функций или переменных:- 16:
sum_last(list_ptr first)
- 18:
show(struct list *a)
- 22:
add(struct list **a, char m[100])
- 35:
main()
Вот список вызовов функций и переменных: - Строка 17:
sum_last(x)
используется для вычисления суммы последнего и предпоследнего элементов списка. - Строка 19:
show(x)
используется для отображения элементов списка. - Строка 23:
add(&x, str)
используется для добавления нового элемента в список. - Строка 36:
main()
является точкой входа в программу. Вот список действий: - Создать новый элемент списка.
- Добавить новый элемент в список.
- Вычислить сумму последнего и предпоследнего элементов списка.
- Отобразить элементы списка.
- Продолжить выполнение цикла, пока не будет введен символ
***
, указывающий на конец ввода данных. - Проверить, пуст ли список.
- Если список пуст, вывести сообщение.
- Продолжить выполнение цикла, пока не будет введен символ
***
, указывающий на конец ввода данных. - Выйти из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д