Односвязный список: удаление элементов,заканчивающихся на 5 - C (СИ)
Формулировка задачи:
Есть вот такая задача:
Создать список из случайных целых чисел и удалить элементы, заканчивающиеся на цифру 5.
Язык Си.Реализовать стеком или очередью.Первую часть сделала на основе данной на лекциях теории, а вот насчет того,как извлечь именно значение из списка, проверить делиться ли оно на 5 без остатка и если да, то удалить...Не могу найти нигде примеров такого синтаксиса.Может,кто сможет подсказать?
Это все,что у меня есть...
#include <stdio.h> #include <conio.h> #include <locale.h> #include <process.h> #include<malloc.h> #include <Windows.h> struct Stack { int info; Stack* next; }; void createStack(Stack **t, Stack **begin); void addElementInStack(Stack **t, Stack **begin, int info); void viewStack(Stack *begin); void runTask(Stack **begin); void deleteStack(Stack **begin); void main(void) { setlocale(LC_ALL, "Russian"); printf_s("Task one.\n\n"); _getch(); SetConsoleCP(1251); SetConsoleOutputCP(1251); Stack *begin, *t;//вершина и текущий элемент стека begin = NULL;//пустой стек t = NULL; int subTask; while (true) { system("cls"); printf_s("Choose 1 for creating stack\nChoose 2 for adding element in a stack\nChoose 3 for viewing stack\nChoose 4 for running task\nChoose 0 finishing\n"); fflush(stdin); scanf_s("%d", &subTask); switch (subTask) { case 1: createStack(&t, &begin);//создание break; case 2: int info; printf_s("Enter element: \n"); scanf_s("%d", &info); addElementInStack(&t, &begin, info);//добавим в стек элемент _getch(); break; case 3: viewStack(begin);//посмотреть break; case 4: runTask(&begin);//задача break; case 0: printf_s("Work is finished\n"); deleteStack(&begin); t = NULL; if (begin == NULL) { puts("Memory is Freed!"); } _getch(); break; default: printf_s("No!\n"); _getch(); break; } } } void createStack(Stack **t, Stack **begin) { *t = new Stack; if (*t != NULL) { printf_s("Stack is already created!");//есть элементы _getch(); return; } printf_s("Creating Stack: \n"); int count; printf_s("Enter number of elements in your initial stack: \n"); scanf_s("%d", &count); for (int i = 0; i < count; i++) { addElementInStack(t, begin, i); } _getch(); } void addElementInStack(Stack **t, Stack **begin, int info) { printf_s("Adding element: %d\n", info); if (*t == NULL) { *t = new Stack; (*t)->info = info; (*t)->next = *begin; *begin = *t; } else { *t = new Stack; (*t)->info = info; (*t)->next = *begin; *begin = *t; } } void viewStack(Stack *begin) { printf_s("Viewing Stack: \n"); Stack *t = begin; if (begin == NULL){ printf_s("Stack is empty! \n"); _getch(); return; } while (t != NULL){ printf_s("Element: %d\n", t->info); t = t->next; } _getch(); }
вот как-то перебрать именно значения из ячеек и как-то в такие рамки записать.
...%5=0&&...%2!=0
Решение задачи: «Односвязный список: удаление элементов,заканчивающихся на 5»
textual
Листинг программы
void deleteStack(Stack **begin){ Stack* t; while (*begin != NULL) { t = *begin; *begin = (*begin)->next; delete(t); }
Объяснение кода листинга программы
- В функции
deleteStack
определен тип данныхStack*
(указатель на структуруStack
). - В функции
deleteStack
объявлен указательt
на структуруStack
. - В функции
deleteStack
объявлен указательbegin
на указатель на структуруStack
. - В функции
deleteStack
выполняется циклwhile
, который выполняется до тех пор, пока указательbegin
не станет равнымNULL
. - Внутри цикла
while
значение указателяt
присваивается значению указателя*begin
. - Значение указателя
*begin
присваивается значениюnext
структуры*begin
. - Значение указателя
t
удаляется с помощью функцииdelete
. - После выполнения цикла
while
указательbegin
будет указывать на последний элемент списка. - Если список пуст, то указатель
begin
будет равенNULL
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д